1

ブローカ キューにメッセージを書き込もうとしています。ただし、JMS トランザクションをコミットしようとすると、リクエスト全体が失敗し、その後は毎回ロールバックを試みます。Oracle XA ドライバーを使用します。この問題を投稿する場所がわからない: MQ フォーラムまたは Oracle フォーラム。したがって、ここで試してみると思います。誰かがこれを解決するのを手伝ってくれますか。

エラー:

[9/25/12 17:10:06:871 EDT] 0000003e XATransaction E   J2CA0027E: An exception occurred while invoking commit on an XA Resource Adapter from dataSource JMS$QCF$JMSManagedConnection@23, within transaction ID {XidImpl: formatId(57415344), gtrid_length(36), bqual_length(54), data(00000139ff43ef2500000001000043106c82332ef6bc723402e84f341fb357080ddd4d1b00000139ff43ef2500000001000043106c82332ef6bc723402e84f341fb357080ddd4d1b000000010000000000000000000000000001)}: javax.transaction.xa.XAException: The method 'xa_commit' has failed with errorCode '-7'.
    at com.ibm.mq.jmqi.JmqiXAResource.commit(JmqiXAResource.java:407)
    at com.ibm.ejs.jms.JMSManagedSession$JMSXAResource.commit(JMSManagedSession.java:1702)
    at com.ibm.ejs.j2c.XATransactionWrapper.commit(XATransactionWrapper.java:463)
    at com.ibm.ws.Transaction.JTA.JTAXAResourceImpl.commit_one_phase(JTAXAResourceImpl.java:305)
    at com.ibm.ws.Transaction.JTA.RegisteredResources.flowCommitOnePhase(RegisteredResources.java:2916)
    at com.ibm.ws.Transaction.JTA.TransactionImpl.commitXAResources(TransactionImpl.java:2533)
    at com.ibm.ws.Transaction.JTA.TransactionImpl.stage1CommitProcessing(TransactionImpl.java:1687)
    at com.ibm.ws.Transaction.JTA.TransactionImpl.processCommit(TransactionImpl.java:1647)
    at com.ibm.ws.Transaction.JTA.TransactionImpl.commit(TransactionImpl.java:1582)
    at com.ibm.ws.Transaction.JTA.TranManagerImpl.commit(TranManagerImpl.java:247)
    at com.ibm.ws.Transaction.JTA.TranManagerSet.commit(TranManagerSet.java:168)
    at com.ibm.ws.Transaction.JTA.UserTransactionImpl.commit(UserTransactionImpl.java:293)
    at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1009)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:255)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1002)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:901)
    at org.springframework.scheduling.commonj.DelegatingWork.run(DelegatingWork.java:61)
    at com.ibm.ws.asynchbeans.J2EEContext$RunProxy.run(J2EEContext.java:264)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:1137)
    at com.ibm.ws.asynchbeans.WorkWithExecutionContextImpl.go(WorkWithExecutionContextImpl.java:195)
    at com.ibm.ws.asynchbeans.CJWorkItemImpl.run(CJWorkItemImpl.java:187)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1560)
.
[9/25/12 17:10:06:880 EDT] 0000003e RegisteredRes W   WTRN0052E: An attempt by the transaction manager to call one phase commit on a transactional resource has resulted in an XAER_RMFAIL error. The resource was com.ibm.ws.Transaction.JTA.JTAXAResourceImpl@1d07bf1#{XidImpl: formatId(57415344), gtrid_length(36), bqual_length(54), data(00000139ff43ef2500000001000043106c82332ef6bc723402e84f341fb357080ddd4d1b00000139ff43ef2500000001000043106c82332ef6bc723402e84f341fb357080ddd4d1b000000010000000000000000000000000001)}
[9/25/12 17:10:06:887 EDT] 0000003e DefaultMessag W org.springframework.jms.listener.DefaultMessageListenerContainer handleListenerSetupFailure Setup of JMS message listener invoker failed for destination 'queue:///RANDOM QUEUE?targetClient=1' - trying to recover. Cause: Heuristic completion: outcome state is mixed; nested exception is javax.transaction.HeuristicMixedException
4

2 に答える 2

1

原因と解決策は次のとおりです

見積もり-

これらのエラーの原因は通常、WebSphere MQ メッセージング プロバイダーの JMS 接続が WebSphere Application Server によって閉じられた結果です。これは、接続の期限切れタイムアウトが期限切れになったためです。

解像度-

この問題を解決するには、アプリケーションで使用されている JMS 接続ファクトリの [接続プール] プロパティの [期限切れタイムアウト] がゼロに設定されていることを確認してください。これにより、JMS 接続がフリー プールに返されたときに閉じられるのを防ぎ、未処理のトランザクション作業を確実に完了することができます。

また、障害のある DataDirect ドライバーが原因である場合もあり、IBM によって報告および修正されています。これを参照してください。

于 2012-09-26T19:29:46.887 に答える
0

以前は、複数の JMS セッションがありました。それがおそらく、いずれかの環境での問題の原因でした。そのため、2 diff に変更する必要がありました。セッション&今それが動作します!

ジュリアン:

私のシナリオはあなたのシナリオとは少し異なります。以前は次のことがありました。

要求メッセージがキューに入れられました。このキューはピックアップされ、処理されました。次に、DB に保存し、別のメッセージを生成し、それを別のブローカー キューに入れ、最初のメッセージへの応答を送信しました。これはすべて1つのフローでした。

これを 2 diff に変更しました。フロー: リクエスト --> プロセス --> DB に保存 --> 返信、そしてブローカー キューに入れる別のフロー。

お役に立てれば

于 2012-10-18T16:18:23.570 に答える