Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(EJBコンテナ)


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‒6 BMTでのStateful Session Bean

[図データ]

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

クライアント側トランザクション

Beanインスタンスのトランザクション

メソッドに結び付くトランザクション

なし

なし

なし

T1

なし

なし

なし

T2

T2

T1

T2

T2

(凡例)

なし:トランザクションを開始しない,またはトランザクションが関連づかない。

T1:クライアント側で開始するトランザクション。

T2:Bean側で開始するトランザクション。

注意事項

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