この章では、Oracle TopLinkとその主要機能(TopLinkに含まれるコンポーネント、メタデータ、アプリケーション・アーキテクチャ、マッピングおよびAPI)について説明します。
この章の内容は次のとおりです。
Oracle TopLinkは、Java Platform, Standard Edition (Java SE)やJava Platform, Enterprise Edition (Java EE)などのJava環境で使用するためのマッピングおよび永続性フレームワークです。TopLinkの中核となる機能は、オープン・ソースのマッピングおよび永続性フレームワークであるEclipseLinkによって提供されます。EclipseLinkプロジェクトは、オラクル社に主導され、Eclipse Foundationの管理下にあります。TopLinkには、このドキュメントの後の部分で説明するとおり、EclipseLinkを超える追加機能が含まれます。
EclipseLinkは、次の各仕様と、それらの仕様の拡張をすべて実装しています。
Java Persistence API (JPA)
JPAは、オブジェクト/リレーショナル・マッピング(ORM)用のJava APIであり、Javaオブジェクトは、Javaアプリケーションでリレーショナル・データを管理する目的でデータベース・アーティファクトにマップされます。JPAには、Java Persistence Query Language (JPQL)、Java Persistence Criteria API、およびオブジェクト/リレーショナル・マッピング・メタデータを定義するためのJava APIおよびXMLスキーマが含まれます。
最新バージョンの仕様は、JSR 317: Java Persistence 2.0です。http://jcp.org/en/jsr/detail?id=317
を参照してください。
標準のJPAに対するEclipseLinkの拡張は次のとおりです。
非リレーショナル(NoSQL)・データベースに対するマッピングのサポート。
テナント分離、拡張可能なエンティティ、外部メタデータ・ソースなど、Software as a Service (SaaS)環境で役立つ機能。
Java API for RESTful Web Services (JAX-RS、JSR 311として定義)。
その他多くの追加の注釈、注釈の拡張、Java Persistence Query Language (JPQL)の拡張、JPA問合せカスタマイズの拡張、および永続性プロパティの拡張。
Java Architecture for XML Binding (JAXB)
JAXBは、オブジェクト/XMLマッピング(OXM)のためのJava APIであり、XML文書は、そのXML文書のXSDスキーマに基づいてJavaオブジェクトにバインドされます。JAXBによって、XMLインスタンス文書をJavaコンテンツ・ツリーにアンマーシャリングし(読み取り)、次にJavaコンテンツ・ツリーをXMLインスタンス文書にマーシャリングする(書き込む)方法が提供されます。JAXBでは、JavaオブジェクトからXMLスキーマを生成する方法も提供されます。
最新バージョンの仕様は、JSR 222: Java Architecture for XML Binding (JAXB) 2.0です。http://jcp.org/en/jsr/detail?id=222
を参照してください。J
EclipseLinkによって、JAXBは、JavaScript Object Notation (JSON)ドキュメントをサポートするように拡張されます。EclipseLinkは、JSONの読取り時と書込み時のすべてのオブジェクト/XMLオプションに対応しています。
注意: EclipseLinkプロジェクトでは、EclipseLink MOXyという用語を使用して、EclipseLinkの完全なJAXBサポートとそのJSONサポートを説明し、さらにより古いネイティブのTopLinkオブジェクト/XML APIに対するサポートを説明します(これらはJAXB仕様では定義されていません)。TopLinkには、すべてのMOXy機能が含まれますが、この用語はOracleドキュメントでは正式に使用されていません。 |
前述の標準仕様の実装に加え、EclipseLinkには次の機能が含まれます。
EclipseLink Database Web Services (DBWS)
DBWSは、Webサービスを介してリレーショナル・データベース・アーティファクトにJava EE準拠のクライアント非依存アクセスを行うための開発ツールおよびランタイムです。開発ツールのDBWSビルダーは、必要なデプロイメント・アーティファクトを生成するコマンドライン・ユーティリティです。(DBWSビルダーは、Eclipse Dali Java PersistenceツールセットおよびOracle JDeveloperに統合されています。)ランタイム・プロバイダは、サービス・ディスクリプタ(および関連するデプロイメント・アーティファクト)を使用して、それをJAX-WS 2.0 Webサービスとして実現します。ランタイムは、EclipseLinkを使用して、Webサービス・クライアントが使用するXML SOAPメッセージとデータベース間の橋渡しをします。
EclipseLink Enterprise Information Services (EIS)
EISは、Java Connector Architecture (JCA)リソース・アダプタを通じてデータ・ストアの使用を有効化するための機能です。XMLメタデータの使用によって、相互作用および交換データが構成され、ドメイン・モデルにマップされます。相互作用のデータは、Common Client interface (CCI)またはXMLスキーマを使用してマップできます。この使用方法は、JDBCまたはSQLアクセスが提供されない非リレーショナル・データ・ストアを対象としています。
EclipseLinkは、広範囲のJava Enterprise Edition (Java EE)およびJavaアプリケーション・アーキテクチャとともに使用できます。EclipseLinkを使用して、リレーショナル・データベース、非リレーショナル(NoSQL)・データベース、XML、JSON、Webサービスを含む様々なデータ・ソースおよび形式をサポートする高度なオブジェクト永続性およびオブジェクト・トランスフォーメーション・レイヤーを設計、実装、デプロイおよび最適化できます。
EclipseLinkは、Java EE、Java SEおよびWebコンテナでJava永続性をサポートしますが、これには次のような様々なアプリケーション・サーバーとの統合が含まれます。
Oracle WebLogic Server
Oracle Glassfish Server
JBoss Web Server
IBM WebSphereアプリケーション・サーバー
SAP NetWeaver
Oracle Containers for Java EE (OC4J)
他の様々なWebコンテナ(Apache Tomcat、Eclipse Gemini、IBM WebSphere CE、SpringSource Serverなど)
EclipseLinkによって、オブジェクトとデータ・ソースおよびオブジェクトとデータ表現のマッピングを、柔軟で効率的なメタデータ形式で迅速に取得および定義できます。
ランタイムでは、このマッピング・メタデータを自分のアプリケーションに活用できますが、この場合、データ・アクセス、問合せ、トランザクション(外部トランザクション・コントローラの使用の有無を問わない)、およびキャッシングを詳細にサポートできる、シンプルなセッション・ファサードを使用できます。
TopLinkの詳細は、「主要機能」を参照してください。
Javaとデータ・ソースの統合は、エンタープライズJavaアプリケーションの作成時には非常に軽視されている問題です。この複雑な問題は、単なるデータ・ソースに対する読取りおよび書込みにとどまりません。データ・ソースの要素には表、行、列、主キー、外部キーがあります。JavaおよびJava EEプログラミング言語には、エンティティ・クラス(標準Javaクラス)、ビジネス・ルール、複雑なリレーションシップおよび継承があります。非リレーショナル・データ・ソースでは、JavaエンティティをXML要素とスキーマに一致させる必要があります。
解決を成功させるには、これらの異なるテクノロジ間の橋渡し、およびオブジェクトと永続データのインピーダンス・ミスマッチの解決が必要ですが、これは多くのリソースを要する難しい課題です。この課題を解決するには、Java EEとデータ・ソース要素の間に横たわる次の問題を解決する必要があります。
根本的に異なるテクノロジ
異なるスキル群
テクノロジごとに異なるスタッフおよび所有物
異なるモデリングおよび設計の原理
アプリケーション開発者には、アプリケーション設計またはデータの整合性を損わずに、Javaアプリケーションとすべてのデータ・ソースを統合できる製品が必要です。また、Java開発者には、リレーショナル・データベースまたは非リレーショナル・データ・ソースをリポジトリとして使用して、ビジネス・ドメイン・オブジェクトを格納(永続化)および取得する機能が必要です。
EclipseLinkは、Javaオブジェクトとデータ・ソースの不一致を解決します。これには、オブジェクト・テクノロジの最適な機能と特定のデータ・ソースを結合するアプリケーションを作成できる永続性フレームワークが含まれます。次の内容を実行できます。
Javaオブジェクトを事実上すべてのリレーショナル・データベースに永続化できます。
JavaオブジェクトとXMLおよびJSON文書間でインメモリー変換を実行できます。
任意のオブジェクト・モデルを任意のリレーショナルまたは非リレーショナル・スキーマにマップできます。
EclipseLinkには、データ・ソースの見やすいオブジェクト指向ビューが用意されているため、SQLまたはJDBCに詳しくない場合でもEclipseLinkを正しく使用できます。
広範な機能セットが用意されています。これらの機能を使用して、スケーラブルでメンテナンス性の高い、高パフォーマンスのエンタープライズ・アプリケーションを短期間で作成できます。
主な機能には、次のものがあります。
非侵入的で柔軟なメタデータベース・アーキテクチャ
高度なマッピング・サポートと柔軟性: リレーショナル、オブジェクト・リレーショナル・データ型、およびXML
幅広いパフォーマンス・チューニング・オプションによる、スケーラビリティに優れたパフォーマンスおよび同時実行性を実現する最適化
Oracle Fusion Middleware Serverなどの一部のアプリケーション・サーバーのクラスタの統合を含む、包括的なオブジェクト・キャッシュのサポート
広範な問合せ機能: Java Persistence Query Language (JPQL)、ネイティブSQL、EclipseLink式フレームワークなど
ジャストインタイム方式の読取り
オブジェクトレベルのトランザクション・サポートと広く使用されているサーバーおよびデータベースとの統合
オプティミスティック/ペシミスティック・ロック・オプションおよびロック・ポリシー
詳細およびダウンロードは、TopLinkのホーム・ページを参照してください。
http://www.oracle.com/technology/products/ias/toplink/index.html
次の項では、EclipseLinkの新機能の概要について説明します。
EclipseLinkでは、標準ベース(JAX-RS/JAXB/JPA)のRESTfulサービスを通じてJPAエンティティを公開できます。RESTとは、Representational State Transferの頭字語であり、ステートレス型のクライアント/サーバー・アーキテクチャを包含する設計用語です。このアーキテクチャでは、Webサービスは、そのURIで識別可能なリソースとして表現されます。
サービスに対して、作成(POST)、読取り(GET)、更新(PUT)、削除(DELETE)などの基本的なHTTP操作をコールできます。
RESTfulサービスのデータは、URIを使用して参照します。URIは、次のようにターゲットに応じて異なる方法で構成できます。
単一パートの主キーを持つJPAエンティティ用のURI
コンポジット・キーを持つJPAエンティティ用のURI
マップされた名前付き読取りの問合せを持つURI
名前の更新および削除の問合せ用のURI
クライアントは、次のいずれかの方法でRESTfulサービスと対話できます。
Webブラウザをクライアントとして使用する方法
Java SEをクライアントとして使用する方法
実装固有のAPIを使用する方法
詳細は、『Oracle Fusion Middleware Oracle TopLinkソリューション・ガイド』のRESTfulサービスを通じたJPAエンティティの公開に関する項を参照してください。
EclipseLinkでは、複数のテナントをサポートするアプリケーション・コンポーネントを簡単に開発できます。開発者およびデプロイヤは、必要となるアプリケーションとデータの分離を完全に制御できます。各テナントは、その独自のデータにアクセスできますが、他のテナントのデータは認識できません。
EclipseLinkには、テナント分離に関する次のオプションがあります。
単一表のテナント分離では、各テナントで表を共有できます。各テナントには、識別子列によって識別される独自の行があり、それらの行は他のテナントからは認識できません。
テナント別の表のテナント分離では、各テナントに、表のテナント識別子によって識別される1つ以上の独自の表があり、それらの表は他のユーザーからは認識できません。
仮想プライベート・データベース(VPD)のテナント分離では、テナントは、同じ表を共有する複数のテナントをサポートする機能を提供するVPDデータベースを使用します。
詳細は、『Oracle Fusion Middleware Oracle TopLinkソリューション・ガイド』のテナント分離の使用に関する項を参照してください。
NoSQLは、SQL標準をサポートしないデータベース・システムの類型です。NoSQLの類型は、アプリケーション・データベース、レガシー・データベース、メッセージ・システム、トランザクション処理モニターなどのEnterprise Information Systems (EIS)を含めるように拡張できます。EclipseLinkでは、Java Persistence API (JPA)を通じたNoSQLデータベースに対するJavaオブジェクトの永続化がサポートされます。EclipseLinkのネイティブAPIも、NoSQLデータベースでサポートされます。
NoSQLは、オブジェクトをXMLやJSONなどの構造化データにマップします。これは、埋込みデータ、埋込みコレクション、およびすべての既存のJPAマッピング注釈もサポートします。
問合せがNoSQLでサポートされるかどうかは、使用しているNoSQLプラットフォームに応じて異なります。JPAトランザクションAPIは、NoSQLデータ・ソースでサポートされます。一部のNoSQLデータ・ソースでは、トランザクションがサポートされないことがあるため、トランザクション・サポートのレベルはNoSQLプラットフォームに依存します。
詳細は、第12章「非リレーショナル・データ・ソースの理解」を参照してください。また、『Oracle Fusion Middleware Oracle TopLinkソリューション・ガイド』のNoSQLデータベースでのTopLinkの使用に関する項も参照してください。
JavaScript Object Notation (JSON)は、判読可能なデータ交換用に設計された、テキストベースのオープン標準です。これは、単純なデータ構造および連想配列を表現するためのJavaScriptスクリプト言語から導出されます。これは、多数の言語で使用できるパーサーを持ち、言語に依存しません。
JAXBバインディング・メタデータを使用して、JSONを対象にJavaオブジェクトをマーシャリングします。この機能は、RESTfulサービスを作成する場合に便利です(JAX-RSサービスはXMLとJSON両方のメッセージを受け取ることができます)。
JSONサポートの詳細は、『Oracle Fusion Middleware Oracle TopLinkによるJAXBアプリケーションの開発』を参照してください。
共有(L2)オブジェクト・キャッシュによって、オブジェクトとそのリレーションシップに対するデータベース・アクセスが減少します。このキャッシュは、デフォルトで有効になっていますが、他のアプリケーションによって、またはクラスタ環境の他のサーバー上の同じアプリケーションによってデータベースの内容が直接変更されないかぎり、通常は問題ありません。その場合、キャッシュ内のデータが失効する可能性があります。
データベースの内容が変更された場合、EclipseLinkデータベース変更通知(DCN)によって、キャッシュの内容とデータベース間の同期が保証されます。DCNでは、JPA環境で共有キャッシュを使用できます。
『Oracle Fusion Middleware Oracle TopLinkソリューション・ガイド』のJPA環境の共有データベースでのキャッシュの使用に関する項を参照してください。
拡張可能なエンティティによって、マッピングを動的に追加できます。この場合、エンティティには、静的属性ではなく、マップ内に拡張された属性が保存されます。次に、エンティティは、eclipselink-orm.xml
マッピング・ファイルを使用して、このマップの値をデータベースにマップする方法を定義します。拡張可能なエンティティは、複数のクライアント(テナント)が共有の汎用アプリケーションを使用できるマルチテナント(またはSaaS)・アーキテクチャで役立ちます。テナントは、自分のデータにプライベートにアクセスでき、他のテナントと共有するデータにもアクセスできます。
拡張可能なエンティティを使用すれば、次のことを行えます。
一部のマッピングがすべてのユーザーに共通で、一部のマッピングはユーザー固有であるようなアプリケーションを作成できます。
顧客に提供された後のアプリケーションにマッピングを追加できます(デプロイメント後でも可能)。
マッピング変更後も、同じEntityManagerFactory
インタフェースを使用してデータを操作できます。
アプリケーションで使用されるメタデータのソースを追加提供できます。
エンティティを拡張可能にする方法の詳細は、『Oracle Fusion Middleware Oracle TopLinkソリューション・ガイド』のSoftware as a Serviceの提供に関する項を参照してください。
コンポジット永続性ユニットを使用すると、(エンティティ・タイプの独自のセットがそれぞれに設定された)複数の永続性ユニットを単一の永続性コンテキストとして公開できます。このコンポジット永続性ユニットの一部である個々の永続性ユニットを、コンポジット・メンバー永続性ユニットと呼びます。詳細は、『Oracle Fusion Middleware Oracle TopLinkソリューション・ガイド』のコンポジット永続性ユニットによる複数のデータベースの使用に関する項を参照してください。
マッピング情報は、実行中のアプリケーションの外部にあるメタデータ・ソースに格納できます。マッピング情報は、アプリケーションが永続性ユニットを作成するときに取得されるので、デプロイされたアプリケーションで動的にマッピングのオーバーライドまたは拡張を行えます。『Oracle Fusion Middleware Oracle TopLinkソリューション・ガイド』の外部メタデータ・ソースの使用に関する項を参照してください。
JPAアプリケーションは、Oracle Coherenceを使用してスケール・アウトできます。TopLink Gridは、Coherenceを分散共有(L2)キャッシュとして使用することから、JP QL問合せをCoherenceに送ってグリッド全体でパラレル実行してデータベース負荷を削減することまで、スケール・アウトに関する多数のオプションをアプリケーションに提供します。TopLink Gridでは、スケール・アウトするアプリケーションをリライトする必要はありません。JPAへの投資を使用したまま、Coherenceのスケーラビリティを利用できます。詳細は、Oracle Coherenceの統合のTopLink GridとOracle Coherenceの統合に関する項を参照してください。
この項では、このドキュメントに記載されているいくつかの主要概念の概要について説明します。この項で説明する主要概念は、次のとおりです。
EclipseLinkのメタデータは、アプリケーションの開発とデプロイされたランタイム環境の間の橋渡しをします。次のものを使用して、メタデータを取得できます。
JavaファイルのJPA注釈、およびpersistence.xml
、eclipselink-orm.xml
およびorm.xml
ファイルのJPA定義プロパティ
メタデータは、persistence.xml
ファイルのEclipseLink JPA注釈およびプロパティ拡張機能によっても取得されます。eclipselink-orm.xml
ファイルは、JPA仕様には定義されていないプロパティ拡張機能を定義するためにも使用できます。
JavaファイルのJAXB注釈およびeclipselink-oxm.xml
ファイルのJAXB定義のプロパティ
eclipselink-oxm.xml
ファイルは、JAXB仕様には定義されていないプロパティ拡張機能を定義するためにも使用できます。
JavaおよびEclipseLinkのAPI
メタデータを通じて、構成情報をランタイム環境に渡すことができます。ランタイム環境では、Javaオブジェクト、JPAエンティティ、およびEclipseLink APIを使用して記述されたコードなどの永続クラスとともにこの情報を使用して、アプリケーションが完成します。詳細は、「注釈を使用したメタデータの追加」を参照してください。『Oracle Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス』も参照してください。
マッピングは、アプリケーションの外部に保存できます。これは、追加マッピング情報が指定されたeclipselink-orm.xml
またはeclipselink-oxm.xml
ファイルを、ファイルとしてWebサーバーで使用できるようにすれば簡単に行えます。マッピング情報を保存して、動的に情報を更新できるようにするサーバー・プロセスが関係するような複雑なものにすることもできます。詳細は、EclipseLinkドキュメントの『EclipseLink/Examples/JPA/MetadataSource』を参照してください。
http://wiki.eclipse.org/EclipseLink/Examples/JPA/MetadataSource
エンティティは、永続性ドメイン・オブジェクトです。一般的に、エンティティはリレーショナル・データベースの表を表現し、各エンティティ・インスタンスはその表の行に相当します。エンティティの主なプログラミング・アーティファクトはエンティティ・クラスですが、各エンティティはヘルパー・クラスを使用できます。
エンティティの永続状態は、永続フィールドまたは永続プロパティを通じて表現されます。これらのフィールドまたはプロパティでは、オブジェクト/リレーショナル・マッピングの注釈を使用して、エンティティおよびエンティティ関係を、基礎となるデータ・ストアのリレーショナル・データにマップします。
第4章「エンティティの理解」を参照してください。
ディスクリプタは、Javaクラスをデータ・ソース表現に関連付ける方法を記述したものです。ディスクリプタは、オブジェクト・クラスをデータ・ソースに、データ・モデル・レベルで関連付けます。たとえば、永続クラス属性はデータベース列にマップされます。
EclipseLinkでは、ディスクリプタを使用して、あるデータ・ソースで特定クラスのインスタンスがどのように表現されるかを定義した情報を格納します。ディスクリプタは、EclipseLinkによって内部的に使用され、注釈、XMLまたはIDE (JDeveloperやEclipseなど)を通じて定義され、実行時に読み取られます。
第6章「ディスクリプタの理解」を参照してください。
マッピングは、個々のオブジェクト属性をデータ・ソース表現と関連付ける方法を記述したものです。マッピングには、複雑なトランスフォーメーションまたは直接エントリを指定することができます。
EclipseLinkでは、マッピングを使用して、オブジェクトとデータ・ソース表現の間でデータをどのように変換するかを決定します。マッピングは、EclipseLinkによって内部的に使用され、注釈、XMLまたはIDE (JDeveloperなど)を通じて定義され、実行時にプロジェクトXMLファイルから読み取られます。
第7章「マッピングの理解」を参照してください。
データ・ソース・プラットフォームには、バインディング、ネイティブSQLの使用、バッチ書込みの使用、順序付けなどの特定のデータ・ソースに固有のオプションが含まれます。
EclipseLinkでは、OracleおよびOracle以外の多くのデータ・ソース・プラットフォームがサポートされます。
第8章「データ・アクセスの理解」を参照してください。
EclipseLinkキャッシュは、クラスと主キーの値に基づいて最近読み取られたり書き込まれたオブジェクトが格納される、インメモリー・リポジトリです。キャッシュは、データベースとの不要な通信を回避し、ロックおよびキャッシュの分離レベルを制御し、オブジェクト・アイデンティティを管理することでパフォーマンスを向上するために使用します。
第9章「キャッシュの理解」を参照してください。
リレーショナルや非リレーショナルのデータ・ソースに対して、Java EEおよびJava EE以外のアプリケーションの両方で問合せを使用して、永続オブジェクトまたはデータを作成、読取り、更新および削除できます。問合せは、オブジェクト・レベルまたはデータ・レベルで作成できます。
Java Persistence Query Language (JPQL)、SQL、式フレームワークなどの複数の問合せ言語がサポートされます。また、Java Persistence Criteria APIを使用すると、JPQLの文字列ベースのアプローチを使用せずに、オブジェクトベースの問合せ定義オブジェクトを構成して動的問合せを定義できます。
第10章「問合せの理解」を参照してください。
EclipseLinkの式フレームワークを使用すると、ドメイン・オブジェクト・モデルに基づいて問合せの検索基準を指定できます。式には、SQLより優れた点が多くあります。たとえば、式は管理が簡単で、ディスクリプタやデータベース表を変更してもアプリケーションの問合せ構造に影響せず、Query
インタフェースの標準化によって可読性が向上し、複雑な操作が簡略化されます。
第11章「EclipseLinkの式の理解」を参照してください。
NoSQLは、SQL標準をサポートしないデータベース・システムの類型です。これには、ドキュメント・データベース、キー/値ストア、および他の様々な非標準データベースが含まれます。Java Persistence API (JPA)を通じて、NoSQLデータベースに対するJavaオブジェクトの永続化がサポートされます。EclipseLinkのネイティブAPIも、NoSQLデータベースでサポートされます。
第12章「非リレーショナル・データ・ソースの理解」を参照してください。
アプリケーションのパフォーマンスを測定し、最適化するための様々な機能が用意されています。ほとんどの機能はディスクリプタまたはセッションで有効/無効を切り替えることができるため、グローバルなパフォーマンスの向上が可能になります。パフォーマンスのプロファイリングとパフォーマンス、フェッチ・グループおよび問合せの監視のためのツールが提供されています。
第13章「パフォーマンスの監視およびプロファイリングの理解」を参照してください。
図1-1に、TopLinkに含まれているコンポーネントを示します。次の項ではコンポーネントについて説明します。
EclipseLink Coreは、ランタイム・コンポーネントを提供します。ランタイムには、EclipseLink API経由で直接アクセスできます。ランタイム環境は、独立プロセスまたは外部プロセスではなく、アプリケーション内に埋め込まれています。EclipseLinkは、アプリケーション・コールによって起動され、永続データを操作できるようにします。この機能により、共有データベース接続およびキャッシュされたオブジェクトへのスレッド・セーフなトランザクション・アクセスが可能になります。
EclipseLink APIには、JPA 2.0 (JSR-317)のリファレンス実装が用意されています。org.eclipse.persistence.*
クラスは、EclipseLinkのAPIをカプセル化して、仕様には定義されていない拡張機能を提供します。これらの拡張機能には、EclipseLink固有のプロパティと注釈が含まれています。API、プロパティおよび拡張機能の詳細は、『Oracle Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス』を参照してください。
JAXB APIは、Java SE 6に含まれます。eclipselink.jar
ファイルで、org.eclipse.persistence.jaxb.*
クラスは、JAXBに対するEclipseLinkのサポートをカプセル化します。
TopLink Grid APIは、toplink-grid.jar
ファイルに含まれます。oracle.eclipselink.coherence.*
クラスは、TopLink Gridに対するEclipseLinkのサポートをカプセル化します。
oracle.toplink.*
クラスによって表現されていたTopLink Essentialsの古い永続性API (JPA 1の実装)は、TopLinkから削除され、EclipseLinkに置き換えられました。同様にoracle.toplink.*
クラスによって表現されていた古いネイティブTopLink API (JPA以前のマッピングおよび永続性API)は、EclipseLinkのパッケージ名を使用してEclipseLinkに再実装されています。
JPAは、Java永続性を簡略化します。これには、Javaオブジェクトをリレーショナル・データベース表に標準的で移植性の高い方法でマップする方法を宣言で定義できるようにするオブジェクト・リレーショナル・マッピングのアプローチが用意されています。JPAは、Java EEアプリケーション・サーバーの内部およびJava Standard Edition (Java SE)アプリケーションのEJBコンテナの外部の両方で動作します。2.0 JPAの更新に含まれている主な機能は、次のとおりです。
オブジェクト/リレーショナル・マッピング機能の拡張
埋込みオブジェクト・コレクションのサポート
複数レベルの埋込みオブジェクト
順序付けられたリスト
アクセス・タイプの組合せ
基準問合せAPI
問合せ「ヒント」の標準化
DDL生成をサポートするための追加メタデータの標準化
検証のサポート
MOXyとも呼ばれるObject-XMLは、JavaクラスをXMLスキーマにバインドできるようにするEclipseLinkコンポーネントです。Object-XMLは、注釈を通じてマッピング情報を提供できるJAXBを実装しています。XML形式でマッピングを格納する方法のサポートは、MOXyによって提供されます。提供されている多数の高度なマッピングによって、Javaクラス・モデルでスキーマをミラーリングしなくても、複雑なXML構造を処理できます。
EclipseLink JAXBコンパイラで生成されるオブジェクトは、Java POJOモデルです。これらは、JAXB仕様で要求されている必要な注釈を使用して生成されます。JAXBランタイムAPIを使用すれば、オブジェクトをマーシャリングおよびアンマーシャリングできます。
Object-XMLをJAXBプロバイダとして使用する際には、既存のオブジェクト・モデルをXMLに変換するためのメタデータは不要です。モデルのXML表記を微調整する必要がある場合にのみ、(注釈またはXMLを使用して)メタデータを指定できます。
EclipseLink Object-XMLを使用して、次の方法でXMLを操作できます。
XMLスキーマからのJavaモデルの生成
EclipseLink MOXy JAXBランタイムの指定
JAXBを使用したXMLの操作
JavaモデルからのXMLスキーマの生成
Object-XMLおよびそれらの使用例の詳細は、『Oracle Fusion Middleware Oracle TopLinkによるJAXBアプリケーションの開発』を参照してください。
EclipseLinkでは、オブジェクト・モデルがXMLスキーマにマップされる方法を制御できるようにしながら、最大限の柔軟性を実現しています。自分のオブジェクト・モデルを制御できることには、多くの利点があります。
適切なパターンおよびプラクティスを使用して、ドメイン・クラスを自分のアプリケーション専用に設計できます。
XPathベースのマッピングを使用できます。これにより、クラスとXMLスキーマ・タイプの間に1対1の関係が必要なくなります。詳細は、『Oracle Fusion Middleware Oracle TopLinkによるJAXBアプリケーションの開発』を参照してください。
アプリケーションに適切な方法でオブジェクトをインスタンス化できます。
自分のクラスパスの依存性を制御できます。ほとんどのJAXB実装では、クラス・パスの依存性をアプリケーションに追加するために生成されるクラスに、ベンダー固有コードを配置します。
EclipseLinkの主な利点の1つは、マッピング情報を外部に保存できるので、JavaクラスやXMLスキーマを変更する必要がないことです。つまり、ドメイン・オブジェクトを複数のスキーマにマップできます(または、スキーマが変更された場合には、ドメイン・クラスを変更するかわりに、マッピング・メタデータを更新できます)。サード・パーティのクラスをマッピングする際には、ソースにアクセスして注釈を追加できないこともあるため、その場合にも便利です。
Service Data Objects (SDO)コンポーネントには、Service Data Objectsバージョン2.1.1のリファレンス実装が用意されています。リファレンス実装は、JSR-235に記載されています。SDOの実装には、リファレンス実装が組み込まれており、JavaオブジェクトからXMLへの変換、およびサービス・アーキテクチャに組み込めるデータ・オブジェクト・モデルの作成や使用に主に使用する追加機能が提供されています。
SDOでは、次の機能が提供されます。
SDO APIの使用
XMLスキーマの変換
SDOで使用するためのXSDのカスタマイズ
動的データ・オブジェクトを使用したXMLの操作
静的データ・オブジェクトの使用
SDOコンパイラの実行: タイプ・セーフなデータ・オブジェクトの生成
タイプ・セーフなデータ・オブジェクトを使用したXMLの操作
詳細は、EclipseLinkドキュメントの『Getting Started with EclipseLink SDO』を参照してください。
データベースWebサービス(DBWS)では、Webサービスを使用して、リレーショナル・データベース・アーティファクトに簡単かつ効率的にアクセスできます。Javaコードを記述しなくても、データベースに対して、クライアントに中立なJava EE準拠のアクセスが可能になります。DBWSでは、既存のORMおよびOXMコンポーネントを使用しながら、EclipseLinkのコア機能を拡張します。
DBWSには、サービス・ディスクリプタ(および関連するデプロイメント・アーティファクト)を使用して、それをJAX-WS 2.0 Webサービスとして実現するランタイム・プロバイダ・コンポーネントがあります。ランタイム・プロバイダは、EclipseLinkを使用して、Webサービス・クライアントが使用するXML SOAPメッセージとデータベース間の橋渡しをします。DBWSアーキテクチャの詳細は、Oracle Fusion Middleware Oracle TopLink Database Webサービスによる永続性アーキテクチャの開発の開発者ガイドを参照してください。
Oracle Coherence (Coherence)を使用してJPAアプリケーションをスケール・アウトし、グリッドに書き込み、グリッドをデータ・ソースとして扱えます。TopLink Gridは、Coherenceを分散共有(L2)キャッシュとして使用することから、JPQL問合せをCoherenceに送ってグリッド全体でパラレル実行してデータベース負荷を削減することまで、スケール・アウトに関する多数のオプションをアプリケーションに提供します。TopLink Gridでは、スケール・アウトするアプリケーションをリライトする必要はありません。
TopLink Gridは、EclipseLink JPA実装とOracle Coherenceとを統合するもので、次の開発アプローチを提供します。
Coherence APIをTopLink Gridによって支援されたキャッシュとともに使用して、JPAに対して実装された特殊なキャッシュ・ローダーおよびキャッシュ・ストア・インタフェースでリレーショナル・データにアクセスできます。
JPAを使用してアプリケーションを構築し、データ・グリッドの機能を透過的に使用してスケーラビリティとパフォーマンスを向上させることができます。このような「グリッド基盤のJPA」アプローチにおいては、TopLink Gridが、キャッシュのセットと、EclipseLinkのJPA実装でのCoherenceの使用方法を制御できる問合せ構成オプションを提供します。
注意: TopLink Gridの機能は、 |
この項では、Oracle JDeveloper、Oracle Enterprise Pack for Eclipse、EclipseおよびNetBeans開発環境によって提供されるTopLinkのサポートについて説明します。どのツールもTopLinkと互換性がありますが、それぞれ特定の統合方法があります。
この項の内容は次のとおりです。
Oracle JDeveloperは、E-BusinessアプリケーションとWebサービスの開発、デバッグおよびデプロイをエンドツーエンドでサポートするJava EE開発環境です。
JDeveloperの詳細およびダウンロードは、次を参照してください。
http://www.oracle.com/us/products/tools/019657.htm
JDeveloperには、EclipseLinkを使用するアプリケーションの開発を支援する多くの機能が含まれています。これらの機能には、データベース表からJPAエンティティをリバース・エンジニアリングし、EntityManager
が挿入されたEJB 3.0セッションBeanを生成するウィザードが含まれています。これには、JPAエンティティを問い合せるメソッドも含まれ、クライアントの生成をテストできます。
JDeveloperのツールを使用すると、JavaクラスおよびJPAエンティティを迅速かつ容易に構成し、コードを使用せずに、リレーショナル・データベースやXMLスキーマなどの様々なデータ・ソースにマップできます。
EclipseLinkインストールに含まれているDBWSBuilderスクリプトを使用すると、DBWSBuilderユーティリティを実行してWebサービスを生成できます。JDeveloperは、付属のAPIを使用しますが、DBWSBuilderスクリプトは直接使用しません。
Oracle JDeveloperのTopLinkサポートの詳細は、JDeveloperのオンライン・ヘルプを参照してください。
Oracle Enterprise Pack for Eclipse (OEPE)は、Eclipseが優先IDEである場合に、Java EEの開発をサポートするように設計された一連のプラグインです。
OEPEの詳細およびダウンロードは、次を参照してください。
http://www.oracle.com/technetwork/developer-tools/eclipse/overview/index.html
OEPEは、EclipseLinkのJPA実装を使用する永続層を作成するために、次のタスクを完了できるように支援します。
JPAプロジェクトに対する永続性プロバイダの構成。
OEPEには、Eclipse JPAプロジェクトで使用できるEclipseLinkプロジェクト・ファセットが用意されています。EclipseLinkプロジェクト・ファセットを選択すると、プロジェクトが次のように変更されます。
Oracle WebLogic Server 11gリリース1に同梱されているEclipseLink永続性プロバイダのJARファイルが含まれるようにプロジェクト・ビルド・パスが自動的に構成されます。Oracle WebLogic Serverの初期のバージョンにはライブラリ・ファイルが同梱されていませんが、ファセット構成ウィザードを使用してダウンロードできます。
Eclipse JPAプロジェクトのpersistence.xml
ファイルに、EclipseLink固有のデータベース接続プロパティを自動的に構成できます。
JPAエンティティの生成。
OEPEでは、OEPE JPAエンティティ生成ウィザードを使用してJPAエンティティを生成できます。
JavaクラスのXMLスキーマへのマップ。
OEPEでは、JAXBプロバイダとしてMOXyを使用し、JavaクラスをXMLスキーマにマップできます。
Javaクラスの注釈指定。
OEPEを使用すれば、データベース・スキーマに基づくJPA注釈を既存のJavaクラス(POJO)に指定できます。そうする際にEclipseでは、適切なアクセッサにJPA注釈が追加されます。
JPAエンティティ・ダイアグラム・エディタの使用。
OEPEには、JPAプロジェクト内のエンティティ関係を表示するためのグラフィカル・ユーザー・インタフェースが用意されています。エンティティ・ダイアグラム・エディタを使用すれば、エンティティ間の関係の表示および変更、エンティティ・ソース・コードへの容易なアクセス、追加のオブジェクト・リレーショナル・マッピングの作成を行えます。このエディタでは、エンティティとエンティティのフィールドの両方のプロパティを編集できます。また、永続性コンテキストを記述するpersistence.xml
ファイルも編集できます。
SQLスキーマ・ビューアの使用。
OEPEでは、データベース・スキーマ間の表および関係を表示するSQLスキーマ・ビューアを使用して、データベース・スキーマを調べることができます。このビューアでは、表ノードとして表が表示されます。各ノードには、表のすべての列が一覧表示され、列のデータ型が表示されます。また、ノードには、アイコンの形で、主キーと外部キーのインジケータも表示されます。表の間の外部キーの関係は、矢印の形で、リンクによって表されます。
Eclipse IDEには、JPAを使用するアプリケーションの作成、実行および保守を支援する多くの機能とユーティリティが用意されています。OEPEをインストールすると、これらの機能が拡張されます。
Eclipse IDEの詳細およびダウンロードは、次を参照してください。
http://www.oracle.com/technetwork/developer-tools/eclipse/overview/index.html
Dali Java永続性ツール・プロジェクトには、JPAエンティティのオブジェクト・リレーショナル・マッピングの定義および編集用の拡張可能なフレームワークとツールが用意されています。JPAマッピングのサポートは、エンティティ生成ウィザード、デザインタイム検証、エンティティと永続性ユニット構成用の高機能UIを提供することにより、マッピングの複雑さを最小限に抑えることを目的としています。
Daliの詳細およびダウンロードは、次を参照してください。
http://www.eclipse.org/webtools/dali
オラクル社、オープン・ソースおよびサード・パーティ・ベンダー・コミュニティが提供するその他のツールおよびユーティリティは、Eclipse Marketplaceで入手できます。
NetBeans IDEには、TopLinkを含むOracle GlassFish Serverがバンドルされています。このIDEでは、JPAベースのコード環境が完全にサポートされています。このサポートには、エンティティを作成するためのエンティティ・クラス・ウィザード、およびエンティティがJPA仕様に準拠していることを確認するためのエディタ・ヒントが含まれています。NetBeansには、persistence.xml
ファイルを作成するための永続性ユニット・エディタも用意されています。
NetBeansの詳細およびダウンロードは、次を参照してください。