EJB 3.0(Public Draft)入門記 Java Persistence API Chapter7 その1

7章突入。

Chapter 7 Container and Provider Contracts for Deployment and Bootstrapping

この章ではデプロイメントとブートストラッピングに関してJ2EEコンテナと永続プロバイダの要件が定義されるそうです。
PersistenceProviderというクラスが重要みたい。

7.1 J2EE Container Deployment

まずはJ2EEの話。コンテナへのデプロイはparファイルという形式で行われるとのこと。parは1つのpersistence.xmlを含むことができます。含まなくてもOKです。

7.1.1 Responsibilities of Container

コンテナの責務です。主要なものを箇条書き。コンテナは...

  • EntityManagerの名前やentity-mapping.xmlや管理するクラスについてChapter6で述べたようなデフォルトを適用する
  • 永続メタデータを読み、名前付けされたEntityManagerをデプロイするたびに永続javax.persistence.spi.PersistenceProviderの実装クラスを割り出す
  • PersistenceProviderをインスタンス化しcreateContainerEntityManagerFactoryメソッドを呼び出す
  • EntityManagerFactoryのインスタンスを受け取りこれを使いコンテナ管理のEntityManagerを作成する
  • parが再デプロイされるたびに必ずcreateContainerEntityManagerFactoryメソッドを呼び出す

7.1.2 Responsibilities of Persistence Provider

永続プロバイダの責務です。主要なものを箇条書き。永続プロバイダは...

  • javax.persistence.spi.PersistenceProviderを実装する必要がある
  • createContainerEntityManagerFactoryメソッドが呼び出されたときにメタデータを受け取り処理する
  • EntityManagerFactoryのインスタンスをつくり、EntityManagerのメタデータと関連付け、そのインスタンスを返す。

7.1.3 javax.persistence.spi.PersistenceProvider

すでに何度も名前が登場しているPersistenceProvider。永続プロバイダが実装しなければいけないインタフェースです。コンテナやjavax.persistence.spi.Persistenceクラス(コンテナ外で実行する場合)から呼ばれます。JavaDocコメントを省くとこんな感じ。シンプルです。

package javax.persistence.spi;

public interface PersistenceProvider {
  public EntityManagerFactory createEntityManagerFactory(String emName, Map map);
  public EntityManagerFactory createContainerEntityManagerFactory(PersistenceInfo info);
}

7.1.4 javax.persistence.spi.PersistenceInfo

PersistenceProviderのcreateContainerEntityManagerFactoryメソッドの引数となるインタフェースです。これもJavaDocコメント省くとこんな感じ。ほとんどのメソッドがpersistence.xmlの要素に対応していますね。

package javax.persistence.spi;
import javax.sql.DataSource;

public interface PersistenceInfo {
  public String getEntityManagerName();
  public String getPersistenceProviderClassName();
  public DataSource getJtaDataSource();
  public DataSource getNonJtaDataSource();
  public List<String> getMappingFileNames();
  public List<URL> getJarFiles();
  public List<String> getEntityClassNames();
  public Properties getProperties();
  public ClassLoader getClassLoader();
  public URL getPersistenceXmlFileUrl();
  public URL getEntityMappingsXmlFileUrl();
}


今日はここまで。次回は J2SE の話、7.2 Bootstrapping in J2SE Environments です。