最近、同僚をサポートして、システムテストがワイルドフライで渡されない理由と、weblogicとglass fishで一貫して通過するシステムテストを確認しました。Wildfly 10 jmsは、XAトランザクションの一部としてメッセージをキューに送ります。
ログを分析した後、バックアップされたスレッドによって送信されたJMSメッセージが、あまりにもすぐにキューにコミットされることに関連していることが明らかになりました。 MDBがコミットします。したがって、メッセージを送信するMDBが実行される前にメッセージが出ています。
のWebLogicでは、期待される動作を達成するために、あなたはXAが設定されているコンテナによって与えられた接続ファクトリを取るとき、あなたは=真と 承認取引 とconnection.createseesionを設定することを確認する必要があります=セッションが処理されました。自動上記のスニペットを除き、このURL http://www.mastertheboss.com/jboss-server/jboss-jms/sending-jms-messages-over-xa-with-wildfly-jboss-asに示したものと同様の処理で
が設定され、最初のパラメータが偽に設定されている確認します。
weblogicとglassfishのコンフィグレーションを使用すると、何もコミットされず、送信されたJMSメッセージがロールバックされるようにシステムが動作します。
上記の例のような構成を使用する場合、代わりに、JMSメッセージがただちに発生し、プロデューサトランザクションが実際に終了する前にコンシューマMDBが即座にトリガリングされ、システムテストが失敗します。
公式のJMS構成によれば、トランザクション= XA属性で接続プールされたファクトリを使用すると、コンテナはトランザクションのコミットをすぐに親トランザクションのライフサイクルにバインドする必要があります。
特に、Java:/ JmsXa接続ファクトリに関する公式のドキュメントを参照してください。
https://docs.jboss.org/author/display/WFLY10/Messaging+configuration
私の同僚は、最初は非プールされた接続ファクトリを使用していたが、注入情報の参照はそれ以来修正されました。私は流しのメッセージで可能なすべてのパラメータの組み合わせを試しましたが、私の結果はシットルです: どちらか早すぎるか送信されません。
他のすべてのリソースはXAであると判断します。すなわち、oracle dbはXAドライバを使用しています。
親トランザクションコミットが機能している場合にのみ、JMSメッセージを送信することができますか?そうであれば、セッションの設定方法は誰でも確認できますか?
私の同僚が、キューからメッセージを消費するためにメンズ自身が使用する接続ファクトリの設定に関して間違いを犯していないかどうかを確認します。大きな問題です。