2

私はJMSとJTAで何かがうまくいかないと思います。すべてのCMTを備えたJavaEEコンテナで実行しています。これが私がしていることです:

  1. SLSBで、データベースに何かを書き込みます
  2. SLSBと同じ方法で、JMSキューにメッセージを送信します
  3. 同じコンテナ内のMDBがJMSキューをリッスンし、メッセージを取得します
  4. MDBはデータベースを読み取ります

問題は、MDBがステップ1でデータベースに加えられた変更を認識しないことです。

予想どおり、手順1と2が単一のXAトランザクション内で発生することを確認しました。私の期待は、最初のXAがコミットされた後、2番目のXAトランザクションがステップ3で開始されることです。しかし、MDBは、メッセージを送信したXAトランザクションがコミットされる前にメッセージを受信して​​いるようです。

私の期待は間違っていて、私が見ているものは正常ですか?

JBoss6で実行しています。SLSBはローカルです。SLSBとMDBの両方が同じアプリケーションにあります。

4

2 に答える 2

4

問題を見つけました!私のJMS接続ファクトリはXAに対応していませんでした。/XAConnectionFactoryでJMS接続ファクトリを検索しました。名前にもかかわらず、JBossで通常のアプリを検索するのは間違ったリソースです。java:/ XAConnectionFactoryもありますが、これも機能しません。正しいリソース名はjava:/JmsXAです。私はそれを使用しました、そしてすべてが期待通りに働いています。

私を正しい方向に導いてくれた@strmqmに感謝します。

于 2011-08-16T09:13:58.683 に答える
1

WebLogic 7を使用して構築されたアプリで概念的に同様の問題が発生しました。tx2(tx1でのJMS送信によって開始)が読み取ろうとした時点で、tx1からのDBコミットは完了していませんでした。

問題は、構成にXA以外のdb接続(Oracle DBへの)を備えたWLS7XAエミュレーションレイヤーが含まれていたことでした。このリスクは、そのXAショートカットの一部でした。どうやら、真のXAを使ってDBまで行っていたら、その穴は閉じていただろう。それをテストすることになったことがありません。

これはJBossだとあなたは言います。XAをバイパスし、これと同じ驚くべき結果をもたらす同様のシムを持っている可能性はありますか?

于 2011-08-15T21:23:22.750 に答える