JBoss spamming XA Recovery Alerts

I am running a JPA / Spring application that connects to multiple data sources enabled by XA on Microsoft SQL Server. Everything works very well, while global transactions start and roll back correctly as needed ...

But from time to time, JBoss becomes furious and begins to send the following warning every few seconds:

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:] 

So far, I have not been able to decrypt what I expect to do here, and I'm a little worried that the application in this state will be released.

Can anyone shed light on why this is happening, how to solve it and avoid it?

EDIT:

In Windows logs, I could not find anything similar to a DTC error:

MSDTC started with the following settings:

Security Configuration (OFF = 0 and ON = 1): Allow Remote Admin = 0, Network Clients = 0, Transaction Manager Communications: Allow Inbound Transactions = 0, Allow Outbound Transactions = 0, Transaction Protocol (TIP) = 0, Enable XA Transactions = 1, Enable SNA LU 6.2 Transactions = 1, MSDTC Communication Security = Mutual Authentication Required, Account = NT AUTHORITY \ NetworkService, Firewall Exception Detected = 0

Installed transaction bridge = 0 Filtering recurring events = 1


Attempt to initialize Microsoft Distributed Transaction Coordinator (MS DTC). This is an informational message. No user action required.


The recovery of any suspicious distributed transactions involving Microsoft Distributed Transaction Coordinator (MS DTC) has been completed. This is an informational message. No user action required.


Recovery completed for MyDatabase (database identifier 20) after 1 second (analysis 589 ms, repeat 0 ms, cancel 398 ms.) This is only an informational message. No user action required.

+4
source share
3 answers

Had the same problem.

How did I resolve it? Using distributed transactions (inserting some data into my case).

My guess is, and I'm saying, because the sqljdbc4.jar source code is not released and cannot tell what the problem is. I believe that every time your jboss server starts up, your distributed transaction structure checks the transactions to be recovered . They are saved in the table, which is empty for the first time, so this causes a warning (com.microsoft.sqlserver.jdbc.SQLServerXAResource.DTC_XA_Interface (SQLServerXAResource.javacla50)), because the xp_sqljdbc_xa_recover is stored again , I cannot find anything (I guess again )

So, basically, something inserted into the databases using a distributed transaction and started the jboss / tomcat server again to get rid of the warning.

+3
source

I have the same problem, the error continues to be displayed no matter which instance I run, while it points to the same DBMS. When I run the stored procedure "xp_sqljdbc_xa_recover", the problem is resolved on its own. As noted by Payney James

+1
source

You either do not have XA in DTC, or you forgot to provide the SqlJDBCXAUser role.

0
source

All Articles