このトピックでは、
トランザクション・コンテキストと ActivitySession コンテキスト間の階層関係について説明します。ActivitySession
サービスによって定義されるこの関係では、
すべてのトランザクション・コンテキストが、ActivitySession コンテキストの内側、または外側に完全に入っている必要があります。
ActivitySession コンテキストは、トランザクション・コンテキストに非常に似ており、Enterprise Bean の活動化におけるライフ・サイクルの選択項目を拡張します。
すなわち、1 つ以上のトランザクションをカプセル化することができます。 ActivitySession コンテキストは、分散コンテキストです。
トランザクション・コンテキストと同様に、Bean 管理、またはコンテナー管理とすることができます。 ActivitySession コンテキストは、
主にクライアントが、
そのクライアントが使用する Enterprise Bean のライフ・サイクルをスコープ宣言するために使用します。
このライフ・サイクルは、クライアントが開始した個々のトランザクションの域を超えて、または除外して行います。
ActivitySession のオーバーヘッドはトランザクションよりも小さく、
呼び出した Enterprise Bean のライフ・サイクルをスコープ宣言するためにのみ使用するトランザクションに代わって使用できます。 ActivitySession の活動化ポリシーを持つ Bean の場合、
その Bean によって起動された任意のリソース・マネージャー・ローカル・トランザクション (RMLT) の継続時間は、RMLT の始動時の Bean メソッドに代わって、ActivitySession の継続時間によってバウンドできます。 これによって、Enterprise Bean での RMLT の使用が、J2EE の仕様に記述されたシナリオの域を超えて、
より柔軟で高度に行えます。 J2EE 仕様は、RMLT が Bean メソッドの終了前に完了する必要があるということを定義します。
これは、Bean メソッドが、これらの仕様において使用可能なローカル・トランザクション用の唯一の保持境界であるためです。
以下の規則は、トランザクションと ActivitySession との間の関係を定義します。
- EJB または Web コンテナーは、グローバル・トランザクションがない場合、常に、
ローカル・トランザクション内包 (LTC) を使用します。 LTC は、メソッドまたは ActivitySession でスコープ宣言することができます。
- メソッドのディスパッチ前に、コンテナーにより、常に LTC トランザクション・コンテキストまたはグローバル・トランザクション・コンテキストのいずれかの存在が確認されますが、両方が確認されることはありません。
- ActivitySession は、相互にネストすることはできません。 ネストした ActivitySession を起動しようとすると、UserActivitySession.beginSession()
で com.ibm.websphere.ActivitySession.NotSupportedException が発生します。
- ActivitySession は、1 つ以上のグローバル・トランザクションを完全にカプセル化できます。
- アプリケーションは、チェックポイントを指定するか、またはすべてのリソースをリセットすることによって、ActivitySession を終了することができます。endSession(EndModeCheckpoint) 操作を
実行すると、ActivitySession の下で調整された作業にチェックポイントが指定され、
その後にコンテキストが終了します。
endSession(EndModeReset) 操作を実行すると
、ActivitySession の下で調整された作業が整合性の最終ポイントにリセットされ、
その後にコンテキストが終了します。
- ActivitySession は、グローバル・トランザクションによってカプセル化することができないほか、ActivitySession とグローバル・トランザクションの境界のオーバーラップもできません。
グローバル・トランザクション・コンテキストの下で ActivitySession を開始しようとすると
、UserActivitySession.beginSession()
で com.ibm.websphere.ActivitySession.NotSupportedException が発生します。
未完了のグローバル・トランザクションを含む ActivitySession
で endSession(EndModeCheckpoint) を呼び出そう
とすると、com.ibm.websphere.ActivitySession.ContextPendingException が発生します。グローバル・トランザクションと ActivitySession コンテキストのいずれも、
影響は受けません。
endSession(EndModeReset) が呼び出されると
、ActivitySession はリセットされ、グローバル・トランザクション
は rollback_only とマークされます。
- ActivitySession によって完全にカプセル化されたそれぞれのグローバル・トランザクションは、ActivitySession 内の他のすべてのグローバル・トランザクションとは独立しています。 1 つのグローバル・トランザクションのロールバックは、他のすべてのトランザクション、
または ActivitySession 自体に影響しません。
- ActivitySession およびグローバル・トランザクション・コンテキストは、1 つ以上の直列実行グローバル・トランザクションをカプセル化する ActivitySession と共存可能です。