我有一个独立的应用程序A,它调用在jboss eap 6.2.3中部署的Web服务B. jboss中的应用程序使用mysql数据源。这个应用程序集成工作得非常好。
我需要将独立应用程序本身网络化为弹簧休息数据jpa微服务 所以我为该独立应用程序A编写了一个spring boot包装器。它在一个嵌入式tomcat中运行,并调用在jboss中运行的aplpication B. 我还将属性文件中的一些配置逻辑移植到嵌入式h2数据库中。
现在在我看到如下所示的这个异常,以便通过jboss中的应用程序B插入到mysql中。我的猜测是早期的简单事务,并且运行良好现在已成为有时失败的2阶段提交。 如何防止这种情况?
Caused by: javax.transaction.RollbackException: ARJUNA016053: Could not commit transaction.
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1177)
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126)
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:92) [jboss-as-ejb3-7.3.3.Final-redhat-SNAPSHOT.jar:7.3.3.Final-redhat-SNAPSHOT]
... 67 more
Caused by: org.infinispan.CacheException: Could not prepare.
at org.infinispan.transaction.synchronization.SynchronizationAdapter.beforeCompletion(SynchronizationAdapter.java:70) [infinispan-core-5.2.7.Final-redhat-2.jar:5.2.7.Final-redhat-2]
at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:76)
at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:273)
at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:93)
at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162)
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1165)
... 70 more
Caused by: javax.transaction.xa.XAException
at org.infinispan.transaction.TransactionCoordinator.prepare(TransactionCoordinator.java:161) [infinispan-core-5.2.7.Final-redhat-2.jar:5.2.7.Final-redhat-2]
at org.infinispan.transaction.TransactionCoordinator.prepare(TransactionCoordinator.java:123) [infinispan-core-5.2.7.Final-redhat-2.jar:5.2.7.Final-redhat-2]
at org.infinispan.transaction.synchronization.SynchronizationAdapter.beforeCompletion(SynchronizationAdapter.java:68) [infinispan-core-5.2.7.Final-redhat-2.jar:5.2.7.Final-redhat-2]
... 75 more
答案 0 :(得分:1)
Spring Boot对JTA提供开箱即用的支持。当它在JTA事务管理器可用的环境中运行时,它使用它而不是为您的数据存储创建本地事务管理器。如果这不是您想要的,您可以通过在配置中添加spring.jta.enabled=false
来禁用jta支持。
答案 1 :(得分:0)
感谢您的回答。在某些情况下会有用。 然而,在发布后,我意识到了问题中的缺陷。
独立应用程序A. webified应用程序(即使运行embeddedtomcat的微服务)说A1
两者实际上只是休息客户端在jboss eap 6.2.3中部署的Web服务B中运行的休息服务。
A和A1也可能只是由一个简单的人类访问者从应用程序B的浏览器中取代。
我不认为A或A1可以以任何方式影响B的交易。 正确?
无论如何,问题是由于应用程序A1的B接近。 实际问题与部署B的集群的集群事件有关,并由A1触发。有点复杂的情况。唯一的问题是在群集更改事件甚至可能达到之前太早尝试插入。