我有一个Spring Boot应用程序,它使用原子作为事务管理器,我看到了这个日志:
错误:标识符为“1096044365_MTCYLJE3LJAUMY50BTAWDAYMDE=_MTYLJE3L JAUMY50BTQWMG=”的已准备事务不存在
连续打印。
在阅读了Atomicos文档后,我了解到Atomfos有一些崩溃恢复机制,我遵循了这个 http://fogbugz.atomikos.com/default4343.html?community.6.1918.14 但它没有解决我的问题。
我的问题是:为什么Atomikos试图永远清理一个tx?当没有机会让它提交状态时。
下面是堆栈跟踪:
org . PostgreSQL . xa . pgxa exception:在org . PostgreSQL . xa . pgx connection . roll back(pgx connection . Java:419)~[PostgreSQL-9.1-901-1 . JDBC 4 . jar处回滚准备好的事务时出错!/:na]at com . atomi KOS . data source . xa . xaresourcetransaction . roll back(xaresourcetransaction . Java:636)~[transactions-JTA-3 . 9 . 3 . jar!/:na]at com . atomikos . icatch . imp . roll back message . send(roll back message . Java:70)[transactions-3 . 9 . 3 . jar!/:na]at com . atomikos . ICAT ch . imp . propagation message . submit(propagation message . Java:83)[transactions-3 . 9 . 3 . jar!/:na]at com . atomikos . ICAT ch . imp . propagator $ propagator thread . run(propagator . Java:79)[transactions-3 . 9 . 3 . jar!/:na]at com . atomikos . ICAT ch . imp . propagator . submitpropagationmessage(propagator . Java:58)[transactions-3 . 9 . 3 . jar!/:na]at com . atomikos . icatch . imp . heurhazardstatehandler . ontimeout(heurhazardstatehandler . Java:135)[transactions-3 . 9 . 3 . jar!/:na]at com . atomikos . ICAT ch . imp . coordinatorimp . alarm(coordinatorimp . Java:933)【transactions-3 . 9 . 3 . jar!/:na]at com . atomikos . timing . pooledalarmtimer . notify listeners(pooledalarmtimer . Java:112)【atomikos-util-3 . 9 . 3 . jar!/:na]at com . atomikos . timing . pooledalarmtimer . run(pooledalarmtimer . Java:99)【atomikos-util-3 . 9 . 3 . jar!/:na]at Java . util . concurrent . threadpoolexecutor . run worker(threadpoolexecutor . Java:1149)[na:1 . 8 . 0 _ 151]at Java . util . concurrent . threadpoolexecutor $ worker . run(threadpoolexecutor . Java:624)[na:1 . 8 . 0 _ 151]at Java . lang . thread . run(thread . Java:748)[na:1 . 8 . 0 _ 151]由:org . PostgreSQL . util . psql exception:引起/:na]at org . PostgreSQL . core . v3 . queryexecutorimpl . process results(queryexecutorimpl . Java:1836)~[PostgreSQL-9.1-901-1 . JDBC 4 . jar!/:na]at org . PostgreSQL . core . v3 . queryexecutorimpl . execute(queryexecutorimpl . Java:257)~[PostgreSQL-9.1-901-1 . JDBC 4 . jar!/:na]at org . PostgreSQL . JDBC 2 . abstract JDBC 2 statement . execute(abstract JDBC 2 statement . Java:512)~[PostgreSQL-9.1-901-1 . JDBC 4 . jar!/:na]at org . PostgreSQL . JDBC 2 . abstract JDBC 2 statement . executewithflags(abstract JDBC 2 statement . Java:374)~[PostgreSQL-9.1-901-1 . JDBC 4 . jar!/:na]at org . PostgreSQL . JDBC 2 . abstract JDBC 2 statement . execute update(abstract JDBC 2 statement . Java:302)~[PostgreSQL-9.1-901-1 . JDBC 4 . jar!/:na]at org . PostgreSQL . xa . pgx connection . roll back(pgx connection . Java:409)~[PostgreSQL-9.1-901-1 . JDBC 4 . jar!/:na]...省略了12个公共框架
如何停止此重试机制
更新到4.0.6后再次发生这种情况
2018-01-22 20:42:52.247 错误 [RequestId:] 1 --- [ Atomikos:51] c.a.datasource.xa.XA资源交易 : XA资源的启发式终止交易: 3137322E31372E302E342E746D3135313636373031313630343030383435:3137322E3 1372E302E342E746D383435 与状态HEUR_HAZARD 2018-01-22 20:42:52.247 错误 [RequestId:] 1 --- [ Atomikos:51] com.atomikos.icatch.imp.协调器Impimp : 协调器的本地启发式终止 172.17.0.4.tm151667011604400845 与状态HEUR_HAZARD 2018-01-2220:42:52.247 错误 [RequestId:] 1 --- [ Atomikos:51] com.atomikos.publish.event发布者 : 事务 172.17.0.4.tm151667011604400845 损坏 - 检查 https://www.atomikos.com/Documentation/HowToHandleHeuristics 以了解更多信息 2018-01-22 20:42:52.420 WARN [请求Id:] 1 --- [ Atomikos:] 51] c.a.datasource.xa.XA资源交易 : XA 资源 'postgres': 回滚为 XID '3137322E31372E302E342E746D3135313636373031313630343030383435:3137322E31372E302E342E302E342E746D383435' 提高 -3:XA 资源检测到内部错误
org.postgresql.xa.PGXA 异常: 在 org.postgresql.xa.PGXA 连接处回滚准备好的事务(PGXA连接.java:419) ~[postgresql-9.1-901-1.jdbc4.jar!:na] at com.atomikos.datasource.datasource.xa.ResourceTransaction.回滚(XAResourceTransaction.java:460) ~[事务-jta-4.0.6.jar!/:na] 在 com.atomikos.icatch.imp.回滚消息.send(回滚消息.java:47) [transactions-4.0.6.jar!/:na] 在 com.atomikos.icatch.imp.回滚消息.send( 回滚消息.java:47)回滚消息.java:20) [transactions-4.0.6.jar!/:na] 在 com.atomikos.icatch.imp.传播消息.submit(传播消息.java:67) [事务-4..jar 0.6.jar!:na].java.jar.java 在HeurHazardStateHandler.java:75) [transactions-4.0.6.jar!/:na] at com.atomikos.icatch.imp.CoordinatorImp.alarm(CoordinatorImp.java:650) [transactions-4.0.6.jar!/:na] at com.atomikos.timing.pooledAlarmTimer.notifyListeners(池化alarmTimer.java:95) [atomikos-util-4.0.6.jar!/:na] at com.atomikos.timing.pooledAlarmTimer.run(池alarmTimer.java:82) [atomikos-util-4.0.6.jar!/:na] 在 java.util.util.threadPoolExecutor.runer(线程池检测器.java:1149) [na:1.8.0_151] 在 java.util.concurrent.线程池加速器$Worker.run(线程池专家.java:624) [na:1.8.0_151] 在 java.lang.Thread.run(线程.java:748) [na:1.8.0_151] 由以下原因引起的: org.postgresql.util.PSQL 异常: 错误: 准备好的具有标识符“1096044365_MTcyLjE3LjAuNC50bTE1MTY2NzAxMTYwNDQwMDg0NQ==_MTcyLjE3LjAuNC50bTg0NQ==” 的事务在组织.postgresql.core.v3.查询executorimpl.receiveerorResponse(查询扫描器.java:2103) ~[postgresql-9.1-901-1.jdbc4.jar!/:na] at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836) ~[postgresql-9.1-901-1.jdbc4.jar!/:na] at org.postgresql.core.v3.QueryExecutorImpl.execute(查询executorImpl.java:257) ~[postgresql-9.1-901-1.jdbc4.jar!/:na] 在 org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2状态.java:512) ~[postgresql-9.1-901-1.jdbc4.jar!/:na]org.postgresql.jdbc2.AbstractJdbc2Statement.execute使用标志(摘要Jdbc2声明.java:374) ~[postgresql-9.1-901-1.jdbc4.jar!/:na] at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2声明.java:302) ~[postgresql-9.1-901-1.jdbc4.jar!/:na] 在 org.postgresql.xa.PGXAConection.rollback(PGXAConection.java:409) ~[postgresql-9.1-901-1.jdbc4.jar!/:na] ...省略了 13 个常见帧
在深入研究了 Atomikos 源代码并浏览了堆栈跟踪之后。以下是我对协调员Impler中警报方法所做的更改(在Atomicos源代码中.java这解决了我的问题。
public void alarm ( AlarmTimer timer )
{
try {
boolean isHeuristic = stateHandler_ instanceof
HeurHazardStateHandler
|| stateHandler_ instanceof HeurAbortedStateHandler
|| stateHandler_ instanceof HeurCommittedStateHandler || stateHandler_ instanceof HeurMixedStateHandler;
if (!(isHeuristic)) {
stateHandler_.onTimeout ();
}
} catch ( Exception e ) {
LOGGER.logWarning( "Exception on timeout of coordinator " + root_ , e );
}
}
这看起来像是TransactionEssentials 4.0.6中修复的错误
Apache ShardingSphere 默认的 XA 事务管理器为 Atomikos。 数据恢复 在项目的 logs 目录中会生成xa_tx.log, 这是 XA 崩溃恢复时所需的日志,请勿删除。 修改配置 可以通过在项目的 classpath 中添加 jta.properties 来定制化 Atomikos 配置项。 详情请参见Atomikos官方文档。
我有一个应用程序通过jpa对各种数据库表进行大量写入。其中一个写入可能会导致乐观锁异常。如果抛出一个,没什么大不了的,我希望事务的其余部分提交。 我通过以下方式查看了Spring事务上的无回滚功能: 我的应用程序捕获了实体的合并方法周围的OLException,该方法将引发此异常,但事务仍会回滚。我做了一些挖掘,看看发生了什么,在JpaTransactionManager的doCommit方法中,
当我尝试在不使用事务的情况下更新Neo4JClient中的现有节点时,它对id和Name属性具有唯一约束,我收到以下异常: 节点6已经存在的标签用户和属性"Name"=[Mike] 但当我尝试更新事务中的节点时,会收到以下异常: 执行请求时收到意外的HTTP状态。 响应状态为:404未找到 Neo4j的响应(可能包括有用的细节!)was:{“结果”:[],“错误”:[{“代码”:“Neo.Clie
我目前在Spring集成中处理JMS事务时遇到困难。我正在创建的集成流程如下所示: JMS队列A- 我希望在JMS队列B和JMS队列C上保证消息的传递。然而,为了使传递稍微困难一些,我希望将导致错误的消息存储在单独的JMQ队列上,并在队列a上确认消息。 但是,如果我对此进行测试并在队列C上设置消息之前抛出错误(让我们假设队列B首先完成,队列C其次完成),事务将确认队列A并在队列B和错误队列上提交消
问题内容: 我在正在使用的一个应用程序中使用Spring和Hibernate,但是在处理事务时遇到了问题。 我有一个服务类,该类从数据库中加载一些实体,修改它们的一些值,然后(当所有内容都有效时)将这些更改提交给数据库。如果新值无效(我只能在设置它们后检查),但我不想保留更改。为了防止Spring / Hibernate保存更改,我在方法中抛出异常。但是,这导致以下错误: 这是服务: 这就是我调用
我在一个应用程序中使用Spring和Hibernate,我在处理事务时遇到了问题。 我有一个服务类,它从数据库加载一些实体,修改它们的一些值,然后(当一切都有效时)将这些更改提交给数据库。如果新值无效(我只能在设置它们后检查),我不想保留更改。为了防止Spring/Hibernate保存更改,我在方法中抛出一个异常。但是,这会导致以下错误: 这就是服务: 我就是这样调用它的: 我希望发生的事情是: