Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

5.5.2 CMT

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

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

  1. アプリケーションエラーのロギング
  2. トランザクションのロールバック
  3. Beanインスタンスの破棄
  4. リモートコンポーネントインタフェースで呼び出すクライアントにはjava.rmi.RemoteException,ローカルコンポーネントインタフェースまたはビジネスインタフェースで呼び出すクライアントにはjavax.ejb.EJBExceptionを送出。ただし,リモートビジネスインタフェースがjava.rmi.Remoteを継承している場合には,java.rmi.RemoteExceptionを送出
<この項の構成>
(1) トランザクション属性の種類と振る舞い
(2) Enterprise Beanの種別ごとに指定できるトランザクション属性

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

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

NotSupported属性

クライアントがトランザクションスコープ内でEnterprise Beanのビジネスメソッドを呼び出したとき,トランザクションコンテキストはEnterprise Bean側には伝播しません。また,クライアントがトランザクションスコープ外でEnterprise Beanのビジネスメソッドを呼び出したとき,トランザクションコンテキストはEnterprise Beanには伝播しません。

NotSupported属性の振る舞いを次の図に示します。

図5-6 NotSupported属性

[図データ]

Required属性

クライアントがトランザクション内でEnterprise Beanのビジネスメソッドを呼び出したとき,トランザクションコンテキストがEnterprise Bean側に伝播し,Enterprise Beanのビジネスメソッドは呼び出し側のトランザクションスコープ内に入ります。また,クライアントがトランザクションスコープ外でEnterprise Beanのビジネスメソッドを呼び出したとき,Enterprise Bean側で新しいトランザクションが開始されます。

Required属性の振る舞いを次の図に示します。

図5-7 Required属性

[図データ]

Supports属性

クライアントがトランザクション内でEnterprise Beanのビジネスメソッドを呼び出したとき,トランザクションコンテキストがEnterprise Bean側に伝播し,Enterprise Beanのビジネスメソッドは呼び出し側のトランザクションスコープ内に入ります。また,クライアントがトランザクションスコープ外でEnterprise Beanのビジネスメソッドを呼び出したとき,トランザクションコンテキストはEnterprise Beanに伝播しません。

Supports属性の振る舞いを次の図に示します。

図5-8 Supports属性

[図データ]

RequiresNew属性

クライアントがトランザクション内でEnterprise Beanのビジネスメソッドを呼び出したとき,EJBコンテナは新しいトランザクションを開始します。また,クライアントがトランザクションスコープ外でEnterprise Beanのビジネスメソッドを呼び出したときも,同様に新しいトランザクションがEJBコンテナによって開始されます。

RequiresNew属性の振る舞いを次の図に示します。

図5-9 RequiresNew属性

[図データ]

Mandatory属性

クライアントがトランザクション内でEnterprise Beanのビジネスメソッドを呼び出したとき,トランザクションコンテキストがEnterprise Bean側に伝播し,Enterprise Beanのビジネスメソッドは呼び出し側のトランザクションスコープ内に入ります。また,クライアントがトランザクションスコープ外でEnterprise Beanのビジネスメソッドを呼び出したとき,EJBコンテナはクライアントに次の例外を送出します。

Mandatory属性の振る舞いを次の図に示します。

図5-10 Mandatory属性

[図データ]

Never属性

クライアントがトランザクション内でEnterprise Beanのビジネスメソッドを呼び出したとき,EJBコンテナはクライアントに次の例外を送出します。

また,クライアントがトランザクションスコープ外でEnterprise Beanのビジネスメソッドを呼び出したとき,トランザクションコンテキストはEnterprise Beanに伝播しません。

Never属性の振る舞いを次の図に示します。

図5-11 Never属性

[図データ]

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

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

表5-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)

  • Required
  • RequiresNew
  • Mandatory
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
  • NotSupported
Required
アノテーションを使用した,DDを持たないSession Bean
  • Supports
  • NotSupported
  • Required
  • RequiresNew
  • Mandatory
  • Never
Required

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

注※ EJBの仕様では指定可能ですが,CosminexusではConnector 1.5トランザクションに参加するメッセージ配信ができないため,Requiredを指定できません。指定できるのはNotSupportedだけです。