Hitachi

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


2.7.3 CMT

EJBコンテナでトランザクション管理をするモデルです。CMTは,Session Bean,Entity Bean,Message-driven Beanが対象です。CMTでは,Beanのメソッド単位でトランザクションの属性を指定します。なお,トランザクション属性は,J2EEアプリケーションに含まれるSession Bean,Entity Bean,またはMessage-driven Beanの属性(プロパティ)として設定します。J2EEアプリケーションの設定については,「2.7.4 cosminexus.xmlでの定義」を参照してください。

トランザクションがコミットできない場合,EJBコンテナは次の処理をします。

  1. アプリケーションエラーのロギング

  2. トランザクションのロールバック

  3. Beanインスタンスの破棄

  4. リモートコンポーネントインタフェースで呼び出すクライアントにはjava.rmi.RemoteException,ローカルコンポーネントインタフェースまたはビジネスインタフェースで呼び出すクライアントにはjavax.ejb.EJBExceptionを送出。ただし,リモートビジネスインタフェースがjava.rmi.Remoteを継承している場合には,java.rmi.RemoteExceptionを送出

〈この項の構成〉

(1) トランザクション属性の種類と振る舞い

トランザクション属性の振る舞いについて,トランザクション属性の種類ごとに図に示して説明します。

(2) Enterprise Beanの種別ごとに指定できるトランザクション属性

Enterprise Beanの種別ごとに指定できるトランザクション属性およびデフォルト値を次の表に示します。EJB仕様ではBean種別ごとに指定できるトランザクション属性が規定されています。CMP 2.0については,EJB仕様でオプションとされている,ほかのトランザクション属性は指定できません。デフォルト値についてはEJB仕様では規定されていません。アプリケーションサーバの場合,EJBのDDでCMTの指定があり,トランザクション属性の指定がない場合のデフォルト設定は,次の表のようになります。

表2‒18 Enterprise Beanの種別ごとに指定できるトランザクション属性およびデフォルト値

種別

指定できるトランザクション属性

デフォルト値

  • Stateless Session Bean

  • Stateful Session Bean

    (SessionSynchronization以外)

  • Entity Bean(BMP,CMP 1.1)

  • Supports

  • NotSupported

  • Required

  • RequiresNew

  • Mandatory

  • Never

Supports

Stateful Session Bean

(SessionSynchronization)

  • Supports

  • NotSupported

  • Required

  • RequiresNew

  • Mandatory

  • Never

Required

Singleton Session Bean

(PostConstruct/PreDestroyを除く)※1

  • Supports

  • NotSupported

  • Required

  • RequiresNew

  • Mandatory

  • Never

Required

Entity Bean(CMP 2.0)

  • Required

  • RequiresNew

  • Mandatory

Required

Message-driven Bean(Connector 1.0に準拠したリソースアダプタを使用する場合)

  • Required

  • NotSupported

Required

Message-driven Bean(Connector 1.5に準拠したリソースアダプタを使用する場合)

  • Required※2

  • NotSupported

Required※2

アノテーションを使用した,DDを持たないSession Bean

  • Supports

  • NotSupported

  • Required

  • RequiresNew

  • Mandatory

  • Never

Required

DDを持たないEnterprise Beanの場合,デフォルト値(Required)が規定されています。

注※1

アプリケーションサーバでは,Singleton Session Beanのライフサイクルコールバックメソッド(PostConstructまたはPreDestroy)でトランザクション属性を指定しても無効になります。

注※2

CJMSPリソースアダプタまたはFTPインバウンドアダプタの場合は指定できません。

(3) Stateful Session Bean(SessionSynchronization)のトランザクション属性

SessionSynchronizationは,トランザクションの開始および停止に同期してメッセージを通知するためのインタフェースです。EJB仕様では,SessionSynchronizationを実装したStateful Session Beanのトランザクション属性に指定できるのは,Required,RequiresNewまたはMandatoryと規定されています。これに対して,アプリケーションサーバでは,Supports,NotSupportedおよびNeverも指定できます。

ここでは,指定したトランザクション属性とメソッド呼び出しの有無の対応,およびコールバックメソッドを呼び出すタイミングについて説明します。なお,コールバックメソッドとは,次のメソッドのことです。

afterBeginメソッド

次のどちらかのメソッドです。

  • javax.ejb.SessionSynchronizationインタフェースのafterBeginメソッドを実装したメソッド

  • @AfterBeginを指定したメソッド

beforeCompletionメソッド

次のどちらかのメソッドです。

  • javax.ejb.SessionSynchronizationインタフェースのbeforeCompletionメソッドを実装したメソッド

  • @BeforeCompletionを指定したメソッド

afterCompletionメソッド

次のどちらかのメソッドです。

  • javax.ejb.SessionSynchronizationインタフェースのafterCompletionメソッドを実装したメソッド

  • @AfterCompletionを指定したメソッド

なお,アノテーションの利用については,「2.18 Session Synchronizationのアノテーションでの指定」を参照してください。

(a) トランザクション属性とメソッド呼び出しの有無

SessionSynchronizationを実装したStateful Session Beanのトランザクション属性と,ビジネスメソッドまたはコールバックメソッドの呼び出し有無の対応について,次の表に示します。

表2‒19 ビジネスメソッドまたはコールバックメソッドでのメソッド呼び出し有無

トランザクション属性

クライアントのトランザクション有無

ビジネスメソッドの呼び出し

SessionSynchronizationのコールバックメソッド呼び出し

Supports

あり

※1

※1

なし

※1

×

NotSupported

あり

※1

×

なし

※1

×

Required

あり

なし

RequiresNew

あり

なし

Mandatory

あり

なし

×※2

×

Never

あり

×※2

×

なし

※1

×

(凡例)

○:メソッドを呼び出す。

×:メソッドを呼び出さない。

注※1

アプリケーションサーバ独自の動作です。

注※2

EJB仕様で規定された例外がスローされます。

(b) コールバックメソッドを呼び出すタイミング

同一のEnterprise Beanのビジネスメソッドを複数回呼び出す場合,トランザクションに最初にEntprise Beanが参加するタイミングで,コールバックメソッドであるafterBeginメソッドが呼び出されます。

afterBeginメソッドを呼び出すタイミングの例として,トランザクションに参加しないビジネスメソッド実行後にトランザクションに参加するビジネスメソッドを実行した場合の動作を次の図に示します。

図2‒13 コールバックメソッドを呼び出すタイミングの例

[図データ]