Java™ Persistence
API (JPA) を使用するアプリケーションを Liberty がサポートできるようにするには、必要な仕様レベルに応じて jpa-2.0 フィーチャー、jpa-2.1 フィーチャー、または jpaContainer-2.1 フィーチャーを server.xml ファイルに追加します。また、パーシスタンス・コンテキストとパーシスタンス・ユニットを定義し、エンティティー・マネージャーとエンティティー・マネージャー・ファクトリーへのアクセスを構成することも必要です。
始める前に
このタスクは、
Liberty サーバーを作成済みであることを前提としており、このサーバー上で JPA を使用したアプリケーションをデプロイします。
手動による Liberty サーバーの作成を参照してください。
このタスクについて
以下の JPA フィーチャーが
Liberty で使用可能です。
- jpa-2.0 フィーチャーは、JPA 2.0 仕様に従って作成されたアプリケーション管理 JPA およびコンテナー管理 JPA を使用するアプリケーションをサポートします。サポートは、コンテナー管理プログラミング・モデルをサポートする拡張機能と共に Apache OpenJPA の上に構築されています。
- jpa-2.1 フィーチャーは、JPA 2.1 仕様に従って作成されたアプリケーション管理 JPA およびコンテナー管理 JPA を使用するアプリケーションをサポートします。サポートは EclipseLink の上に構築されています。組み込みの EclipseLink JPA プロバイダーを使用しない場合、サーバー・ランタイム・イメージを最小化するために、代わりに jpaContainer-2.1 フィーチャーを使用することができます。
jpaContainer-2.1 フィーチャーは、JPA 2.1 仕様に従って作成されたアプリケーション管理 JPA およびコンテナー管理 JPA を使用するアプリケーションをサポートします。このフィーチャーには組み込み JPA プロバイダーは含まれていません。ユーザーは共有ライブラリー、グローバル・ライブラリー、またはアプリケーションへの組み込みにより JPA プロバイダーを提供する必要があります。
WebSphere® Developer Tools を使用した JPA アプリケーションの開発について詳しくは、「Developing JPA applications」を参照してください。
手順
jpa-2.0 フィーチャー、jpa-2.1 フィーチャー、または jpaContainer-2.1 フィーチャーを server.xml ファイルに追加します。
- パーシスタンス・コンテキストとパーシスタンス・ユニットの定義を web.xml ファイルに追加します。
以下に例を示します。
<persistence-context-ref>
<persistence-context-ref-name>example/em</persistence-context-ref-name>
<persistence-unit-name>ExamplePersistenceUnit</persistence-unit-name>
</persistence-context-ref>
<persistence-unit-ref>
<persistence-unit-ref-name>example/emf</persistence-unit-ref-name>
<persistence-unit-name>ExamplePersistenceUnit</persistence-unit-name>
</persistence-unit-ref>
- エンティティー・マネージャーへのアクセスを構成します。
以下に例を示します。
Context ctx = new InitialContext();
UserTransaction tran = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
tran.begin();
EntityManager em = (EntityManager) ctx.lookup("java:comp/env/example/em");
Thing thing = new Thing();
em.persist(thing);
tran.commit();
- エンティティー・マネージャー・ファクトリーへのアクセスを構成します。
以下に例を示します。
Context ctx = new InitialContext();
EntityManagerFactory emf = (EntityManagerFactory) ctx.lookup("java:comp/env/example/emf");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Thing thing = new Thing();
em.persist(thing);
tx.commit();
int id = thing.getId();
em.close();
jpaContainer-2.1 フィーチャーを使用する場合、JPA プロバイダー JAR ファイルを使用可能にします。 次のオプションのいずれかを選択してください。
- JPA プロバイダー JAR ファイルをグローバル・ライブラリーのロケーションに置くことによって、それらのファイルをすべてのアプリケーションに対して使用可能にします。
- サーバー構成を更新して、JPA プロバイダー JAR ファイルを共有ライブラリーとしてアプリケーションに提供するようにします。
例えば、以下のステップを実行します。
サーバー構成ファイル内で、必要な JPA パーシスタンス・プロバイダーの共有ライブラリーを構成します。そのライブラリーを、それを使用するアプリケーションに対して使用可能にします。以下のサンプルは、EclipseLink を JPA 2.1 プロバイダーとして使用するための、必要最小限の JAR ファイル (拡張子なし) のセットを示しています。以下の JAR も、EclipseLink 拡張機能を利用するために組み込むことができます。- org.eclipse.persistence.dbws.jar
- org.eclipse.persistence.moxy.jar
<library id="eclipselink">
<file name="${server.config.dir}/jpa/org.eclipse.persistence.asm.jar/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.core.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.jpa.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.antlr.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.jpa.jpql.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.jpa.modelgen.jar"/>
</library>
<application location="myApp.war">
<classloader commonLibraryRef="eclipselink"/>
</application>
ハイバネートを JPA プロバイダーとして使用するには、以下の JAR ファイルのセットを代わりに <library> 構成に組み込んでください。
<library id="hibernate">
<file name="${server.config.dir}/hibernate/antlr-2.7.7.jar"/>
<file name="${server.config.dir}/hibernate/classmate-1.3.0.jar"/>
<file name="${server.config.dir}/hibernate/dom4j-1.6.1.jar"/>
<file name="${server.config.dir}/hibernate/hibernate-commons-annotations-5.0.1.Final.jar"/>
<file name="${server.config.dir}/hibernate/hibernate-core-5.2.6.Final.jar"/>
<file name="${server.config.dir}/hibernate/javassist-3.20.0-GA.jar"/>
<file name="${server.config.dir}/hibernate/jboss-logging-3.3.0.Final.jar"/>
</library>
- JPA プロバイダー・クラスを識別するために以下のいずれかの方法を選択します。
- サーバー構成内の JPA エレメントで、デフォルトのパーシスタンス・プロバイダーを構成します。この構成は、<bell> エレメントにより検出されるすべての PersistenceProvider サービスをオーバーライドします。
<jpa defaultPersistenceProvider="org.eclipse.persistence.jpa.PersistenceProvider"/>
ハイバネートの場合は、以下を使用します。
<jpa defaultPersistenceProvider="org.hibernate.jpa.HibernatePersistenceProvider"/>
- jpaContainer-2.1 フィーチャーを使用する場合は、サーバー構成内で bells-1.0 フィーチャーを構成し、共有ライブラリーのベルを追加します。
共有ライブラリーは、JPA プロバイダー・クラスを自動的に見つけて、それをデフォルトの JPA パーシスタンス・プロバイダーにします。この構成は、JPA エレメントで構成された defaultPersistenceProvider 属性をオーバーライドします。
<featureManager>
<feature>jpaContainer-2.1</feature>
<feature>bells-1.0</feature>
...
</featureManager>
<bell libraryRef="eclipselink"/>
- persistence.xml ファイル内に JPA パーシスタンス・プロバイダー・クラスを指定します。
このクラスは、パーシスタンス・ユニットの server.xml 構成 (<jpa> エレメントまたは <bell> エレメント) より優先されます。
<persistence-unit name="MY_PERSISTENCE_UNIT">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
...
</persistence-unit>