2.7.2 BMT
Enterprise Beanでトランザクション管理をするモデルです。BMTは,Session BeanおよびMessage-driven Beanが対象です(Entity Beanは対象外で,常にCMTになります)。
BMTでは,Enterprise Beanのビジネスメソッドでjavax.transaction.UserTransactionを利用し,次の操作をします。
-
トランザクションを開始
-
リソースマネジャを更新
-
トランザクションをコミットまたはロールバック
Stateless Session Beanでは,1ビジネスメソッド内で1トランザクションを決着(コミットまたはロールバック)させる必要があります。また,Message-driven Beanでは,次のメソッド内で,トランザクションを決着(コミットまたはロールバック)させる必要があります。メソッドはEJBのバージョンごとに異なります。
-
onMessageメソッド(EJB 2.0の場合)
-
任意のメッセージリスナのメソッド(EJB 2.1以降の場合)
一方,Stateful Session Beanでは,複数のビジネスメソッドを一つのトランザクションスコープに含めることができます。このとき,EJBコンテナは,Beanインスタンスとトランザクションの関係を保持します。BMTでのStateful Session Beanを次の図に示します。
クライアント側トランザクション |
Beanインスタンスのトランザクション |
メソッドに結び付くトランザクション |
---|---|---|
なし |
なし |
なし |
T1 |
なし |
なし |
なし |
T2 |
T2 |
T1 |
T2 |
T2 |
- 注意事項
-
トランザクションが決着していないときに,UserTransaction.beginメソッドを使って新しいトランザクションを開始した場合,EJBコンテナはjavax.transaction.NotSupportedExceptionを送出します。