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

パーシスタンス・アプリケーションを作成して、Java™ SE 環境でのアプリケーション・サーバー・コンテナーの外部でテストします。

このタスクについて

重要: これらの JPA コマンド・ツールを使用する場合は、これらのツールを profile_root/bin ディレクトリーから (app_server_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/ ディレクトリーの中です。

重要: Java Persistence API (JPA) アプリケーションでは、コンテナー管理パーシスタンス (CMP) または Bean 管理パーシスタンス (BMP) を使用するアプリケーションとは異なる構成手法が必要です。また、CMP または BMP を実装するアプリケーションに関連した通常のデプロイメント手法に従いません。 JPA アプリケーションでは、persistence.xml ファイルでパーシスタンス・ユニットを定義して正しいプロパティーを構成し、 そのアプリケーションが Java SE 環境で実行できるようにする必要があります。
Java SE 環境で JPA アプリケーションを実行する場合には、以下のような考慮事項があります。
  • リソースの注入は使用できません。 各サービスは、明確に、またはプログラマチックに構成する必要があります。
  • EntityManagerFactory および EntityManager のライフサイクルは、アプリケーションによって管理されます。 アプリケーションでは、各構成体の作成、操作、および削除をプログラマチックに制御します。

手順

  1. エンティティー・クラスを生成します。

    これらは、Plain Old Java Object (POJO) エンティティーです。 ユーザーの開発モデルに応じて、以下の 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 拡張ツールを使用してエンティティー・クラスを拡張するか、または実行時に動的拡張を実行するように Java エージェントを指定します。
    • EclipseLink の場合は eclenhancer ツールを使用し、OpenJPA の場合は wsenhancer ツールを使用します。

      拡張ツールでは、Java コンパイラーによって生成されたバイトコードを後処理し、パーシスタンス・フィーチャーの実装に必要なフィールドおよびメソッドを追加します。 eclenhancer ツールの使用方法の例については、『eclenhancer コマンド』トピックを参照してください。wsenhancer ツールの使用方法の例については、『wsenhancer コマンド』トピックを参照してください。

    • Java エージェントのメカニズムを指定し、実行時に動的拡張を実行できます。 例えば、コマンド・プロンプトで以下のように入力します。
      EclipseLink の場合:
      java -javaagent:${app_client_root}/runtimes/com.ibm.ws.jpa-2.1.thinclient_9.0.jar com.xyz.Main  
      OpenJPA の場合:
      java -javaagent:${app_client_root}/runtimes/com.ibm.ws.jpa-2.0.thinclient_9.0.jar com.xyz.Main  
      重要: 拡張ツールを実行するか、javaagent コマンドを指定することができます。 両方を実行する必要はありません。
  4. オプション: ボトムアップ・マッピングの開発モデルを使用していない場合は、自動的に、あるいは拡張ツールまたは wsmapping ツールを使用して、データベース表を生成するか更新してください。
    • デフォルトでは、オブジェクト関連マッピングは自動的には実行されませんが、そのマッピングを提供するようにアプリケーション・サーバーを構成できます。これは、EclipseLink の場合は eclipselink.ddl-generation プロパティーを使用して、OpenJPA の場合は openjpa.jdbc.SynchronizeMappings プロパティーを使用して行います。 これらのプロパティーにより、データベース表がオブジェクト・モデルに自動的に突き合わせられるようになり、開発を促進できます。自動マッピングを使用可能にするには、persistence.xml ファイルに次の行を組み込みます。
      EclipseLink の場合:
      <property name=”eclipselink.ddl-generation” value=”create-tables”/>  
      Open JPA の場合:
      <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 Runtime がインストールされている必要があります。wsdbgen コマンドでは、persistence.xml ファイルのある META-INF ディレクトリー内に persistence_unit_name.pdqxml ファイルが作成されます。 複数のパーシスタンス・ユニットがある場合は、パーシスタンス・ユニットごとに wsdbgen コマンドを実行する必要があります。

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

    トラブルの回避 (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. 必要なレベルの IBM Optim pureQuery Runtime (バージョン 1.3.100 以降) をインストールします。詳しくは、IBM Data Studio 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 コマンド』トピックを参照してください。

以下に、Java SE 環境用の persistence.xml ファイルの例を示します。

EclipseLink の場合:

<?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="RESOURCE_LOCAL">
          <!-- 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="javax.persistence.jdbc.driver"
                        value="org.apache.derby.jdbc.EmbeddedDriver"/>
             <property name="javax.persistence.jdbc.url" 
                       value="jdbc:derby:target/database/jpa-test-database;create=true" />
             <property name="javax.persistence.schema-generation.database.action"
                        value="create" />
             <property name="javax.persistence.jdbc.user"
                        value="user" />
             <property name="javax.persistence.jdbc.password"
                        value="password"/>
          </properties>
     </persistence-unit>
</persistence>
      
OpenJPA の場合:
<?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.0"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                       http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
            <persistence-unit name="TheWildZooPU" transaction-type="RESOURCE_LOCAL">
              <!-- 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="openjpa.ConnectionDriverName"
                                value="org.apache.derby.jdbc.EmbeddedDriver" />
                        <property name="openjpa.ConnectionURL"
                                value="jdbc:derby:target/database/jpa-test-database;create=true" />
                        <property name="openjpa.Log"
                                value="DefaultLevel=INFO,SQL=TRACE,File=./dist/jpaEnhancerLog.log,Runtime=INFO ,Tool=INFO" />
                        <property name="openjpa.ConnectionFactoryProperties"
                                value="PrettyPrint=true,PrettyPrintLineLength=72" />
                        <property name="openjpa.jdbc.SynchronizeMappings"
                                value="buildSchema(ForeignKeys=true)" />
                        <property name="openjpa.ConnectionUserName"
                                value="user" />
                        <property name="openjpa.ConnectionPassword"
                                value="password"/>
                        </properties>
            </persistence-unit>
</persistence>
    

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



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