Java EE 環境用の JPA 2.x アプリケーションの開発

アプリケーション・サーバーのコンテナーには、Java™ Enterprise Edition (Java EE) 環境における Java Persistence API (JPA) に必要な機能の多くを提供できます。 アプリケーション・サーバーでは、Java EE 環境でのアプリケーション開発を支援する JPA コマンド・ツールも提供しています。

このタスクについて

重要: これらの JPA コマンド・ツールを使用する場合は、これらのツールを app_server_root/bin ディレクトリーからではなく、<profile_root>/bin ディレクトリーから実行します。リリース・レベルに適した最新バージョンのコマンドを使用してください。

このタスクでは、JPA 2.1 インターフェースに対してコンパイルするため、クラスパスに com.ibm.ws.jpa-2.1.thinclient_9.0.jar というスタンドアロン Java アーカイブ (JAR) ファイルを指定する必要があります。 JPA 2.0 インターフェースに対してコンパイルするには、com.ibm.ws.jpa-2.0.thinclient_9.0.jar を指定します。 このスタンドアロン JAR ファイルは、インストール・イメージから入手できます。サーバー・インストール・イメージにおけるこれらのファイルの位置は、${app_server_root}/runtimes のディレクトリーの中です。

重要: JPA アプリケーションでは、コンテナー管理パーシスタンス (CMP) または Bean 管理パーシスタンス (BMP) を使用するアプリケーションとは異なる構成手法が必要です。 また、CMP または BMP を実装するアプリケーションに関連した通常のデプロイメント手法に従いません。 JPA アプリケーションでは、パーシスタンス・ユニットを定義して正しいプロパティーを構成し、そのアプリケーションが Java EE 環境で確実に実行できるようにする必要があります。

コンテナーにより、すべての必要な注入がサポートされ、 Java EE 環境でアプリケーションが実行できるようになります。 例えば、コンテナーでは、アプリケーションに対して @PersistenceUnit および @PersistenceContext を注入できます。

手順

  1. エンティティー・クラスを生成します。 これらは、Plain Old Java Object (POJO) エンティティーです。 ユーザーの開発モデルに応じて、以下の JPA ツールの一部またはすべてを使用します。
    • トップダウン・マッピング: 最初、エンティティーの定義およびオブジェクト・リレーショナル・マッピングから開始し、次にそのデータからデータベース・スキーマを派生させます。 この方法を使用する場合は、オブジェクト・モデルのアーキテクチャーについてまず検討し、 次にエンティティー・クラスの作成という順番になることが多いでしょう。 これらのエンティティー・クラスから、最終的にデータベース・モデルを作成します。 オブジェクト・モデルから関係モデルへの top-down マッピングを使用する場合は、エンティティー・クラスを開発し、次に JPA プロバイダーの機能を使用して、そのエンティティー・クラスに基づくデータベース表を生成します。 パーシスタンス・プロバイダーとして OpenJPA を使用する場合、このアプローチでは、wsmapping ツールが役立ちます。
    • ボトムアップ・マッピング: データベース・スキーマであるデータ・モデルから開始し、次にエンティティー・クラスへと作業を進めます。 パーシスタンス・プロバイダーとして OpenJPA を使用する場合、このアプローチでは、wsreversemapping ツールが役立ちます。
    • 中間マッピングで適合: これが一般的な開発モデルと思われます。 部分的に完成したデータ・モデルとオブジェクト・モデルを組み合わせます。 目的および要件に応じて、そのリレーションシップを調整して差異を解決する必要があります。 パーシスタンス・プロバイダーとして OpenJPA を使用する場合、このアプローチでは、wsmapping ツールと wsreversemapping ツールの両方が役立ちます。
    アプリケーション・サーバーの JPA ソリューションでは、JPA アプリケーションの開発に役立つ複数のツールが提供されています。 これらのツールを IBM® Rational® Application Developer と組み合わせることにより、 Java EE または Java SE アプリケーションのいずれかに対して、 安定した開発環境が提供されます。 Rational Application Developer には、アノテーションを挿入する GUI ツール、カスタマイズされた persistence.xml ファイル・エディター、データベース・エクスプローラー、およびその他のフィーチャーが含まれています。もう 1 つの選択肢として、Eclipse Dali プロジェクトがあります。 Rational Application Developer または Eclipse Dali プラグインについて詳しくは、それぞれの Web サイトを参照してください。
  2. エンティティー・クラスをコンパイルします。

    エンティティーのコンパイルは、Criteria API を使用する場合を除き、Java クラスの場合と同じようにして実行します。 Criteria API を使用する場合は、Criteria API メタモデル・クラスも生成する必要があります。

    以下に、このオプションの使用方法の例を示します。

    EclipseLink を使用する場合、javac コマンドに以下の引数を指定します。
    -processor 
    org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor 
    -Aeclipselink.persistencexml= persistence.xml_location 
    app_server_root/java/bin/javac 
    -classpath app_server_root/runtimes/com.ibm.ws.jpa-2.1.thinclient_9.0.0.jar 
    -processor
    org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor 
    -Aeclipselink.persistencexml=app_location/src/META-INF/persistence.xml mypackage\MyEntity.java 
    OpenJPA または WSJPA を使用する場合、javac コマンドに以下の引数を指定します。
    -Aopenjpa.metamodel=true
    app_server_root/java/bin/javac 
    -Aopenjpa.metamodel=true
    -classpath app_server_root/runtimes/com.ibm.ws.jpa-2.0.thinclient_9.0.0.jar  
    mypackage/MyEntity.java
  3. JPA 拡張ツール (EclipseLink の場合は eclenhancer、OpenJPA の場合は wsenhancer) を使用して、エンティティー・クラスを拡張します。 拡張ツールは、パーシスタント・クラス作成後、それらにプロバイダー固有の統合バイトコードを追加するツールです。 拡張ツールでは、Java コンパイラーによって生成されたバイトコードを後処理し、パーシスタンス・フィーチャーの実装に必要なフィールドおよびメソッドを追加します。 アプリケーション・サーバーのパーシスタンス・プロバイダーで実行時に自動的にエンティティーを拡張することはできますが、アプリケーションのビルド時にエンティティーを拡張できれば、パフォーマンスがさらに向上します。 アプリケーションは、既に拡張されているエンティティーの拡張は試行しません。

    eclenhancer ツールの使用方法の例については、eclenhancer コマンドのトピックを参照してください。 wsenhancer ツールの使用方法の例については、wsenhancer コマンドのトピックを参照してください。

  4. オプション: bottom-up マッピングの開発モデルを使用していない場合は、自動的に、あるいは eclenhancer または wsmapping ツールを使用して、データベース表を生成するか更新してください。
    • デフォルトでは、オブジェクト関連マッピングは自動的には実行されませんが、そのマッピングを提供するようにアプリケーション・サーバーを構成できます。これは、EclipseLink の場合は eclipselink.ddl-generation プロパティーを使用して、OpenJPA の場合は openjpa.jdbc.SynchronizeMappings プロパティーを使用して行います。 これらのプロパティーにより、データベース表がオブジェクト・モデルに自動的に突き合わせられるようになり、開発を促進できます。自動マッピングを使用可能にするには、persistence.xml ファイルに次の行を組み込みます。
      EclipseLink の場合:
      <property name="eclipselink.ddl-generation" value =“create-tables”/> 
      OpenJPA の場合:
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
      JPA 2.1 標準:
      <property name="javax.persistence.schema-generation.database.action" value="create"/>  
      トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): 実行時に自動オブジェクト・リレーショナル・マッピングを使用可能にするには、Java の .class ファイル、マッピング・ファイル、および Java アーカイブ (JAR) ファイルの各エレメントに XML フォーマットですべてのパーシスタント・クラスがリストされている必要があります。gotcha
    • データベース表を手動で更新または生成するには、コマンド行からアプリケーション・サーバーの JPA マッピング・ツールを実行し、データベースに表を作成します。 eclenhancer ツールの実行方法の例については、eclenhancer コマンドのトピックを参照してください。 wsmapping ツールの使用方法の例については、wsmapping コマンドのトピックを参照してください。
  5. オプション: OpenJPA および DB2® を使用しており、静的 Structured Query Language (SQL) を使用する場合は、wsdbgen コマンドを実行します。 wsdbgen コマンドを使用するには、IBM Optim pureQuery ランタイムがインストールされている必要があります。wsdbgen コマンドでは、persistence.xml ファイルのある META-INF ディレクトリー内に persistence_unit_name.pdqxml ファイルが作成されます。 複数のパーシスタンス・ユニットがある場合は、パーシスタンス・ユニットごとに wsdbgen コマンドを実行する必要があります。

    あるアプリケーションによって複数の pdqxml ファイルが参照される場合は、マージ・ユーティリティーを使用してこれらのファイルを単一の pdqxml ファイルに結合します。 結合された pdqxml ファイルを pdqProperties という名前の pureQueryXml プロパティーとして指定します。IBM Integrated Data Management インフォメーション・センターで Merge ユーティリティーの資料を参照してください。

    トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): JPA を実装し、静的な SQL を実行するように構成されているアプリケーションでは、さまざまな例外が発生する可能性があります。これらの例外は、wsdbgen コマンドの実行時に発生することがあります。このコマンドは、アプリケーションを準備するとき、またはアプリケーションの実行中に JPA メソッドを呼び出すときに使用できます。この問題を解決するには、以下のステップを実行します。
    1. iSeries JDBC Driver V5R4 のプログラム一時修正 (PTF) をインストールします。インストールするのは、PTF 番号 SI32561 および SI32562 です。これらの PTF は、IBM System i® Support: PTF Cover Letters Web サイトで入手できます。
    2. DB2 Universal Database™ for iSeries V6R1 または V5R3 を使用している場合は、該当するリリースの修正 Web サイトを参照してください。
    3. 必要なレベルの pureQuery (バージョン 1.3.100 以降) をインストールします。詳しくは、IBM Optim pureQuery Runtime Web サイトを参照してください。最新の JCC ドライバー (バージョン 3.52.95 以降) をインストールし、APAR PK65069 の修正を適用します。最新の JCC ドライバーは、IBM DB2 ソフトウェア・パッケージに含まれています。
    4. DB2 on z/OS® サーバーの場合は、V8 代替ドライバーに対応する PTF UK39204 または V9 に対応する PTF UK39205 をインストールし、APAR PK67706 の修正をインストールします。
    gotcha

    このコマンドの実行方法の例については、『wsdbgen コマンド』トピックを参照してください。

  6. オプション: OpenJPA および アプリケーション管理 ID を使用している場合は、wsappid ツールを使用してアプリケーション管理 ID クラスを生成します。 アプリケーション管理 ID を使用する場合は、1 つ以上のフィールドを ID フィールドにする必要があります。 エンティティーに複数の ID フィールドがあり、少なくともそのフィールドのいずれかが別のエンティティーに関連している場合は、ID クラスを使用します。 アプリケーション管理 ID ツールでは、アプリケーション管理 ID を実装するすべてのパーシスタント・タイプに対して ID クラスを使用する Java コードを生成します。

    wsappid ツールの使用方法の例については、『wsappid コマンド』トピックを参照してください。

以下は、persistence.xml ファイルの例です。
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1" 
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd” ">
 	  
<persistence-unit name="TheWildZooPU" transaction-type="JTA">
        <jta-data-source>jdbc/DataSourceJNDI</jta-data-source>
        <!-- additional Mapping file, in addition to orm.xml>
        <mapping-file>META-INF/JPAorm.xml</mapping-file>

        <class>com.company.bean.jpa.PersistebleObjectImpl</class>
        <class>com.company.bean.jpa.Animal</class>
        <class>com.company.bean.jpa.Dog</class>
        <class>com.company.bean.jpa.Cat</class>

        		<properties>
             <property name=”eclipselink.ddl-generation”
                       value=”create-tables”/> 
			
        </properties>

     </persistence-unit>
</persistence>

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_jpadeveefepplus
ファイル名:tejb_jpadeveefepplus.html