Hitachi

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


5.5.3 アプリケーション管理のEntityManagerを使用する場合の永続化コンテキスト

アプリケーション管理のEntityManagerを使用する場合,アプリケーションがJPAプロバイダのEntityManagerFactoryを直接呼び出して,EntityManagerのライフサイクルおよび永続化コンテキストの作成や破棄を管理します。アプリケーション管理の永続化コンテキストのライフサイクルは,複数のトランザクションにわたったライフサイクルを管理できます。

〈この項の構成〉

(1) EntityManagerのライフサイクルの管理

アプリケーションではEntityManagerのcloseメソッドやisOpenメソッドを使用して,アプリケーション管理のEntityManagerのライフサイクルを管理します。EntityManagerのcloseメソッドが呼ばれると,EntityManager,EntityManagerに関連づいた永続化コンテキストやそのほかのリソースが解放されます。closeメソッドを呼び出したあとは,アプリケーションではEntityManagerのgetTransactionメソッドとisOpenメソッド以外のメソッドを呼び出さないでください。呼び出した場合は,IllegalStateExceptionがスローされます。トランザクションがアクティブのときにcloseメソッドを呼び出した場合は,トランザクションが決着するまで永続化コンテキストは保持されたままとなります。EntityManagerのisOpenメソッドは,EntityManagerがクローズされるまではtrueを返し,クローズされたあとはfalseを返します。

(2) 永続化コンテキストのライフサイクル

アプリケーション管理の永続化コンテキストのライフサイクルを次に示します。

アプリケーション管理の永続化コンテキストは,トランザクションとは独立した永続化コンテキストです。このため,JTAトランザクションとともに伝播されることはありません。

(3) JTAエンティティマネージャを使用する場合の注意

アプリケーション管理のEntityManagerでJTAエンティティマネージャを使用する場合,アプリケーションがEntityManagerをJTAトランザクションのスコープの外で作成するときは,EntityManagerのjoinTransactionを呼ぶのはアプリケーションの責任になります。アプリケーションはEntityManagerにトランザクションが開始されたことを通知する必要があるので,トランザクション開始後にEntityManagerのjoinTransactionメソッドを呼んでください。