2

JMS を読み取り、いくつかのデータベース トランザクションをすべて 1 つの XA トランザクションの一部として実行するアプリケーションがあります。メッセージをもう一度読んでもらいます (ロールバックが以前に開始された場合、MDB がプロセス全体をもう一度トリガーすることは望ましくありません)。

4

1 に答える 1

6

私があなたを正しく理解していることを確認するために、データベースでいくつかのアクションを実行するトランザクションメッセージ駆動型 Bean があります。MDB を XA トランザクションの一部にする必要はありますが、MDB が参加するトランザクションの状態にデータベース アクションが影響することは望ましくありません。

そうは言っても、2つの解決策があります。

  1. MDB がコンテナー管理のトランザクション内で実行される場合は、すべてのデータベース アクションを@REQUIRES_NEW注釈付きの EJB にラップします (すべてがそのようなトランザクション コンテキストで既に実行されている場合を除く)。

  2. MDB が bean-managedの場合、メッセージ配信はトランザクションの一部ではないため、何があっても再配信されません — EJB Core Contracts and Requirementsのセクション 5.4.12 :

    Bean 管理のトランザクション境界を使用するメッセージ駆動型 Bean が javax.transaction. トランザクションを区別するための UserTransaction インターフェイス。Bean を呼び出すメッセージ受信はトランザクションの一部ではありません。

于 2011-09-15T12:32:11.430 に答える