0

MDBがメッセージを受信し、CMT / Requiredトランザクションでメッセージの処理を開始したと仮定して、トランザクションが完了するまでに時間がかかる可能性があると仮定します。

このようなシナリオでは、最初のトランザクションがまだ進行中のときに、別のトランザクションで別のMDBインスタンスが重複メッセージを受信して​​処理する可能性がありますか?

または、コンテナは、MDBがCMT / Requiredトランザクションでメッセージの処理でビジー状態になっている間、他のMDBインスタンスが同じメッセージの複製を受信しないことを保証しますか?

4

1 に答える 1

0

トランザクションの一部である間はメッセージがロックされることを期待します。JMS仕様で要求されているように、重複は送信しないでください。

4.4.15メッセージの重複生成:JMSプロバイダーは重複メッセージを生成してはなりません。これは、メッセージを生成するクライアントがそのJMSプロバイダーに依存して、メッセージのコンシューマーがメッセージを1回だけ受信することを保証できることを意味します。

したがって、メッセージングプロバイダーを信頼して、最初のコピーが明示的にロールバックされるか、トランザクションがタイムアウトして暗黙的にロールバックされない限り、MDBがメッセージの2番目のコピーを受信しないようにすることができると思います。これらの操作は両方とも、メッセージを「ロック解除」し、JMSRedeliveredをtrueに設定し、JMSXDeliveryCountをインクリメントして、MDBへの再配信に使用できるようにする必要があります。

私は、EJB、JCA、またはJTA仕様(または、さらに言えばJ2EE)の1つ(または複数)でJMS仕様を補足するための要件が​​もっとあると思います。私はチェックしていません。

于 2011-08-01T13:17:04.507 に答える