一部のコンテナー・トランザクション設定は、すべてのエンタープライズ Bean で使用できません。
さらに、一部メソッドは特定のトランザクション設定および Bean で使用できません。 これらのルールは、
EJB 1.1 および EJB 2.x 仕様を基にした「コンテナー・トランザクションの追加」ウィザードに実装されました。
コンテナー・トランザクションをエンタープライズ Bean へ追加する方法:
- J2EE パースペクティブの「プロジェクト・エクスプローラー」ビューで、EJB プロジェクトのデプロイメント記述子を右マウス・ボタンでクリックして、
を選択し、デプロイメント記述子エディターを開く。
- エディターの「アセンブリー」ページで、「コンテナー・トランザクション」セクションの「 追加」をクリックする。
- 検出された Bean のリストから 1 つ以上のエンタープライズ Bean を選択する。
- 以下の選択項目の中からコンテナー・トランザクション・タイプを選択する。
- 「サポート対象外」- トランザクション・コンテキストなしで
Bean メソッドを呼び出すようコンテナーに指示します。トランザクション・コンテキストの内部からクライアントによって Bean メソッドが呼び出された場合、コンテナーはトランザクションと現行のスレッドとのアソシエーションを中断してから、
エンタープライズ Bean のインスタンス上にメソッドを呼び出します。その後で、メソッド呼び出しが戻されると、コンテナーは中断したアソシエーションを再開します。中断したトランザクション・コンテキストは、
この Bean メソッドによって使用されるエンタープライズ Bean オブジェクト、またはリソースには渡されません。
- 「サポート対象」- クライアントがトランザクションの内部に
Bean メソッドを呼び出した場合、トランザクション・コンテキストの内部にその Bean
メソッドを呼び出すようコンテナーに指示します。クライアントがトランザクション・コンテキストを使用せずに Bean メソッドを呼び出した場合、コンテナーはトランザクション・コンテキストを使用せずに Bean メソッドを呼び出します。トランザクション・コンテキストは、この Bean メソッドによって使用されるエンタープライズ Bean
オブジェクトまたはリソースに渡されます。
- 「必要」- トランザクション・コンテキストの内部に
Bean メソッドを呼び出すようコンテナーに指示します。クライアントがトランザクション・コンテキストの内部から Bean メソッドを呼び出した場合、コンテナーはクライアント・トランザクション・コンテキストの内部から Bean メソッドを呼び出します。クライアントがトランザクション・コンテキストの外部から Bean メソッドを呼び出した場合、コンテナーは新規トランザクション・コンテキストを作成して、そのコンテキストの内部から Bean メソッドを呼び出します。トランザクション・コンテキストは、この Bean メソッドによって使用されるエンタープライズ Bean
オブジェクトまたはリソースに渡されます。
- 「新しく必要」- クライアントが Bean
メソッドをトランザクション・コンテキストの内部から呼び出すか外部から呼び出すかには関係なく、常に新規トランザクション・コンテキストの内部に Bean メソッドを呼び出すようコンテナーに指示します。トランザクション・コンテキストは、この Bean メソッドによって使用されるエンタープライズ Bean
オブジェクトまたはリソースに渡されます。
- 「必須」- 常に、
クライアントに関連付けられているトランザクション・コンテキストの内部に
Bean メソッドを呼び出すようコンテナーに指示します。クライアントがトランザクション・コンテキストを使用せずに Bean メソッドを呼び出そうとした場合、コンテナーは javax.jts.TransactiononRequiredException 例外をクライアントにスローします。トランザクション・コンテキストは、エンタープライズ Bean メソッドによってアクセスされる EJB
オブジェクトまたはリソースに渡されます。これらのエンティティー Bean にアクセスする EJB クライアントは、
既存のトランザクションの内部からアクセスしなければなりません。
他のエンタープライズ Bean に対しては、エンタープライズ Bean または Bean メソッドが「管理対象 Bean」の値を実装するか、
「必要」または「新規が必要」の値を使用しなければなりません。
エンタープライズ Bean 以外の EJB クライアントに対しては、
クライアントが javax.transaction.UserTransaction インターフェースを使用して、
トランザクションを呼び出さなければなりません。
- 「なし (Never)」- トランザクション・コンテキストなしで
Bean メソッドを呼び出すようコンテナーに指示します。クライアントがトランザクション・コンテキストの内部から Bean メソッドを呼び出した場合、コンテナーは java.rmi.RemoteException 例外をスローします。クライアントがトランザクション・コンテキストの外部から Bean メソッドを呼び出した場合、コンテナーは「サポート対象外」トランザクション属性が設定されている場合と同様の動作をします。クライアントは、トランザクション・コンテキストなしでメソッドを呼び出さなければなりません。
- このリストから 1 つ以上のメソッド・エレメントを選択する。
- 「終了」をクリックする。
コンテナー・トランザクションが追加され、「コンテナー・トランザクション」セクションで、コンテナー・トランザクション・タイプ別に表示されます。
コンテナー・トランザクションを定義した後、デプロイメント記述子エディターを使用してコンテナー・トランザクションを処理できます。
- コンテナー・トランザクションを編集するには、「コンテナー・トランザクション」リストから選択して「編集」をクリックします。
- コンテナー・トランザクションを削除するには、リストから選択して「除去」を選択します。
- 同じコンテナー・トランザクション・タイプの複数のコンテナー・トランザクションを取り出して、それらを単一のコンテナー・トランザクション定義に結合するには、「結合」をクリックします。