Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)
コンテナ管理のEntityManagerを使用する場合,永続化コンテキストのライフサイクルはコンテナによって管理され,JTAトランザクションとともに自動的に伝播されます。永続化コンテキストのライフサイクルの種類として,トランザクションスコープの永続化コンテキスト,または拡張された永続化コンテキストを選択できます。
それぞれの永続化コンテキストについて説明します。
JPA仕様では,トランザクションと同じライフサイクルの永続化コンテキストのことをトランザクションスコープの永続化コンテキストといいます。
EntityManagerのライフサイクルは,デフォルトでトランザクションのライフサイクルと同じです。このため,EntityManagerが持つ永続化コンテキストにキャッシュされた更新は,トランザクションがコミットするときにデータベースに反映されます。
トランザクションスコープの永続化コンテキストのライフサイクルを次に説明します。
コンテナ管理のEntityManagerがトランザクションの外で呼び出された場合には,EntityManagerのメソッド呼び出しが終了した時点で,データベースからロードされたすべてのエンティティは即座にdetached状態となります。
Java EE環境では,Stateful Session BeanからEntityManagerを使用する場合には,永続化コンテキストの生存期間をStateful Session Beanの生存期間と同じにすることができます。この場合,更新はトランザクションがコミットするたびにデータベースに反映されますが,永続化コンテキスト内で管理されているエンティティオブジェクトは,複数のトランザクションにわたってmanaged状態のまま保持されます。Stateful Session Beanと同じライフサイクルの永続化コンテキストのことを,JPAでは拡張永続化コンテキストと呼びます。
拡張された永続化コンテキストは,Stateful Session Beanが作成されるのと同時に作成され,そのStateful Session Beanに関連づけされます。その後,Stateful Session Beanが破棄されるのと同時に破棄されます。
Stateful Session Beanが別のStateful Session Beanを作成する場合で,作成する側と作成される側が共に拡張永続化コンテキストを使用するように定義されている場合には,作成する側の永続化コンテキストが,作成される側に引き継がれます。この引き継ぎは,Stateful Session Beanを作成する時点でトランザクションがアクティブであるかどうかにかかわらず行われます。Stateful Session Beanの作成時に永続化コンテキストの引き継ぎが行われた場合には,その永続化コンテキストを共有するすべてのStateful Session Beanが破棄されるときに,永続化コンテキストも破棄されます。
拡張された永続化コンテキストは,EntityManagerのインスタンスが作成されたときからクローズされるまで存在します。複数のトランザクションとEntityManagerのトランザクション外の呼び出しに対応しています。
トランザクションとの関連を次に示します。
コンテナ管理のEntityManagerを使用する場合,永続化コンテキストはJTAトランザクションによって伝播され,複数のEntityManagerと関連づくことがあります。ただし,永続化コンテキストが伝播するのは,同じアプリケーションサーバ内だけです。リモートのアプリケーションサーバに永続化コンテキストが伝播されることはありません。
次に,永続化コンテキストの伝播についてコンポーネントが呼び出されたときの状態ごとに説明します。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.