ヘッダーをスキップ
Oracle® Fusion Middleware Oracle TopLinkソリューション・ガイド
12c (12.1.3)
E57549-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

17 コンテナ外部のJPAのテスト

この章では、Oracle TopLinkで永続性ユニットのJARファイルを使用して、コンテナの外のアプリケーション(たとえば、Java Platform, Standard Edition (Java SEプラットフォーム)のアプリケーション)をテストする方法について説明します。

この章では、次の項目について説明します。

ユース・ケース

ユーザーがTopLinkを、(Java SEプラットフォームのアプリケーションなどの)コンテナの内外の両方で使用する必要があります。

解決方法

このソリューションでは、コンテナ外部でTopLinkを使用した場合の主な違いに焦点を当てています。

コンポーネント

17.1 JPAデプロイメントの理解

コンテナの外部にデプロイする場合は、javax.persistence.PersistenceクラスのcreateEntityManagerFactoryメソッドを使用して、エンティティ・マネージャ・ファクトリを作成します。このメソッドは、プロパティのMapおよび永続性ユニットの名前を受け入れます。このメソッドに渡すプロパティは、persistence.xmlファイル指定されているプロパティと組み合されます。追加のプロパティの場合もあれば、persistence.xmlファイルに以前に指定したプロパティの値をオーバーライドする場合もあります。


ヒント:

これは、コマンドラインなどのプログラム入力から取得したプロパティを設定する便利な方法です。


17.1.1 EntityManagerの使用

EntityManagerは、エンティティBeanを永続化したり、データベースからロードしたりするためのアクセス・ポイントです。通常は、Java Persistence API (JPA)コンテナで、データ・ソースとの通信が管理されます。ただし、JPA永続性ユニットに対してJTAデータ・ソースを使用している場合は、Java EEプログラムのコンテナのデータ・ソースからJDBC接続にアクセスできます。管理データ・ソースは使用できないので、プロパティをcreateEntityManagerFactoryに渡して、トランザクションの種類をJTAからRESOURCE_LOCALに変更して、次のようにJDBC接続情報を定義します。

例17-1 トランザクションの種類の変更および接続情報の定義

import static org.eclipse.persistence.jpa.config.PersistenceUnitProperties.*;
 
...
 
Map properties = new HashMap();
 
// Ensure RESOURCE_LOCAL transactions is used.
properties.put(TRANSACTION_TYPE,
  PersistenceUnitTransactionType.RESOURCE_LOCAL.name());
 
// Configure the internal EclipseLink connection pool
properties.put(JDBC_DRIVER, "oracle.jdbc.OracleDriver");
properties.put(JDBC_URL, "jdbc:oracle:thin:@localhost:1521:ORCL");
properties.put(JDBC_USER, "user-name");
properties.put(JDBC_PASSWORD, "password");
properties.put(JDBC_READ_CONNECTIONS_MIN, "1");
properties.put(JDBC_WRITE_CONNECTIONS_MIN, "1");
 
// Configure logging. FINE ensures all SQL is shown
properties.put(LOGGING_LEVEL, "FINE");
 
// Ensure that no server-platform is configured
properties.put(TARGET_SERVER, TargetServer.None);

EntityManagerへのEclipseLinkの拡張へアクセスすることも可能です。

17.2 persistence.xmlファイルの構成

persistence.xmlファイルは、JPAを使用した永続性のためのデプロイメント・ディスクリプタ・ファイルです。ここには、永続性ユニットを指定し、管理対象永続性クラス、オブジェクト/リレーション・マッピング、およびデータベース接続の詳細を宣言します。

17.2.1 主なタスク

persistence.xmlファイルを構成するには、次の手順を実行します。

17.2.1.1 タスク1: persistence.xmlファイルの使用

例17-2に、Java SEプラットフォーム構成(つまり、コンテナの外部)用のpersistence.xmlファイルを示します。

例17-2 Java SE構成を指定するpersistence.xmlファイル

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0">
    <persistence-unit name="my-app" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
            <property name="javax.persistence.jdbc.user" value="scott"/>
            <property name="javax.persistence.jdbc.password" value="tiger"/>
        </properties>
    </persistence-unit>
</persistence>

17.2.1.2 タスク2: EntityManagerFactoryのインスタンス化

EntityManagerFactoryを使用すれば、データベースのEntityManagerインスタンスを効率的に作成できます。次の方法を使用して、(例17-2に示す)アプリケーションのEntityManagerFactoryをインスタンス化できます。

Persistence.createEntityManagerFactory("my-app");

17.3 プロパティ・マップの使用

プロパティ・マップを使用すると、デフォルトの永続性プロパティをオーバーライドしてコンテナ・デプロイメントを使用できます。

17.3.1 主なタスク

プロパティ・マップを使用するには、次の手順を実行します。

17.3.1.1 タスク1: persistence.xmlファイルの構成

例17-3に、コンテナ・デプロイメントを使用するpersistence.xmlファイルを示します。

例17-3 プロパティ・マップで使用するための、Java SE構成を指定するpersistence.xmlファイル

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0">
    <persistence-unit name="employee" transaction-type="RESOURCE_LOCAL">
        <non-jta-data-source>jdbc/MyDS</non-jta-data-source>
    </persistence-unit>
</persistence>

注意:

コンテナの外でテストする際に、データ・ソースは使用できません。


17.3.1.2 タスク2: ブートストラップAPIの構成

例17-3に示されている永続性ユニットをコンテナの外でテストするには、Java SEプラットフォームのブートストラップAPIを使用する必要があります。例17-4に、このブートストラップを示すサンプル・コードを示します。

例17-4 サンプル構成

import static org.eclipse.persistence.config.PersistenceUnitProperties.*;

...

  Map properties = new HashMap();

  // Ensure RESOURCE_LOCAL transactions is used.
  properties.put(TRANSACTION_TYPE,
    PersistenceUnitTransactionType.RESOURCE_LOCAL.name());

  // Configure the internal connection pool
  properties.put(JDBC_DRIVER, "oracle.jdbc.OracleDriver");
  properties.put(JDBC_URL, "jdbc:oracle:thin:@localhost:1521:ORCL");
  properties.put(JDBC_USER, "scott");
  properties.put(JDBC_PASSWORD, "tiger");

  // Configure logging. FINE ensures all SQL is shown
  properties.put(LOGGING_LEVEL, "FINE");
  properties.put(LOGGING_TIMESTAMP, "false");
  properties.put(LOGGING_THREAD, "false");
  properties.put(LOGGING_SESSION, "false");

  // Ensure that no server-platform is configured
  properties.put(TARGET_SERVER, TargetServer.None);

17.3.1.3 タスク3: EntityManagerFactoryのインスタンス化

EntityManagerFactoryを使用すれば、データベースのEntityManagerインスタンスを効率的に作成できます。次の方法を使用して、(例17-4に示す)アプリケーションのEntityManagerFactoryをインスタンス化できます。

Persistence.
createEntityManagerFactory("unitName", "properties");

17.4 ウィービングの使用

ウィービングは、コンパイル済のJavaクラスのバイトコードを操作する方法です。

EclipseLinkでは、遅延ロード、変更追跡、フェッチ・グループ、内部最適化など多くの機能にウィービングを使用し、Plain Old Java Object (POJO)クラスとJavaエンティティを拡張しています。

17.4.1 Java SE環境でのウィービングの無効化および有効化

Java SE環境では、デフォルトでウィービングは無効です。これは、遅延1対1、多対1および基本のリレーションシップに影響を与える場合があります。また、パフォーマンスおよび属性変更トラッキングにも大きな影響があります。

Java SEでウィービングを有効にするには、Java VMの起動時にEclipseLinkエージェントを使用する必要があります。

java -javaagent:eclipselink.jar

Java SEでJPAウィービングを許可するには、Springを使用することも可能です。詳細は、http://wiki.eclipse.org/EclipseLink/Examples/JPA/JPASpringを参照してください。

次の永続性プロパティを含めることにより、静的なウィービングを使用することも可能です。

<property name="eclipselink.weaving" value="static"/>

詳細は、『Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス』のウィービングに関する項を参照してください。

17.4.2 Java EE環境でのウィービングの無効化および有効化

Java EE環境では、Java EE 5以降に完全に対応したアプリケーション・サーバー(Weblogic、Webspehere、Glassfishなど)ではデフォルトでウィービングは有効です。(JBossではウィービングを許可しないので、静的ウィービングまたはSpringを使用する必要があります)。

ウィービングを無効にするには、ウィービング永続性ユニット・プロパティを使用します。

<property name="eclipselink.weaving" value="false">
 

ウィービングの詳細は、『Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス』のウィービングに関する項を参照してください。

17.5 その他の参考資料

JPAデプロイメントの詳細は、JPA仕様の次の項(http://jcp.org/en/jsr/detail?id=317)を参照してください。

17.5.1 関連Javadoc

詳細は、『Oracle TopLink Java APIリファレンス』で次のAPIを参照してください。

  • PersistenceUnitPropertiesクラス

  • EntityManagerFactoryインタフェース

  • JpaEntityManagerインタフェース