2

私はそれについて読みましTransactionAttributeType.REQUIRED

クライアントがトランザクション内で実行され、エンタープライズ Bean のメソッドを呼び出す場合、メソッドはクライアントのトランザクション内で実行されます。クライアントがトランザクションに関連付けられていない場合、コンテナはメソッドを実行する前に新しいトランザクションを開始します。

クライアントは、サーバー A にデプロイされた EJB アプリケーションであり、methodB別のサーバー B にデプロイされた別の Bean のメソッドをトランザクション内で呼び出します。methodBhasの場合TransactionAttributeType.REQUIRED、クライアント アプリケーションによって開始されたのと同じトランザクションで実行されます。右?

はいの場合、別のサーバーにデプロイされたアプリケーションは、別のサーバーで開始されたトランザクションをどのように認識しますか?

methodBいいえの場合、同じトランザクションをどのように使用しますか?

私はEJBに少し慣れていないので、気楽にやってください。正しい方向へのポインタは高く評価されます。

4

1 に答える 1

1

サーバー A のクライアントがトランザクションを開始した場合、トランザクション コンテキストは で注釈が付けられた Bean に伝播されTransactionAttributeType.REQUIREDます。召喚の一部です。

したがって、最初の質問に対する答えは「はい」ですmethodB。サーバー B では、サーバー A 上の EJB アプリケーションによって呼び出され、同じトランザクションで実行されます。最後のcommitorrollbackは、サーバー A で実行されているクライアントによって制御されます。

サーバー A のクライアントは、同じトランザクションに他の XA リソースを登録することもできます。たとえば、XA データ ソースに書き込み、XA JMS を使用してメッセージを送信します。次に、commitトランザクションで によって引き起こされた変更が永続methodB化され、行がデータベースに書き込まれ、メッセージがキューに入れられます。クライアントが を実行するrollbackと、すべての作業単位がロールバックされます (何も変更されません)。

関連: 2 フェーズ コミット プロトコル (ウィキペディア)

于 2013-08-01T20:47:18.947 に答える