受信メッセージ A をメッセージ駆動型 Bean で処理した後、フォローアップ メッセージ B を別のキューに書き込むシナリオがあります。Glassfish 3.1を使用しています。
この場合の 1 つの目標は、メッセージ B の投稿が非同期的に行われ、信頼できる必要がないことです。つまり、メッセージ A の処理後にメッセージ B の投稿を試みて失敗した場合、メッセージ A の処理をロールバックしません。 .
2 番目の目標は、メッセージ B を投稿することで、メッセージ A をカバーするトランザクションの範囲をブロックしたり、拡張したりしないことです。メッセージ A をカバーするトランザクションをできるだけ早く閉じ、メッセージ B の処理中に開いたままにしないでください。
1 つのアイデアは、この目的のために @Asynchronous とマークされたメソッドを持つ特別な EJB を作成し、onMessage() の最後でその EJB をルックアップして呼び出すことです。ただし、この場合のベスト プラクティスであるかどうかはわかりません。
このようなケースやより複雑なケースを処理する追加のオーケストレーション ソリューション (ESB など) を導入することには関心がありません。