TopLinkでは、永続性ユニットのJARを使用して、コンテナの外のアプリケーション(たとえば、Java Platform, Standard Edition (Java SE)のアプリケーション)をテストできます。
この章では、次の項目について説明します。
コンテナの外部にデプロイする場合は、javax.persistence.Persistence
クラスのcreateEntityManagerFactory
メソッドを使用して、エンティティ・マネージャ・ファクトリを作成します。このメソッドは、プロパティのMap
および永続性ユニットの名前を受け入れます。このメソッドに渡すプロパティは、persistence.xml
ファイル指定されているプロパティと組み合されます。追加のプロパティの場合もあれば、persistence.xml
ファイルに以前に指定したプロパティの値を上書きする場合もあります。
ヒント: これは、コマンドラインなどのプログラム入力から取得したプロパティを設定するのに便利な方法です。 |
EntityManager
は、エンティティBeanを永続化したり、データベースからロードしたりするためのアクセス・ポイントです。通常は、JPAコンテナで、データ・ソースとのやりとりを管理します。ただし、JPA永続性ユニットに対してJTAデータ・ソースを使用している場合は、Java EEコンテナのデータ・ソースからJDBC接続にアクセスできます。管理対象のデータ・ソースを使用できないので、persistence.xml
ファイルに接続情報を含める必要があります。
Oracle TopLinkでは、EntityManager
に対するEclipseLinkの拡張機能にもアクセスできます。
persistence.xml
ファイルは、Java Persistence API (JPA)を使用した永続性のデプロイメント・ディスクリプタ・ファイルです。ここには、永続性ユニットを指定し、管理対象永続性クラス、オブジェクト/リレーション・マッピング、およびデータベース接続の詳細を宣言します。
この項には、次の項目が含まれます。
例8-1に、JavaSE構成(つまり、コンテナの外部)用のpersistence.xml
ファイルを示します。
例8-1 JavaSE構成を指定する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>
EntityManagerFactory
を使用すれば、データベースのEntityManager
インスタンスを効率的に作成できます。次の方法を使用して、(例8-1に示す)アプリケーションのEntityManagerFactory
をインスタンス化できます。
Persistence.createEntityManagerFactory("my-app");
プロパティ・マップを使用して、デフォルトの永続性プロパティをオーバーライドできます。
この項の手順は次のとおりです。
例8-2に、コンテナ・デプロイメントを使用するpersistence.xml
ファイルを示します。
例8-2 JavaSE構成を指定する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>
注意: コンテナの外でテストする際に、データ・ソースは使用できません。 |
例8-2に示されている永続性ユニットをコンテナの外でテストするには、JavaSEのブートストラップAPIを使用する必要があります。例8-3に、このブートストラップを示すサンプル・コードを示します。
例8-3 サンプル構成
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);
EntityManagerFactory
を使用すれば、データベースのEntityManager
インスタンスを効率的に作成できます。次の方法を使用して、(例8-3に示す)アプリケーションのEntityManagerFactory
をインスタンス化できます。
Persistence. createEntityManagerFactory("unitName", "Properties");
JPAデプロイメントの詳細は、JPA仕様の次の項(http://jcp.org/en/jsr/detail?id=317
)を参照してください。
7.2項「Bootstrapping in Java SE Environments」
第7章「Container and Provider Contracts for Deployment and Bootstrapping」