我正在运行一个 JPA/Spring 应用程序,该应用程序连接到 Microsoft SQL Server 上启用了多个 XA 的数据源。一切正常,全局事务正确启动并根据需要回滚......
但是,JBoss 时不时地变得疯狂,每隔几秒钟就会开始发送以下警告:
10:25:22,524 WARN [com.arjuna.ats.jta] (Periodic Recovery) ARJUNA016027: Local XARecoveryModule.xaRecovery got XA exception XAException.XAER_RMERR: javax.transaction.xa.XAException: The function RECOVER: failed. The status is: -3. Error: "*** SQLJDBC_XA DTC_ERROR Context: xa_recover, state=1, StatusCode:-3 (0xFFFFFFFD) ***"
at com.microsoft.sqlserver.jdbc.SQLServerXAResource.DTC_XA_Interface(SQLServerXAResource.java:550)
at com.microsoft.sqlserver.jdbc.SQLServerXAResource.recover(SQLServerXAResource.java:728)
at org.jboss.jca.adapters.jdbc.xa.XAManagedConnection.recover(XAManagedConnection.java:358)
at org.jboss.jca.core.tx.jbossts.XAResourceWrapperImpl.recover(XAResourceWrapperImpl.java:162)
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.xaRecovery(XARecoveryModule.java:503) [jbossjts-4.16.2.Final.jar:]
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.resourceInitiatedRecoveryForRecoveryHelpers(XARecoveryModule.java:471) [jbossjts-4.16.2.Final.jar:]
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.bottomUpRecovery(XARecoveryModule.java:385) [jbossjts-4.16.2.Final.jar:]
at com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.periodicWorkSecondPass(XARecoveryModule.java:166) [jbossjts-4.16.2.Final.jar:]
at com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.doWorkInternal(PeriodicRecovery.java:789) [jbossjts-4.16.2.Final.jar:]
at com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.run(PeriodicRecovery.java:371) [jbossjts-4.16.2.Final.jar:]
到目前为止,我还无法破译我在这里应该做什么,我有点担心将这种状态的应用程序投入生产。
任何人都可以阐明为什么会发生这种情况,如何解决和避免它?
编辑:
在 Windows 日志中,我找不到任何看起来像 DTC 错误的内容:
MSDTC 使用以下设置开始:
安全配置(OFF = 0 和 ON = 1):允许远程管理员 = 0,网络客户端 = 0,事务管理器通信:允许入站事务 = 0,允许出站事务 = 0,事务 Internet 协议 (TIP) = 0,启用 XA事务 = 1,启用 SNA LU 6.2 事务 = 1,MSDTC 通信安全 = 需要相互验证,帐户 = NT AUTHORITY\NetworkService,检测到防火墙排除 = 0
已安装事务桥 = 0 过滤重复事件 = 1
正在尝试初始化 Microsoft 分布式事务协调器 (MS DTC)。这只是一条信息性消息。无需用户操作。
涉及 Microsoft 分布式事务协调器 (MS DTC) 的任何不确定分布式事务的恢复已完成。这只是一条信息性消息。无需用户操作。
数据库 MyDatabase(数据库 ID 20)在 1 秒内完成恢复(分析 589 毫秒,重做 0 毫秒,撤消 398 毫秒。)这只是一条信息性消息。无需用户操作。