8.10.2 javax.persistence.EntityManagerFactoryインタフェース
ここでは,javax.persistence.EntityManagerFactoryインタフェースについてインタフェース定義と注事事項を説明します。
- 〈この項の構成〉
(1) インタフェース定義
package javax.persistence;
/**
* EntityManagerFactoryインタフェースは,
* アプリケーションがアプリケーション管理のEntityManagerを取得するために
* 使用します。
* アプリケーションがEntityManagerFactoryの使用を終了する時には,
* アプリケーションはEntityManagerFactoryをクローズする必要があります。
* EntityManagerFactoryがクローズされたあとは,
* EntityManagerFactoryから作成したすべてのEntityManagerはクローズされた
* ものとして扱われます。
*/
public interface EntityManagerFactory {
/**
* 新しいEntityManagerを作成します。
* このメソッドは,呼び出されるたびに新しいEntityManagerのインスタンスを
* 返します。
* このメソッドが返すEntityManagerのisOpenメソッドはtrueを返します。
* @return 新しいEntityManager
*/
public EntityManager createEntityManager();
/**
* 指定したプロパティのマップを使用して新しいEntityManagerを作成します。
* このメソッドは,呼び出されるたびに新しいEntityManagerのインスタンスを
* 返します。
* このメソッドが返すEntityManagerのisOpenメソッドはtrueを返します。
* @param map EntityManagerのプロパティを格納したMap
* @return 新しいEntityManager
*/
public EntityManager createEntityManager(Map map);
/**
* ファクトリをクローズし,ファクトリが保持しているすべてのリソースを
* 解放します。
* ファクトリがクローズされたあとは,isOpen以外のメソッドを呼び出すと,
* IllegalStateExceptionがスローされます。isOpenメソッドは,falseを
* 返します。
* EntityManagerFactoryがクローズされると,ファクトリから作成した
* すべてのEntityManagerも,クローズされたものとして扱われます。
*/
public void close();
/**
* ファクトリがオープンしているかどうかを返します。
* @return ファクトリがクローズされるまではtrue
*/
public boolean isOpen();
}
(2) 注意事項
-
createEntityManagerに渡すマップには,JPAプロバイダのベンダ特有プロパティを含めることができます。JPAプロバイダが認識できないプロパティは,単に無視されます。
-
EJB仕様では,Stateless Session BeanでEntityManagerFactoryのメソッドを呼び出せるのは,次のメソッドです。
-
ライフサイクルコールバックメソッド(PostConstructやPreDestroy)
-
ビジネスインタフェースまたはコンポーネントインタフェースのビジネスメソッド
-
ビジネスメソッド
-
インターセプタメソッド
-
タイムアウトコールバックメソッドです。
コンストラクタや,DIのセッターメソッド(setSessionContextメソッドを含む)では,EntityManagerFactoryのメソッドを呼び出せません。
-
-
EJB仕様では,Stateful Session BeanでEntityManagerFactoryのメソッドを呼び出せるのは,次のメソッドです。
-
ライフサイクルコールバックメソッド(PostConstructやPreDestroy)
-
ビジネスインタフェースまたはコンポーネントインタフェースのビジネスメソッド
-
ビジネスメソッド
-
インターセプタメソッド
-
SessionSynchronizationのafterBeginおよびbeforeCompletionメソッドです。
コンストラクタや,Dependency Injectionのセッターメソッド,SessionSynchronizationのafterCompletionメソッドでは,EntityManagerFactoryのメソッドを呼び出せません。
-