2.7.2 BMT

Enterprise Beanでトランザクション管理をするモデルです。BMTは,Session Bean,およびMessage-driven Beanが対象です(Entity Beanは対象外で,常にCMTになります)。

BMTでは,Enterprise Beanのビジネスメソッドでjavax.transaction.UserTransactionを利用し,次の操作をします。

  1. トランザクションを開始
  2. リソースマネジャを更新
  3. トランザクションをコミットまたはロールバック

Stateless Session Beanでは,1ビジネスメソッド内で1トランザクションを決着(コミットまたはロールバック)させる必要があります。また,Message-driven Beanでは,次のメソッド内で,トランザクションを決着(コミットまたはロールバック)させる必要があります。メソッドはEJBのバージョンごとに異なります。

一方,Stateful Session Beanでは,複数のビジネスメソッドを一つのトランザクションスコープに含めることができます。このとき,EJBコンテナは,Beanインスタンスとトランザクションの関係を保持します。BMTでのStateful Session Beanを次の図に示します。

図2-5 BMTでのStateful Session Bean

[図データ]

表2-17 BMTのトランザクション制御

クライアント側トランザクションBeanインスタンスのトランザクションメソッドに結び付くトランザクション
なしなしなし
T1なしなし
なしT2T2
T1T2T2
(凡例)
なし:トランザクションを開始しない,またはトランザクションが関連づかない。
T1:クライアント側で開始するトランザクション。
T2:Bean側で開始するトランザクション。

注意
トランザクションが決着していないときに,UserTransaction.beginメソッドを使って新しいトランザクションを開始した場合,EJBコンテナはjavax.transaction.NotSupportedExceptionを送出します。