0

受信メッセージ A をメッセージ駆動型 Bean で処理した後、フォローアップ メッセージ B を別のキューに書き込むシナリオがあります。Glassfish 3.1を使用しています。

この場合の 1 つの目標は、メッセージ B の投稿が非同期的に行われ、信頼できる必要がないことです。つまり、メッセージ A の処理後にメッセージ B の投稿を試みて失敗した場合、メッセージ A の処理を​​ロールバックしません。 .

2 番目の目標は、メッセージ B を投稿することで、メッセージ A をカバーするトランザクションの範囲をブロックしたり、拡張したりしないことです。メッセージ A をカバーするトランザクションをできるだけ早く閉じ、メッセージ B の処理中に開いたままにしないでください。

1 つのアイデアは、この目的のために @Asynchronous とマークされたメソッドを持つ特別な EJB を作成し、onMessage() の最後でその EJB をルックアップして呼び出すことです。ただし、この場合のベスト プラクティスであるかどうかはわかりません。

このようなケースやより複雑なケースを処理する追加のオーケストレーション ソリューション (ESB など) を導入することには関心がありません。

4

1 に答える 1

0

試してみましたか?

私の理解では、MDB は独自のトランザクション内にあるということです。したがって、B の問題が A をロールバックすることはありません。これはデフォルトの動作です。

于 2011-05-06T16:52:32.097 に答える