私はJMSとJTAで何かがうまくいかないと思います。すべてのCMTを備えたJavaEEコンテナで実行しています。これが私がしていることです:
- SLSBで、データベースに何かを書き込みます
- SLSBと同じ方法で、JMSキューにメッセージを送信します
- 同じコンテナ内のMDBがJMSキューをリッスンし、メッセージを取得します
- MDBはデータベースを読み取ります
問題は、MDBがステップ1でデータベースに加えられた変更を認識しないことです。
予想どおり、手順1と2が単一のXAトランザクション内で発生することを確認しました。私の期待は、最初のXAがコミットされた後、2番目のXAトランザクションがステップ3で開始されることです。しかし、MDBは、メッセージを送信したXAトランザクションがコミットされる前にメッセージを受信しているようです。
私の期待は間違っていて、私が見ているものは正常ですか?
JBoss6で実行しています。SLSBはローカルです。SLSBとMDBの両方が同じアプリケーションにあります。