この章では、Oracle TopLinkをOracle GlassFish Serverにデプロイされたアプリケーションの永続性プロバイダとして使用する方法を説明します。
この章の内容は次のとおりです。
ユース・ケース
Oracle GlassFish ServerでJPAを使用するアプリケーションを実行したいとユーザーが考えています。
解決方法
Oracle GlassFishでは、EclipseLinkを完全にサポートしています。開発者がGlassFish Serverプラットフォーム用のアプリケーションを記述する場合、Java Persistence API (JPA) 2.0仕様に準拠させ、Javaとデータ・ソースを完全に統合できます。EclipseLinkでは、理想的なアプリケーション設計またはデータの整合性を損わずに、Javaアプリケーションをすべてのデータ・ソースと統合できます。
コンポーネント
GlassFish Server 3.1.2.
TopLink 12cリリース1 (12.1.2)以上。
注意: TopLinkのコア機能は、オープン・ソースのEclipse Foundationの永続性フレームワークであるEclipseLinkによって提供されています。EclipseLinkでは、Java Persistence API (JPA)、Java Architecture for XML Binding (JAXB)、および標準に基づいたその他の永続性テクノロジと、それらの標準の拡張が実装されます。TopLinkには、EclipseLinkのすべてに加え、Oracleの追加機能が含まれています。 |
Oracle Database、Oracle Database Express Edition、MySQLなどのJDBC準拠のすべてのデータベース。
必須ではありませんが、Java EE統合開発環境(IDE)を開発に使用すると便利です。
Oracle GlassFish Serverは、Java Platform, Enterprise Edition (Java EEプラットフォーム)仕様のリファレンス実装です。GlassFish Server Open Source Editionを使用してビルドされたGlassFish Serverは、本番にすぐ使用できる柔軟で軽量なJava EEプラットフォームを提供します。
GlassFish Serverは製品のOracle Fusion Middlewareアプリケーション・グリッド・ポートフォリオの一部であり、エンタープライズJava EEプラットフォームの最新実装を使用した軽量インフラストラクチャを必要とするアプリケーションに最適です。GlassFish Serverは、Oracle Fusion Middlewareのより広範なポートフォリオおよび大規模なエンタープライズ・アプリケーションを実行するように設計されたOracle WebLogic Serverを補完する製品です。
TopLinkサポートを追加することにより、GlassFish Serverプラットフォームのアプリケーション開発者が、Java Persistence API (JPA) 2.0仕様に準拠してJavaとデータ・ソースを完全に統合できるようになります。TopLinkでは、理想的なアプリケーション設計またはデータの整合性を損わずに、Javaアプリケーションをすべてのデータ・ソースと統合できます。また、TopLinkを使用すれば、GlassFish Serverプラットフォームのアプリケーションで、リレーショナル・データベースまたはXMLデータ・ソースをリポジトリとして使用して、ビジネス・ドメイン・オブジェクトをストア(永続化)および取得できるようになります。
GlassFish Serverでは他の永続性プロバイダを使用でき、TopLinkは他のアプリケーション・サーバーで使用できるので、GlassFish ServerをTopLinkとともに使用すると、次のような多くの利点があります。
TopLinkはすべてのGlassFish Serverディストリビューションに含まれており、デフォルトのJPAプロバイダになります。
TopLinkでは、GlassFish Serverで動作するアプリケーションでOracle Coherenceのキャッシュを使用できます。Coherenceは、データ・キャッシング、データ・レプリケーションおよび分散コンピューティング・サービスを提供するJavaベースのインメモリー・アプリケーション・グリッド製品です。TopLinkには、デプロイされたアプリケーションでCoherenceデータ・キャッシュを使用し、オブジェクトからリレーショナルへの永続化フレームワークとしてTopLink Gridを組み込む機能が含まれています。この機能の使用方法については、このガイドでは説明しません。詳細は、『Oracle Coherenceの統合』を参照してください。
GlassFish ServerのTopLinkロギング統合では、包括的な統合ロギング・インフラストラクチャが実現されています。
EclipseLink JAXBは、GlassFishバージョン3.1.2以上にも含まれています。デフォルトのJAXBの実装ではありませんが、JAX-WSおよびJAX-RSアプリケーションで使用できます。詳細は、http://blog.bdoughan.com/2012/02/glassfish-312-is-full-of-moxy.html
を参照してください。
GlassFish Serverでは、StrutsおよびJavaServer Faces (JSF)に基づくエンドツーエンドのJava EEフレームワークであるOracle Application Development Framework (Oracle ADF)をサポートしています。Oracle ADFでは、インフラストラクチャ・サービスおよび視覚的で宣言的な開発エクスペリエンスを実現することにより、アプリケーション開発が簡素化されています。TopLinkおよびOracle ADFをともに使用することにより、完全なJava EEアプリケーション・インフラストラクチャが実現されます。Oracle ADFについては、このマニュアルでは説明しません。『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。
図4-1は、他のOracle製品に対するGlassFish ServerとTopLinkの関係および使用方法を示しています。次にGlassFish ServerおよびTopLinkをその他のOracle Middleware製品とともに使用する方法を説明します。
永続性プロバイダとしてEclipseLinkを使用します。
データのキャッシュ、データのレプリケーション、分散コンピューティング・サービスには(Oracle TopLink Gridの統合を介して)Oracle Coherenceを使用します。
アプリケーション・サーバーとしてGlassFishを使用します。
永続性データとしてOracle Databaseを使用します。
注意: Oracle CoherenceおよびTopLink Gridについては、このガイドでは説明しません。Coherenceの詳細は、『Oracle Coherenceでのアプリケーションの開発者』およびCoherenceのその他のドキュメントへのリンクを参照してください。TopLink Gridの詳細は、「Oracle Coherenceの統合」を参照してください。 |
図4-1 Oracle Fusion MiddlewareスタックのGlassFish Server、TopLinkおよびその他の製品
EclipseLink JPAアプリケーションをGlassFish Serverで実行するには、サーバーを構成して、サーバーとアプリケーションの特定の設定を調整する必要があります。これらについては、次のタスクで説明します。
このドキュメントは、次の製品およびツールに基づいていますが、原則は、サポートされているすべてのデータベースまたは開発環境に適用できます。後の項で特記されている場合以外、ソフトウェアはすでにインストールされているものと仮定しています。
GlassFish Server 3.1.2.
詳細およびダウンロードは、Oracle Technology Networkのhttp://www.oracle.com/technetwork/middleware/glassfish/overview/index.html
を参照してください。
EclipseLink 2.4.1。
詳細およびダウンロードについては、EclipseLink Webサイトのhttp://www.eclipse.org/eclipselink/
を参照してください。
Oracle Database、Oracle Database Express Edition、MySQLなどのJDBC準拠のすべてのデータベース。
Oracle Databaseについては、http://www.oracle.com/technetwork/database/enterprise-edition/overview/index.html
を参照してください。
Oracle Database Express Editionについては、http://www.oracle.com/technetwork/database/express-edition/overview/index.html
を参照してください。
MySQLについては、http://www.oracle.com/us/products/mysql/index.html
を参照してください。
必須ではありませんが、Java EE統合開発環境(IDE)を開発に使用すると便利です。たとえば、Oracle JDeveloper、Oracle Enterprise Pack for EclipseおよびNetBeansにはすべて、高度なJava EE開発ツールが用意されています。
JDeveloperについては、http://www.oracle.com/technetwork/developer-tools/jdev/downloads/index.html
を参照してください。
Oracle Enterprise Pack for Eclipseについては、http://www.oracle.com/technetwork/developer-tools/eclipse/overview/index.html
を参照してください。
NetBeansについては、http://www.oracle.com/us/products/tools/050845.html
を参照してください。
EclipseLinkは、GlassFish Serverの配布に含まれています。インストールおよび構成の手順の詳細は、Oracle GlassFish Serverのドキュメント・ライブラリを参照してください。
EclipseLinkのモジュールは、modules
ディレクトリに個別のJARファイルとして表示されます。
* \glassfish\modules . . . o org.eclipse.persistence.antlr.jar o org.eclipse.persistence.asm.jar o org.eclipse.persistence.core.jar o org.eclipse.persistence.jpa.jar o org.eclipse.persistence.jpa.modelgen.jar o org.eclipse.persistence.moxy.jar o org.eclipse.persistence.oracle.jar . . .
注意:
|
Object-XML (JAXBサポート)は、XMLスキーマにJavaクラスをバインドできるようにするコンポーネントです。このサポートは、org.eclipse.persistence.moxy.jar
によって提供されています。
Java EEアプリケーションのJDBCリソースとしてOracle Databaseを構成するには、次の手順を実行します。
JDBCドライバを統合するには、JARファイルをドメインにコピーしてから、ドメインおよびインスタンスを再起動し、ドライバを使用可能にします。
JDBCドライバのJARファイルをドメインのlib
サブディレクトリに、次のようにコピーします。
cd /home/gfuser/glassfish3 cp oracle-jdbc-drivers/ojdbc6.jar glassfish/domains/domain1/lib
ドライバは動的にピックアップされるので、GlassFish Serverを再起動する必要はありません。
EclipseLinkで提供されるOracle Database固有の拡張機能をアプリケーションが使用している場合は、ドライバをlib/ext
ディレクトリにコピーする必要があります。詳細は、『Oracle GlassFish Serverアプリケーション開発ガイド』のOracle Databaseの拡張機能に関する項を参照してください。
GlassFish Serverの管理コンソールまたはコマンドラインを使用して、ドメインのインスタンスを再起動し、インスタンスでJDBCドライバを使用できるようにします。
GlassFish Server管理コンソールを使用するには:
GlassFish Serverの管理コンソールで「クラスタ」ノードを展開します。クラスタのノード選択して、「一般情報」ページで、「インスタンス」タブをクリックします。再起動するインスタンスを選択します。詳細は、GlassFish Server管理コンソール・オンライン・ヘルプのクラスタ化されたGlassFish Serverインスタンスの起動に関する項を参照してください。
スタンドアロン・インスタンスを起動するには、「スタンドアロン・インスタンス」ノードを展開します。起動する各インスタンスを、「サーバー・インスタンス」表から選択します。「起動」をクリックします。インスタンスが起動すると、「サーバー・インスタンス」の表の各インスタンスのステータスが更新されます。詳細は、GlassFish Server管理コンソール・オンライン・ヘルプのスタンドアロンのGlassFish Serverインスタンスの起動に関する項を参照してください。
コマンドラインを使用するには:
restart-instance
サブコマンドを実行して、インスタンスを再起動します。これらのコマンドでは、インスタンスの名前がpmd-i1
およびpmd-i2
である仮定しています。
restart-instance pmd-i1 restart-instance pmd-i2
JDBC接続プールは、GlassFish Server管理コンソールまたはコマンドラインから作成できます。
GlassFish Server管理コンソールを使用するには:
GlassFish Server管理コンソールで、「共通タスク」ノードを展開して、「共通タスク」ページの「新規JDBC接続プールの作成」ボタンをクリックします。プールの名前、リソース・タイプ、データベース・プロバイダの名前、データ・ソースとドライバ・クラスの名前、および他の詳細を指定します。詳細は、GlassFish管理コンソール・オンライン・ヘルプのJDBC接続プールの作成に関する項を参照してください。
コマンドラインを使用するには:
create-jdbc-connection-pool
サブコマンドを使用して、JDBC接続プールを作成し、データベース接続の値を指定します。このコマンドでは、URLプロパティ値の前に2つのバック・スラッシュ(\\
)を使用していることに注意してください。これらのバック・スラッシュにより、コロンがプロパティと値のペアのセパレータとしてではなく、プロパティ値の一部として解釈されるようになります。次に例を示します。
create-jdbc-connection-pool --datasourceclassname oracle.jdbc.pool.OracleDataSource --restype javax.sql.DataSource --property User=smith\\:Password=password\\:url=jdbc\\:oracle\\:thin\\:@node_name.example.com\\:1521\\:smithdb poolbvcallbackbmt
データベースへの接続を確認します。
ping-connection-pool pool_name
GlassFish Server管理コンソールを使用してJDBCリソースを作成することも、コマンドラインを使用することもできます。
GlassFish Server管理コンソールを使用するには:
GlassFish Server管理コンソールで、「リソース」ノード→「JDBC」ノード→「JDBCリソース」ノードの順に展開して、「JDBCリソース」ページをオープンします。一意のJNDIリソース名を指定して、リソースを接続プールと関連付けます。詳細は、GlassFish Server管理コンソール・オンライン・ヘルプのJDBCリソースの作成に関する項を参照してください。
コマンドラインを使用するには:
create-jdbc-resource
サブコマンドを使用して、JDBCリソースを作成し、次のように、JNDIルックアップによってアプリケーションがJDBCリソースを見つけられるような名前を付けます。
create-jdbc-resource --connectionpoolid poolbvcallbackbmt jdbc/bvcallbackbmt
例4-1に、EclipseLinkのデフォルト永続性プロバイダorg.eclipse.persistence.jpa.PersistenceProvider
を指定するpersistence.xml
のサンプル・ファイルを示します。このファイルの詳細は、『Oracle TopLinkの理解』の永続性ユニットに関する項を参照してください。
デフォルトの永続性プロバイダを使用している場合は、『Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス』のその他のデータベース・プロパティを指定できます。
ファイルに入力する値のいくつかは、次に示すとおり、クラスタ、接続および接続プールのプロパティをGlassFish Serverに定義したときに選択した値と一致する必要があります。
JDBCデータ・ソースのプロパティ:
名前: 通常はJNDI名と同じ、jdbc/bvcallbackbmt
などのデータ・ソースの名前。
JNDI名: このデータ・ソースがバインドされる場所へのJNDIパス。これは、persistence.xml
の<jta-data-source>
要素の値と同じにする必要があります。たとえば、jdbc/bvcallbackbmt
のように指定します。
データベース・タイプ: Oracle
データベース・ドライバ: (デフォルト) インスタンス接続用のOracleのドライバ(Thin XA)。バージョン: 9.0.1以降
接続プロパティ:
データベース名: Oracle Database Express Editionのサンプルの場合はXE
などのデータベースの名前。
ホスト名: データベース・サーバーのIPアドレス。たとえば、ローカルにホストされているデータベースの場合は127.0.0.1
です。
ポート: Oracle Database Express Edition 11gのデフォルトである1521
など、データベース・サーバーが接続要求をリスニングするポート番号。
データベース・ユーザー名: Oracle Database Express 11gのサンプルの場合はhr
などの、データベース接続を作成するために使用するデータベース・アカウントのユーザー名。
パスワード: 使用するパスワード。
ターゲットの選択:
サーバー/クラスタ: データ・ソースをデプロイする管理サーバー、管理対象サーバーまたはクラスタを選択。1つ以上を選択できます。
例4-1のpersistence.xml
のサンプル・ファイルでは、永続性プロバイダ、JTAデータ・ソースおよびロギングの詳細を定義するプロパティを示しています。この例では、ロギング・レベルはFINE
に設定されています。このレベルでは、EclipseLinkによって生成されるSQLコードはserver.log
ファイルにロギングされます。これらのプロパティの詳細は、次を参照してください。
例4-1 persistence.xmlのサンプル・ファイル
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <persistence-unit name="pu1" transaction-type="JTA"><provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/bvcallbackbmt</jta-data-source>
<properties><property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> </properties> </persistence-unit> </persistence>
永続性プロバイダでは、JPAの実装を定義します。これは、persistence.xml
ファイルのprovider
要素に定義されています。永続性プロバイダはベンダー固有のものです。EclipseLinkの永続性プロバイダはorg.eclipse.persistence.jpa.PersistenceProvider
です。
データベース接続の詳細はpersistence.xml
ファイルに指定します。GlassFish Serverのデフォルトでは、バンドルされている、jdbc/__default
という名前のJava DB (Derby)データベースが使用されます。Oracle Databaseなどのデフォルト以外のデータベースを使用するには、jta-data-source
要素に値を指定するか、transaction-type
要素にRESOURCE_LOCAL
を設定して、non-jta-data-source
要素に値を指定します。
デフォルトの永続性プロバイダorg.eclipse.persistence.jpa.PersistenceProvider
を使用している場合は、接続メタデータに基づいて、プロバイダがデータベース・タイプの自動検出を試みます。このデータベース・タイプを使用して、検出されたデータベース・タイプに固有のSQL文が発行されます。オプションのeclipselink.target-database
プロパティを指定すれば、データベース・タイプが正しいことを保証できます。
GlassFish Server用にpersistence.xml
ファイルでデータベース・プロパティを指定する方法の詳細は、『Oracle GlassFish Serverアプリケーション開発ガイド』のアプリケーション用のデータベースの指定に関する項を参照してください。
ロギングはJPA仕様の一部ではありませんが、EclipseLinkにはロギング・ユーティリティが用意されています。そのため、ログで提供される情報はEclipseLink JPA固有のものです。EclipseLinkでロギングを有効にすれば、次の情報を確認できます。
構成の詳細
デバッグを容易にするための情報
データベースに送信されるSQL
ロギングはpersistence.xml
ファイルに指定できます。EclipseLinkのロギング・プロパティでは、ロギングのレベル、およびログの出力をファイルまたは標準出力のどちらにするかを指定できます。ロギング・ユーティリティはjava.util.logging
に基づいているので、使用するロギング・レベルを指定できます。
ロギング・ユーティリティには、ログ出力の量および詳細度を制御するロギング・レベルが9種類用意されています。ロギング・レベルは、次のようにeclipselink.logging.level
を使用して設定します。
<property name="eclipselink.logging.level" value="FINE"/>
デフォルトでは、System.out
またはコンソールにログが出力されます。出力がファイルにロギングされるように構成するには、eclipselink.logging.file
プロパティを次のように設定します。
<property name="eclipselink.logging.file" value="output.log"/>
EclipseLinkのロギング・ユーティリティはプラガブルで、java.util.logging
などの数種類のロギング統合がサポートされています。java.util.logging
を有効にするには、eclipselink.logging.logger
プロパティを次のように設定します。
<property name="eclipselink.logging.logger" value="JavaLogger"/>
GlassFish Server内でEclipseLinkを実行している間は、デフォルトでJavaLogger
を使用するようにGlassFish Serverによって構成されます。ログは常にGlassFish Serverのserver.log
ファイルにリダイレクトされます。詳細は、『Oracle GlassFish Server管理ガイド』のログ・レベルの設定に関する項を参照してください。
EclipseLinkでのロギングおよびロギング・ユーティリティで利用可能なロギング・レベルの詳細は、『Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス』の永続性プロパティの拡張のリファレンスに関する項を参照してください。
GlassFish Serverアプリケーション開発ガイドのJava永続性プロバイダの構成に関する項には、JPAを利用するアプリケーションを実行するGlassFishサーバーを設定する際のサーバー固有の考慮事項が説明されています。
これでは、次のトピックについて詳しく説明しています。
データベース接続プロパティの詳細は、アプリケーション用のデータベースの指定に関する項
アプリケーション用にデフォルトまたはデフォルトでない永続性プロバイダを設定する方法の詳細は、アプリケーション用の永続性プロバイダの指定に関する項
デフォルトの永続性プロバイダの主キーの生成のデフォルトの詳細は、主キーの生成のデフォルトに関する項
スキーマの自動生成を管理する注釈およびオプションの詳細は、スキーマの自動生成に関する項
Java Persistence APIの使用に影響する制限およびパフォーマンスの最適化の詳細は、制限および最適化に関する項
EclipseLinkをJPA永続性プロバイダとして使用するアプリケーションを作成するには、Java EE IDE開発環境を開発に使用すると便利です。たとえば、JDeveloper、Oracle Enterprise Pack for EclipseおよびNetBeansにはすべて、EclipseLinkのサポートを含む高度なJava EE開発ツールが用意されています。『Oracle TopLinkの理解』の主要なツールに関する項を参照してください。
アプリケーションの記述方法の詳細は、これらのトピックについて、『Oracle GlassFish Serverアプリケーション開発ガイド』のJava永続性プロバイダの構成に関する章を参照してください。
GlassFish Serverへのデプロイの詳細は、GlassFish Server管理コンソール・オンライン・ヘルプのアプリケーションまたはモジュールのデプロイに関する項、エンタープライズ・アプリケーションのデプロイに関する項、およびWebアプリケーションのデプロイに関する項を参照してください。『Oracle GlassFish Serverアプリケーション開発ガイド』も参照してください。
デプロイされたアプリケーションをGlassFish Server管理コンソールから起動する手順の詳細は、GlassFish Server管理コンソール・オンライン・ヘルプのアプリケーション・クライアントの起動に関する項、およびアプリケーションの起動に関する項を参照してください。
GlassFish Serverには、アプリケーションのヘルスおよびパフォーマンスを追跡するモニタリング・サービスが用意されています。コンソールからアプリケーションを監視する方法の詳細は、GlassFish Server管理コンソール・オンライン・ヘルプの監視に関する項、およびデータの監視に関する項を参照してください。コマンドラインからアプリケーションを監視する方法の詳細は、『Oracle GlassFish Server管理ガイド』のモニタリング・サービスの管理に関する項を参照してください。
この章のソリューションが実装されているその他のテクノロジおよびツールの詳細は、次の参考資料を参照してください。