4

Microsoft SQL Server 上の複数の XA 対応データソースに接続する JPA/Spring アプリケーションを実行しています。グローバルトランザクションが正しく開始され、必要に応じてロールバックされるため、すべてが正常に機能します...

しかし、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 は次の設定で開始されました。

セキュリティ構成 (オフ = 0 およびオン = 1): リモート管理者を許可する = 0、ネットワーク クライアント = 0、トランザクション マネージャー通信: インバウンド トランザクションを許可する = 0、アウトバウンド トランザクションを許可する = 0、トランザクション インターネット プロトコル (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 ミリ秒)。これは単なる情報メッセージです。ユーザーの操作は必要ありません。

4

3 に答える 3

3

Had the same problem.

How did I solve it? Using the distributed transactions (inserting some data in my case).

My guess, and I say guess because the sqljdbc4.jar source code has not being released and can not tell what really is the issue. Well, my guess is that each time your jboss server starts, your distributed transaction framework checks for transactions to be recovered. These are hold in a table that the first time is empty, so this raise the warning (com.microsoft.sqlserver.jdbc.SQLServerXAResource.DTC_XA_Interface(SQLServerXAResource.java:550) ) because again the xp_sqljdbc_xa_recover stored procedure cannot find anything (I'm guessing again).

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

于 2014-03-05T18:03:23.290 に答える
1

同じ問題があります。同じ DBMS を指している限り、実行するインスタンスに関係なく、エラーが表示され続けます。ストアド プロシージャ「xp_sqljdbc_xa_recover」を実行すると、問題は自然に解決しました。ペイン・ジェームスが指摘したように

于 2015-07-24T04:08:53.170 に答える
0

DTCでXAが有効になっていないか、SqlJDBCXAUserロールを付与するのを忘れています。

于 2013-01-24T16:17:57.293 に答える