Fusion Middleware Oracle TopLinkコンセプト

11g リリース1(11.1.1)

B66434-01(原本部品番号:E26045-01)

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 一般的な概念

- 1.1 TopLinkとは

- 1.1.1 オブジェクトと永続データのインピーダンス・ミスマッチとは

- 1.1.2 TopLinkのソリューション

- 1.2 TopLinkの主な機能

- 1.3 TopLinkのメタデータ

- 1.4 TopLinkのコンポーネント

- 1.4.1 EclipseLink Core

- 1.4.2 オブジェクト・リレーショナル(JPA 2.0)

- 1.4.3 Object-XML (JAXB)

- 1.4.3.1 TopLink SDO

- 1.4.4 データベースWebサービス(DBWS)

- 1.4.5 TopLink Grid

- 1.5 TopLinkアプリケーションのアーキテクチャ

- 1.5.1 3層アーキテクチャ

- 1.5.1.1 EJBセッションBeanファサード

- 1.5.2 Java SEまたはシック・クライアント

- 1.5.3 Webサービス

- 1.5.4 TopLinkデータベースWebサービス

- 1.6 マッピング

- 1.6.1 リレーショナル・マッピング

- 1.6.2 オブジェクト・リレーショナル・データ・タイプ・マッピング

- 1.6.3 Object-XMLのデータ型マッピング

- 1.7 TopLink/EclipseLinkのAPI

2 TopLinkプロジェクトのビルディング・ブロック

- 2.1 オブジェクト・リレーショナル・マッピングのビルディング・ブロック

- 2.1.1 オブジェクト・リレーショナル・エンティティ・アーキテクチャ

- 2.1.1.1 エンティティ

- 2.1.1.2 永続性と永続性ユニット

- 2.1.1.3 エンティティ・マネージャ

- 2.1.2 注釈を使用したメタデータの追加

- 2.1.3 構成ファイル

- 2.1.3.1 デフォルトの構成値について

- 2.1.3.2 persistence.xmlを使用した永続性ユニットの構成

- 2.1.3.3 eclipselink-orm.xmlを使用したTopLinkオブジェクト・リレーショナル・マッピングの指定

- 2.1.4 データ・ソース

- 2.1.5 TopLinkのキャッシュ

- 2.1.5.1 キャッシュ動作の定義

- 2.1.5.2 クラスタ環境でのキャッシング

- 2.1.6 データベース問合せ

- 2.1.6.1 JPQL

- 2.1.6.2 基準問合せ

- 2.1.6.3 問合せヒント

- 2.1.6.4 TopLinkの高度なネイティブ問合せサポート

- 2.2 Object-XMLマッピングのビルディング・ブロック

- 2.2.1 JAXBプロバイダとしてのTopLink Object-XMLの使用

- 2.2.2 Object-XMLのアーキテクチャ

- 2.2.2.1 JAXBコンテキストおよびJAXBコンテキスト・ファクトリ

- 2.2.3 Object-XMLに対するメタデータの提供

- 2.2.4 XMLバインディング

- 2.2.5 eclipselink-oxm.xmlを使用したTopLink Object-XMLマッピングの指定

- 2.2.6 XPathによるオブジェクトの問合せ

3 TopLinkの開発ツール

- 3.1 Oracle JDeveloper

- 3.2 Oracle Enterprise Pack for Eclipse

- 3.3 Eclipse

- 3.4 NetBeans

Oracle® Fusion Middleware

Oracle TopLinkコンセプト

11g リリース1(11.1.1)

B66434-01(原本部品番号:E26045-01)

2011年11月

このドキュメントでは、Oracle TopLinkを構成するコンポーネントおよびテクノロジに関する概念を説明します。

Oracle Fusion Middleware Oracle TopLinkコンセプト, 11g リリース1 (11.1.1)

B66434-01

Copyright © 2002, 2011, Oracle and/or its affiliates.All rights reserved.

原本著者:  Thomas Pfaeffle

原本協力著者:  Doug Clarke、Blaise Doughan、Peter Krogh、Gordon Yorke

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントが、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供される場合は、次のNoticeが適用されます。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、このソフトウェアまたはハードウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle およびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはX/Open Company, Ltd.によってライセンス提供された登録商標です。

このソフトウェアまたはハードウェアおよびドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

はじめに

Oracle TopLinkは、オブジェクト指向のプログラムをリレーショナル・データ構造にリンクします。TopLinkを使用すれば、リレーショナル・データベースに永続オブジェクト指向データを格納する、パフォーマンスの高いアプリケーションを作成できます。TopLinkでは、オブジェクト指向データが、リレーショナル・データまたはXML文書に変換されます。TopLinkを使用すると、効率的で柔軟性が高く、使用実績のあるソリューションを利用して、本来の業務上の課題に専念しながら、永続性およびオブジェクト変換をアプリケーションに統合できます。

対象読者

このドキュメントは、TopLinkおよびその機能の概念の詳細を理解する必要があるアプリケーション開発者および管理者向けに用意されています。

ドキュメントのアクセシビリティについて

オラクル社のアクセシビリティへの取組みの詳細は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

Oracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoまたはhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs (聴覚障害者向け)を参照してください。

関連ドキュメント

詳細は、Oracle TopLinkのドキュメント・セットに含まれる次のドキュメントを参照してください。

- Oracle TopLinkのソリューション・ガイド

- Oracle Fusion Middleware EclipseLink Java APIリファレンス

- http://wiki.eclipse.org/EclipseLink/UserGuide/のEclipseLink Documentation Center

- Oracle Fusion Middleware Linux x86リリース・ノートのOracle TopLink

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 一般的な概念

この章は次の項で構成されています:

- 1.1項「TopLinkとは」

- 1.2項「TopLinkの主な機能」

- 1.3項「TopLinkのメタデータ」

- 1.4項「TopLinkのコンポーネント」

- 1.5項「TopLinkアプリケーションのアーキテクチャ」

- 1.6項「マッピング」

- 1.7項「TopLink/EclipseLinkのAPI」

1.1 TopLinkとは

Oracle TopLinkは、オブジェクト指向のプログラムをリレーショナル・データ構造にリンクします。TopLinkを使用すれば、リレーショナル・データベースに永続オブジェクト指向データを格納する、パフォーマンスの高いアプリケーションを作成できます。TopLinkでは、オブジェクト指向データが、リレーショナル・データまたはXML文書に変換されます。効率的で柔軟性が高く、使用実績のあるソリューションを利用して、本来の業務上の課題に専念しながら、永続性およびオブジェクト変換をアプリケーションに統合できます。

TopLinkにはEclipseLinkが含まれています。EclipseLinkには、JPA仕様のオープン・ソースの実装に加えて、Java Persistence API (JPA)およびJava API for XML Binding (JAXB)の仕様には定義されていない拡張機能が含まれています。これらの拡張機能には、永続性ユニットのプロパティ、問合せヒント、注釈、TopLink独自のXMLメタデータおよびカスタムAPIが含まれています。TopLinkの内容の詳細は、1.4項「TopLinkのコンポーネント」を参照してください。

TopLinkは、様々なJava Enterprise Edition (Java EE)およびJavaアプリケーションのアーキテクチャで使用できます(1.5項「TopLinkアプリケーションのアーキテクチャ」を参照)。TopLinkは、次に列挙した形式を含む、様々なデータ・ソースおよび形式をサポートする高度なオブジェクト永続性およびオブジェクト変換レイヤーを設計、実装、デプロイ、および最適化するために使用します。

- リレーショナル: Java Database Connectivity(JDBC)ドライバを使用してアクセスするリレーショナル・データベースへの、Javaオブジェクトのトランザクション永続性を可能にします。

- オブジェクト・リレーショナル・データ・タイプ: Oracle Databaseなど、オブジェクト・リレーショナル・データ・タイプ・データベースに格納するために最適化された特別な構造を持つデータ・ソース表現への、Javaオブジェクトのトランザクション永続性を可能にします。

- Object-XML: JAXBを使用して、JavaオブジェクトとXMLスキーマ・ドキュメント(XSD)ベースのXMLドキュメントの間で、非トランザクションの非永続(インメモリー)変換を行うために使用します。

TopLinkは、Java EEおよびJava SE環境でEnterprise JavaBeans (EJB) 3.0をサポートします。このサポートには、Oracle WebLogic Server、Glassfish Server、IBM WebSphereアプリケーション・サーバーなどの多様なアプリケーション・サーバーとの統合も含まれます。

Oracle JDeveloper TopLinkエディタを含め、TopLinkが提供する広範な開発ツールにより、柔軟で効果的なメタデータ書式でのオブジェクトからデータ・ソースへのマッピング、およびオブジェクトからデータ表現へのマッピングをすみやかに取得および定義できます。

TopLinkのランタイムでは、このマッピング・メタデータを自分のアプリケーションに活用できます。これには、データ・アクセス、問合せ、(外部トランザクション・コントローラを使用する、および使用しない)トランザクション、キャッシングなどを詳細にサポートできる、シンプルなセッション・ファサードを使用できます。

TopLinkの詳細は、1.2項「TopLinkの主な機能」を参照してください。

1.1.1 オブジェクトと永続データのインピーダンス・ミスマッチとは

Javaとデータ・ソースの統合は、エンタープライズJavaアプリケーションの作成時には非常に軽視されている問題です。この複雑な問題は、単なるデータ・ソースに対する読取りおよび書込みにとどまりません。データ・ソースの要素には表、行、列、主キー、外部キーがあります。JavaおよびJava EEプログラミング言語には、エンティティ・クラス(標準JavaクラスまたはEJBエンティティBean)、ビジネス・ルール、複合リレーションおよび継承があります。非リレーショナル・データ・ソースでは、JavaエンティティをXML要素とスキーマに一致させる必要があります。

解決を成功させるには、これらの異なるテクノロジ間の橋渡し、およびオブジェクトと永続データのインピーダンス・ミスマッチの解決が必要ですが、これは多くのリソースを要する難しい課題です。この課題を解決するには、Java EEとデータ・ソース要素の間に横たわる次の問題を解決する必要があります。

- 根本的に異なるテクノロジ

- 異なるスキル群

- テクノロジごとに異なるスタッフおよび所有物

- 異なるモデリングおよび設計の原理

アプリケーション開発者には、理想的なアプリケーション設計またはデータの整合性を損わずに、Javaアプリケーションとすべてのデータ・ソースを統合できる製品が必要です。また、Java開発者には、リレーショナル・データベースまたは非リレーショナル・データ・ソースをリポジトリとして使用して、ビジネス・ドメイン・オブジェクトを格納(永続化)および取得する機能が必要です。

1.1.2 TopLinkのソリューション

TopLinkは、Javaオブジェクトとデータ・ソースの不一致を解決します。TopLinkは、リレーショナル、オブジェクト・リレーショナル・データ・タイプ、およびXMLマッピングをシームレスに管理する永続化フレームワークです。これにより、開発者はオブジェクト・テクノロジと各データ・ソースの最もよい面を兼ね備えたアプリケーションを短期間で作成できます。TopLinkでは、次のことが可能です。

- JDBC準拠のリレーショナル・データベースでサポートされている事実上すべてのリレーショナル・データベースにJavaオブジェクトを永続化できます。

- JAXBを使用して、JavaオブジェクトとXMLスキーマ(XSD)ベースのXMLドキュメントの間のインメモリー変換を実行できます。

- Oracle JDeveloper TopLinkエディタを使用して、任意のリレーショナルまたは非リレーショナル・スキーマにオブジェクト・モデルをマップできます。

- JDeveloper DBWSBuilderを使用して、TopLink DBWSサービス・ディスクリプタおよび付随するファイルを生成できます。

- TopLinkには、データ・ソースの見やすいオブジェクト指向ビューが用意されているので、SQLまたはJDBCに詳しくない場合でもTopLinkを正しく使用できます。

1.2 TopLinkの主な機能

TopLinkには、広範な機能セットが用意されています。これらの機能を使用して、スケーラブルでメンテナンス性の高い、高パフォーマンスのエンタープライズ・アプリケーションを短期間で作成できます。

TopLinkの主な機能には、次のものがあります。

- 非侵入的で柔軟なメタデータベース・アーキテクチャ

- アーキテクチャの柔軟性: Plain Old Java Objects (POJO)、およびEclipseLinkで提供されるJPA、JAXB、Service Data Objects (SDO)およびWebサービス

- 高度なマッピング・サポートと柔軟性: リレーショナル、オブジェクト・リレーショナル・データ型、およびXML

- 幅広いパフォーマンス・チューニング・オプションによる、スケーラビリティに優れたパフォーマンスおよび同時実行性を実現する最適化

- Oracle Application Serverなどの一部のアプリケーション・サーバーのクラスタの統合を含む、包括的なオブジェクト・キャッシュのサポート

- 広範な問合せ機能: TopLinkの式フレームワーク、Java Persistence Query Language(JPQL)、Enterprise JavaBeans Query Language(EJB QL)、ネイティブSQLなど

- ジャストインタイム方式の読取り

- オブジェクトレベルのトランザクション・サポートと広く使用されているサーバーおよびデータベースとの統合

- オプティミスティック/ペシミスティック・ロック・オプションおよびロック・ポリシー

- 包括的なビジュアル設計ツール: Oracle JDeveloper TopLinkエディタおよびEclipse Dali

詳細およびダウンロードは、TopLinkのホーム・ページを参照してください。

http://www.oracle.com/technology/products/ias/toplink/index.html

1.3 TopLinkのメタデータ

TopLinkのメタデータは、アプリケーションの開発とデプロイされたランタイム環境の間の橋渡しをします。次のものを使用して、メタデータを取得できます。

- JavaファイルのJPA注釈、およびpersistence.xml、eclipselink-orm.xmlおよびorm.xmlファイルのJPA定義プロパティメタデータは、persistence.xmlファイルのTopLink JPA注釈およびTopLinkプロパティ拡張機能によっても取得されます。eclipselink-orm.xmlファイルは、JPA仕様には定義されていないTopLinkプロパティ拡張機能を定義するためにも使用できます。

- JavaファイルのJAXB注釈およびeclipselink-oxm.xmlファイルのJAXB定義のプロパティeclipselink-oxm.xmlファイルは、JAXB仕様には定義されていないTopLinkプロパティ拡張機能を定義するためにも使用できます。

- JavaおよびEclipseLinkのAPI

メタデータを通じて、構成情報をランタイム環境に渡すことができます。ランタイム環境では、Javaオブジェクト、JPAエンティティ、およびTopLink APIを使用して記述されたコードなどの永続クラスとともにこの情報を使用して、アプリケーションが完成します。詳細は、2.1.2項「注釈を使用したメタデータの追加」を参照してください。

マッピングは、アプリケーションの外部に保存できます。これは、追加マッピング情報が指定されたeclipselink-orm.xmlまたはeclipselink-oxm.xmlファイルを、ファイルとしてWebサーバーで使用できるようにすれば簡単に行えます。マッピング情報を保存して、動的に情報を更新できるようにするサーバー・プロセスが関係するような複雑なものにすることもできます。詳細は、EclipseLinkドキュメントの『EclipseLink/Examples/JPA/MetadataSource』を参照してください。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/MetadataSource

1.4 TopLinkのコンポーネント

図1-1に、Oracle TopLinkに含まれているコンポーネントを示します。次の項ではコンポーネントについて説明します。

図1-1 TopLinkのコンポーネント

「図1-1 TopLinkのコンポーネント」の説明

1.4.1 EclipseLink Core

EclipseLink Coreは、EclipseLinkのランタイム・コンポーネントを提供します。ランタイム・コンポーネントには、EclipseLink API経由で直接アクセスできます。ランタイム環境は、独立プロセスまたは外部プロセスではなく、アプリケーション内に埋め込まれています。EclipseLinkは、アプリケーション・コールによって起動され、永続データを操作できるようにします。この機能により、共有データベース接続およびキャッシュされたオブジェクトへのスレッド・セーフなトランザクション・アクセスが可能になります。詳細は、1.7「TopLink/EclipseLinkのAPI」を参照してください。

1.4.2 オブジェクト・リレーショナル(JPA 2.0)

Java EE EJB 3.0仕様の一部であるJPAでは、Javaの永続性が大幅に簡素化されています。これには、Javaオブジェクトをリレーショナル・データベース表に標準的で移植性の高い方法でマップする方法を宣言で定義できるようにするオブジェクト・リレーショナル・マッピングのアプローチが用意されています。JPAは、Java EEアプリケーション・サーバーの内部およびJava Standard Edition (Java SE)アプリケーションのEJBコンテナの外部の両方で動作します。2.0 JPAの更新に含まれている主な機能は、次のとおりです。

- オブジェクト/リレーショナル・マッピング機能の拡張

- 埋込みオブジェクト・コレクションのサポート

- 複数レベルの埋込みオブジェクト

- 順序付けられたリスト

- アクセス・タイプの組合せ

- 基準問合せAPI

- 問合せ「ヒント」の標準化

- DDL生成をサポートするための追加メタデータの標準化

- 検証のサポート

1.4.3 Object-XML (JAXB)

MOXyとも呼ばれるObject-XMLは、JavaクラスをXMLスキーマにバインドできるようにするTopLinkコンポーネントです。Object-XMLではJAXBが実装されるので、注釈でマッピング情報を提供でき、マッピングをXML形式で保存できます。提供されている多数の高度なマッピングにより、Javaクラス・モデルでスキーマをミラーリングしなくても、複雑なXML構造を処理できます。

TopLink JAXBコンパイラで生成されるオブジェクトはJava POJOモデルです。これらは、JAXB仕様で必須のインタフェースを実装しています。JAXBランタイムAPIを使用すれば、オブジェクトをマーシャリングおよびアンマーシャリングできます。

Object-XMLをJAXBプロバイダとして使用する際には、既存のオブジェクト・モデルをXMLに変換するためのメタデータは不要です。モデルのXML表記を微調整する必要がある場合にのみ、(注釈またはXMLを使用して)メタデータを指定できます。

TopLink Object-XMLを使用して、次の方法でXMLを操作できます。

- XMLスキーマからのJavaモデルの生成

- EclipseLink MOXy JAXBランタイムの指定

- JAXBを使用したXMLの操作

- JavaモデルからのXMLスキーマの生成

Object-XMLの詳細およびこれらのユース・ケースは、EclipseLinkドキュメントの『Getting Started with MOXy』を参照してください。

http://www.eclipse.org/eclipselink/moxy.php

TopLinkでは、オブジェクト・モデルがXMLスキーマにマップされる方法を制御できるようにしながら、最大限の柔軟性を実現しています。自分のオブジェクト・モデルを制御できることには、多くの利点があります。

- 適切なパターンおよびプラクティスを使用して、ドメイン・クラスを自分のアプリケーション専用に設計できます。

- XPathベースのマッピング。これにより、クラスとXMLスキーマ・タイプの間に1対1の関係が必要なくなります。詳細は、EclipseLinkドキュメントの『Mapping Simple Values』を参照してください。
http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy/Simple_Values/Single_Values/XMLDirectMapping

- アプリケーションに適切な方法で(つまり、デフォルト・コンストラクタを使用して)、オブジェクトをインスタンス化できます。

- 自分のクラス・パスの依存性を制御できます。ほとんどのJAXB実装では、クラス・パスの依存性をアプリケーションに追加するために生成されるクラスに、ベンダー固有コードを配置します。

TopLinkの主な利点の1つは、マッピング情報を外部に保存できるので、JavaクラスやXMLスキーマを変更する必要がないことです。つまり、ドメイン・オブジェクトを複数のスキーマにマップすることもできますし、スキーマが変更された場合には、ドメイン・クラスを変更するかわりに、単にマッピング・メタデータを更新することもできます。サードパーティのクラスをマッピングする際には、ソースにアクセスして注釈を追加できない場合もあるので、その場合にも便利です。注釈を使用してメタデータを指定することもできます。

1.4.3.1 TopLink SDO

Service Data Objects (SDO)コンポーネントには、Service Data Objectsバージョン2.1.1のリファレンス実装が用意されています。TopLink SDOの実装には、リファレンス実装が組み込まれており、JavaオブジェクトからXMLへの変換、およびサービス・アーキテクチャに組み込めるデータ・オブジェクト・モデルの作成や使用に主に使用する追加機能が提供されています。

TopLink SDOでは、次の機能が提供されます。

- SDO APIの使用

- XMLスキーマからSDOメタデータへの変換

- SDOで使用するためのXSDのカスタマイズ

- 動的データ・オブジェクトの使用

- 動的データ・オブジェクトの使用

- 動的データ・オブジェクトを使用したXMLの操作

- 静的データ・オブジェクトの使用

- SDOコンパイラの実行: タイプ・セーフなデータ・オブジェクトの生成

- タイプ・セーフなデータ・オブジェクトを使用したXMLの操作

詳細は、EclipseLinkドキュメントの『Getting Started with EclipseLink SDO』を参照してください。

http://www.eclipse.org/eclipselink/moxy.php

1.4.4 データベースWebサービス(DBWS)

TopLinkデータベースWebサービス(DBWS)では、Webサービスを使用して、リレーショナル・データベース・アーティファクトに簡単かつ効率的にアクセスできます。Javaコードを記述しなくても、データベースに対して、クライアントに中立なJava EE準拠のアクセスが可能になります。TopLink DBWSでは、既存のORMおよびOXMコンポーネントを利用しながら、TopLinkのコア機能を拡張しています。

TopLink DBWSには、デザインタイム・コンポーネント(DBWSBuilder)、およびいくつかのディスクリプタを(関連するデプロイメント・アーティファクトとともに)指定してJAX-WS 2.0 Webサービスとして実現するランタイム・プロバイダ・コンポーネントの2つの部分があります。ランタイム・プロバイダはEclipseLinkを使用して、Webサービス・クライアントが使用するXML SOAPメッセージとデータベースの間の橋渡しをします。DBWSアーキテクチャの詳細は、1.5.4項「TopLinkデータベースWebサービス」を参照してください。

1.4.5 TopLink Grid

Oracle TopLinkでは、Oracle Coherenceを使用してJPAアプリケーションをスケール・アウトして、グリッドに書込み、グリッドをデータ・ソースとして扱えます。TopLink Gridは、Coherenceを分散共有(L2)キャッシュとして使用することから、JPQL問合せをCoherenceに送ってグリッド全体でパラレル実行してデータベース負荷を削減することまで、スケール・アウトに関する多数のオプションをアプリケーションに提供します。TopLink Gridでは、スケール・アウトするアプリケーションをリライトする必要はありません。

TopLink GridはTopLink JPA実装(EclipseLink)とOracle Coherenceとを統合するもので、これらの開発アプローチを提供します。

- Coherence APIをTopLink Gridによって支援されたキャッシュとともに使用して、JPAに対して実装された特殊なキャッシュ・ローダーおよびキャッシュ・ストア・インタフェースでリレーショナル・データにアクセスできます。

- JPAを使用してアプリケーションを構築し、データ・グリッドの機能を透過的に使用してスケーラビリティとパフォーマンスを向上させることができます。このグリッド基盤のJPAアプローチでは、TopLink GridはTopLink JPAがCoherenceを使用する方法を制御できる一連のキャッシュおよび問合せ構成オプションを提供します。

注意:
TopLink Gridの機能は、toplink-grid.jarファイルによって提供されています。このファイルを使用できるのは、Oracle Coherenceもライセンスしている場合のみです。

1.5 TopLinkアプリケーションのアーキテクチャ

3層および2層アーキテクチャを含む様々なアプリケーション・アーキテクチャで(Java EEの有無を問わず)TopLinkを使用することで、リレーショナル・データ・ソースと非リレーショナル・データ・ソースの両方の各種データ・タイプにアクセスできます。

1.5.1 3層アーキテクチャ

3層(またはJava EE Web)アプリケーションは、最も一般的なTopLinkのアーキテクチャの1つです。このアーキテクチャの特徴は、ビジネス・ロジック、永続性エンティティ、Oracle TopLink Foundation Libraryがすべて1つのJava仮想マシン(JVM)に存在していることです。

このアーキテクチャの最も一般的な例は、クライアント・ブラウザがサーブレット、JSP、およびHTMLを介してアプリケーションにアクセスする単純な3層アプリケーションです。プレゼンテーション層は、同じJVM内にある他のJavaクラスを介してTopLinkと通信し、必要な永続ロジックを提供します。このアーキテクチャでは、クラスタ化環境で複数のサーバーをサポートしますが、プレゼンテーション層と、TopLinkを使用して永続エンティティに対して永続ロジックを起動するコードとの間で、JVMに区別はありません。

1.5.1.1 EJBセッションBeanファサード

3層アプリケーションの一般的なバリエーションには、EJBセッションBeanでのビジネス・ロジック(TopLinkのアクセスなど)のラップがあります。このアーキテクチャはスケーラブルなデプロイを可能にし、ホスト・アプリケーション・サーバーからのトランザクション・サービスと統合されています。

プレゼンテーション層からの通信は、EJBセッションBeanへのコールを介して行われます。このアーキテクチャは、デプロイのためにアプリケーションを異なる層に分離します。セッションBeanアーキテクチャは、JavaオブジェクトまたはEJBエンティティBeanのいずれかを永続化できます。

1.5.2 Java SEまたはシック・クライアント

2層(またはクライアント/サーバー)アプリケーションは、アプリケーションがTopLinkに直接アクセスするアプリケーションです。ここで説明した他のアーキテクチャほど一般的ではありませんが、TopLinkでは、より小規模のアプリケーションまたは埋込みデータ処理のアプリケーションのために、このアーキテクチャをサポートしています。

1.5.3 Webサービス

Webサービス・アーキテクチャはWebまたはセッションBeanのアーキテクチャと類似しています。ただし、Webサービス・アーキテクチャでは、セッションBeanを使用せず(または使用する他に)、ビジネス・ロジック(サービス)をWebサービスにカプセル化します。Webサービス・アーキテクチャでは、クライアントはXMLを介してアプリケーションと通信します。

他のアーキテクチャの場合と同様に、TopLinkを使用して、リレーショナル・データ・ソースへオブジェクトを永続化できます。なお、Webサービス・アーキテクチャでは、TopLinkを使用して、Webサービスで使用するXMLスキーマか、またはWebサービスのXMLシリアライザとして使用するXMLスキーマへ、オブジェクト・モデルをマッピングすることもできます。

1.5.4 TopLinkデータベースWebサービス

TopLinkデータベースWebサービスのアーキテクチャはWebサービスのアーキテクチャと類似しています。ただし、TopLinkデータベースWebサービスのアーキテクチャでは、TopLinkを使用して、問合せ、DML文、ストアド・プロシージャ、ストアド・ファンクションなどのデータベース操作を公開するWebサービスを自動的に生成できます。TopLinkデータベースWebサービスを使用すれば、Javaコードを記述しなくても、クライアントに中立なJava EE準拠のアクセスをリレーショナル・データベースに対して行えます。

他のWebサービス・アーキテクチャと同様に、クライアントはSOAP (XML)メッセージを介してアプリケーションと通信します。ただし、TopLinkデータベースWebサービスのアーキテクチャで必要なのは、永続性クラスのXSDの指定のみです。クライアントで必要なのは、これらの永続性オブジェクトを作成、読取り、更新および削除するためにTopLinkデータベースWebサービスで公開されている操作の起動のみです。TopLinkデータベースWebサービスは、操作のタイプに応じて、オブジェクトまたは行セットのデータを返します。

1.6 マッピング

マッピングとは、オブジェクトまたはXMLスキーマを、対応するリレーショナル・データベース表に関連付けることです。TopLinkでは、オブジェクトの表現(Javaクラスなど)とデータ・ソースに固有の表現(データベース表など)との間でデータを変換できます。この変換はマッピングと呼ばれ、TopLinkプロジェクトの中核をなすものです。

マッピングはそれぞれ、ドメイン・オブジェクトの単一データ・メンバーに対応しています。マッピングによって、オブジェクト・データ・メンバーをそのデータ・ソース表現と関連付け、オブジェクトとデータ・ソースの間の双方向変換を実行する手段を定義します。

TopLinkは、様々なデータ・ソースに対するマッピングが注釈やXMLで指定された、メタデータ駆動型のマッピング・エンジンです。高度なユース・ケースでは、コードを記述または拡張して、マッピングが指定される場合もあります。

詳細は、1.6.2項「オブジェクト・リレーショナル・データ・タイプ・マッピング」および1.6.3項「Object-XMLのデータ型マッピング」を参照してください。

1.6.1 リレーショナル・マッピング

リレーショナル・マッピングは、オブジェクトのデータ・メンバー・タイプを、サポートされているリレーショナル・データベースの対応するリレーショナル・データベース(SQL)のデータ・ソース表現に変換します。リレーショナル・マッピングを使用すると、オブジェクト・モデルをリレーショナル・データ・モデルにマップできます。

また、リレーショナル・マッピングは、データベースの別の表に格納され、外部キーを介して関連付けられている他のドメイン・オブジェクトを参照するオブジェクト・データ・メンバーも変換できます。

1.6.2 オブジェクト・リレーショナル・データ・タイプ・マッピング

オブジェクト・リレーショナル・データ・タイプ・マッピングは、特定オブジェクトのデータ・メンバー・タイプを、Oracle Databaseのような特別なオブジェクト・リレーショナル・データベースでの格納に最適化された構造化データ・ソース表現に変換します。オブジェクト・リレーショナル・データ・タイプ・マッピングを使用すると、オブジェクト・モデルをオブジェクト・リレーショナル・モデルにマップできます。オブジェクト・リレーショナル・データ・タイプ・マッピングは、オブジェクト・リレーショナル・データ・タイプ・データ・ソース表現をサポートするために最適化された特別のオブジェクト・リレーショナル・データベースにのみ使用できます。

詳細は、EclipseLinkドキュメントの『Object-Relational Data Type Mappings』を参照してください。

http://wiki.eclipse.org/Object-Relational_Data_Type_Mappings_%28ELUG%29

1.6.3 Object-XMLのデータ型マッピング

XMLマッピングは、オブジェクトのデータ・メンバーを、構造がXMLスキーマ・ドキュメント(XSD)により定義されているXMLドキュメントのXML要素に変換します。様々なXMLマッピング・タイプを使用して、XMLの単純および複合型の組合せにJavaオブジェクトの属性をマップできます。

クラスは複合型にマップされ、オブジェクトの関係はXML要素にマップされ、単純属性はテキスト・ノードとXML属性にマップされます。強力なのは、オブジェクト属性をXML文書にマッピングする際に、XPath文を使用してXMLデータの場所が指定されることです。

TopLinkでは、クラスのディスクリプタに各クラスのXMLマッピングを格納します。TopLinkでは、ディスクリプタを使用してXMLドキュメントからマップされたオブジェクトをインスタンス化し、新規または変更済のオブジェクトをXMLドキュメントとして格納します。

TopLinkには、JPA仕様には定義されていないXMLマッピングが用意されています。Object-XMLの拡張機能には、TopLinkの注釈を介して使用できるものと、基礎となるメタデータに対するプログラムの変更が必要なものがあります。

これらのマッピングの詳細は、EclipseLinkドキュメントの『Mapping Simple Values』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy/Simple_Values/Single_Values/XMLDirectMapping#Mapping_to_an_Attribute

1.7 TopLink/EclipseLinkのAPI

TopLinkのEclipseLink APIコンポーネントには、JPA 2.0 (JSR-317)のリファレンス実装が用意されています。org.eclipse.*クラスは、EclipseLinkのAPIをカプセル化して、仕様には定義されていない拡張機能を提供します。これらの拡張機能には、EclipseLink固有のプロパティと注釈が含まれています。API、プロパティおよび拡張機能の詳細は、Oracle Fusion Middleware EclipseLink Java APIリファレンスを参照してください。EclipseLinkドキュメントの『Using EclipseLink JPA Extensions』も参照してください。

http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_%28ELUG%29

EclipseLink APIコンポーネントには、javax.persistenceパッケージのJPAインタフェースも含まれています。

oracle.toplink.*クラスで表されていた、以前のNative TopLink、"Classic" TopLinkおよびTopLink Essentialsの永続性製品は、TopLinkから削除され、EclipseLinkの実装で置き換えられました。

2 TopLinkプロジェクトのビルディング・ブロック

この章では、TopLinkプロジェクトで使用できる項目を説明します。

この章は次の項で構成されています:

- 2.1項「オブジェクト・リレーショナル・マッピングのビルディング・ブロック」

- 2.2項「Object-XMLマッピングのビルディング・ブロック」

2.1 オブジェクト・リレーショナル・マッピングのビルディング・ブロック

TopLinkには、完全なJPA 2.0準拠のJPA実装が用意されています。これは、すべての必須機能、多くのオプション機能および一部の追加機能に完全に準拠しています。必須ではない追加機能には、オブジェクトレベル・キャッシュ、分散キャッシュ調整、広範なパフォーマンス・チューニング・オプション、Oracle Databaseサポートの拡張機能、高度なマッピング、オプティミスティック・ロック・オプションとペシミスティック・ロック・オプション、広範な注釈と問合せのヒントが含まれます。

詳細は、EclipseLinkドキュメントの『The EclipseLink JPA User's Guide』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA

次の各項で、これらの機能の多くについて説明します。

- 2.1.1項「オブジェクト・リレーショナル・エンティティ・アーキテクチャ」

- 2.1.2項「注釈を使用したメタデータの追加」

- 2.1.3項「構成ファイル」

- 2.1.4項「データ・ソース」

- 2.1.5項「TopLinkのキャッシュ」

- 2.1.6項「データベース問合せ」

2.1.1 オブジェクト・リレーショナル・エンティティ・アーキテクチャ

このエンティティ・アーキテクチャは、エンティティ、永続性ユニット、永続性コンテキスト、エンティティ・マネージャ・ファクトリおよびエンティティ・マネージャで構成されています。図2-1に、これらの要素の関係を示します。

- 永続性は、1つ以上のEntityManagerFactoryオブジェクトを作成します。

- 各EntityManagerFactoryは、1つの永続性ユニットによって構成されます。

- EntityManagerFactoryは、1つ以上のEntityManagerオブジェクトを作成します。

- 1つ以上のEntityManagerは、1つのPersistenceContextを管理します。

図2-1 エンティティ・アーキテクチャの要素間の関係

「図2-1 エンティティ・アーキテクチャの要素間の関係」の説明

2.1.1.1 エンティティ

エンティティは、アプリケーションで定義されたオブジェクトで、次の特性があります。

- 永続化することが可能です。

- 永続識別子を持ちます(永続識別子とは、エンティティ・インスタンスを一意に識別し、そのインスタンスを同じエンティティ・タイプの他のインスタンスから区別するキーです。エンティティは、データ・ストアにそのエンティティを表現するオブジェクトが存在する場合、永続識別子を持ちます)。

- エンティティの永続性ビューに関してトランザクション的であるという点で、トランザクション的です(エンティティは、トランザクション内で作成、更新および削除され、変更のデータベースへのコミット時にはトランザクションが必要です)。ただし、メモリー内エンティティは、変更を永続化することなく更新できます。

- プリミティブ・オブジェクト、プリミティブ・ラッパー・オブジェクトまたは組込みオブジェクトではありません。エンティティは、単一の場所(表の行など)に通常格納される集約された状態のセットを保持する粒度の細かいオブジェクトであり、他のエンティティに対するリレーションシップを持ちます。

エンティティには、エンティティを記述するエンティティ・メタデータも含まれています。エンティティ・メタデータは、データベースに対して永続化されません。これは、エンティティがロードされてから実行時に起動されるまでの間、永続性レイヤーがエンティティを管理するために使用されます。メタデータは、Javaプログラミング要素またはXMLファイル(ディスクリプタ)の注釈として表現できます。

現在のリリース以降では、マッピングをオンザフライで追加できる拡張可能なエンティティを定義および使用できます。この場合、エンティティには、静的属性ではなく、マップ内に拡張された属性が保存されます。次に、エンティティは、eclipselink-orm.xmlマッピング・ファイルを使用して、このマップの値をデータベースにマップする方法を定義します。TopLinkでは、動的にマッピングを定義できることに加えて、これらの拡張されたマッピングを保存して外部から管理することもできます。この外部保存により、アプリケーションの実行中に、拡張されたマッピングを定義できるようになりました。詳細は、EclipseLinkドキュメントの『EclipseLink/Examples/JPA/Extensibility』を参照してください。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Extensibility

2.1.1.2 永続性と永続性ユニット

永続性は、エンティティの特性です。つまり、エンティティはデータ・ストアで表すことができ、後でアクセスできます。

永続性ユニットは、永続化可能なユニットを識別し、それに関連するプロパティを定義します。また、永続化する必要があるオブジェクトも定義します。オブジェクトは、エンティティ・クラス、埋込み可能クラス、マップされたスーパークラスのいずれかです。永続性ユニットでは、エンティティ・マネージャ・ファクトリの構成が提供されます。エンティティ・マネージャ・ファクトリによって作成されたエンティティ・マネージャは、永続性ユニットに定義されたプロパティを継承します。

2.1.1.3 エンティティ・マネージャ

エンティティ・マネージャは、エンティティに対して操作を実行するAPIコールを有効にします。エンティティ・マネージャを使用してエンティティの作成、読取り、書込みのいずれかを行うまで、エンティティは、非永続性Javaオブジェクトにすぎません。エンティティ・マネージャがエンティティへの参照を取得すると、そのエンティティはエンティティ・マネージャによって管理されるようになります。特定の時点でのエンティティ・マネージャ内の管理対象エンティティ・インスタンスのセットを、永続性コンテキストと呼びます。同じ永続性IDのJavaインスタンスは、永続性コンテキスト内に特定の時点で1つのみ存在できます。

特定のデータベースを対象とする読取りまたは書込み、特定タイプのオブジェクトの永続化または管理、および特定の永続性プロバイダによる実装を行うようエンティティ・マネージャを構成できます。永続性プロバイダにより、EntityManagerインタフェース実装、Query実装、SQL生成などのJPAの実装が提供されます。エンティティ・マネージャはEntityManagerFactoryによって提供されます。エンティティ・マネージャの構成は、EntityManagerFactoryに依存しますが、永続性ユニットとして個別に定義されます。永続性ユニットに名前を付けることで、各EntityManagerFactoryオブジェクトを区別できます。この方法により、特定のエンティティの操作にどの構成を使用するかをアプリケーションで制御できます。永続性ユニットを記述する構成は、persistence.xmlファイルで定義します。特定の構成をEntityManagerFactoryにバインドするようにリクエストできるようにするために、永続性ユニットに名前を付けます。

2.1.2 注釈を使用したメタデータの追加

TopLinkには、Javaソース・コードに簡単にメタデータを追加できるように、一連の独自仕様の注釈が用意されています。メタデータは、対応するJavaクラス・ファイルにコンパイルされ、実行時にJPA永続性プロバイダによって解釈されて、永続性動作が管理されます。注釈は、クラス、メソッドおよびフィールドのレベルに適用できます。

TopLinkの注釈では、JPAメタデータの使用を介して現在入手できないTopLinkの機能の一部が公開されています。

- 基本プロパティ: デフォルトでは、TopLinkの永続性プロバイダは、単純型に対する基本マッピングを自動的に構成します。これらの注釈を使用して、フィールドまたはプロパティのエンティティの即時の状態を微調整します。

- 関係: TopLinkでは、OneToOneやOneToManyなどの一部の関係がデフォルト設定されます。他の関係は、明示的にマップする必要があります。注釈を使用して、エンティティ関係のタイプおよび特性を指定して、これらの関係をデータベースでどのように実装するかを微調整します。

- 埋込みオブジェクト: 埋込みオブジェクトには、それ自体の永続性IDはありません。IDに関しては、エンティティに依存しています。TopLink永続性プロバイダはデフォルトで、各エンティティがそれ自体の表にマップされていることを前提としています。それに続く注釈を使用すれば、他のエンティティが所有するエンティティに対して、この動作をオーバーライドできます。

2.1.3 構成ファイル

次の項では、TopLinkオブジェクト・リレーショナル・マッピング・プロジェクトの主な構成ファイルのいくつかについて説明します。

2.1.3.1 デフォルトの構成値について

Oracle TopLinkはJPA 2.0仕様に準拠しています。構成ファイルでは、仕様に定義されているプロパティのデフォルト値を変更できます。デフォルトは広範囲にわたり、JPA仕様の第10章「Metadata Annotations」に示されています。

http://jcp.org/en/jsr/detail?id=317

この構成は例外処理として行われます。つまり、構成ファイルのいずれかに値が指定されていない場合は、デフォルト値が使用されます。

JPA仕様に定義されていないTopLinkの拡張機能については、Oracle Fusion Middleware EclipseLink Java APIリファレンスにデフォルトが説明されています。

2.1.3.2 persistence.xmlを使用した永続性ユニットの構成

永続性ユニットを構成するには、JPA永続性ファイルpersistence.xmlを使用します。永続性ユニットでは、エンティティ・マネージャを取得する際に必要な詳細を定義します。ベンダー固有の拡張機能は、<properties>要素を使用して、このファイルに指定できます。

このファイルは、永続性ユニットのJARファイルのMETA-INF/ディレクトリまたはクラスパスに置く必要があります。

詳細は、EclipseLinkドキュメントの『Configuring Persistence Units Using persistence.xml』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Configuration/JPA/persistence.xml

2.1.3.3 eclipselink-orm.xmlを使用したTopLinkオブジェクト・リレーショナル・マッピングの指定

メタデータを永続性ユニットに適用するには、標準のJPAのorm.xmlファイルを使用します。これは、すべてのJPA 2.0マッピングをサポートしています。このファイルを注釈のかわりに使用するか、ソース・コードのJPA注釈をオーバーライドするために使用できます。EclipseLinkのeclipselink-orm.xmlファイルは、orm.xmlファイルで定義されるマッピングをサポートしており、JPA 2.0では定義されていないEclipseLink拡張機能のフル・セットもサポートしています。

eclipselink-orm.xmlファイルの詳細は、EclipseLinkドキュメントの『Specifying EclipseLink Object-Relational Mappings Using eclipselink-orm.xml』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Configuration/JPA/eclipselink-orm.xml

EclipseLinkドキュメントの『EclipseLink/Examples/JPA/EclipseLink-ORM.XML』も参照してください。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/EclipseLink-ORM.XML

注意:
このマッピング・ファイルを使用すると、TopLinkの多くの高度な機能が有効になりますが、他のJPA実装に対する永続性ユニットの移植性がなくなる場合があります。

2.1.4 データ・ソース

永続性ユニットの定義で重要なのは、プロバイダが読み書きするデータを検出可能な場所です。これを、データ・ソースと呼びます。TopLinkでは、多くの場合、データ・ソースはデータベースです。データベースの場所は、サーバーのJNDIネームスペースのJDBCデータ・ソースの形式で指定します。

通常、TopLinkを使用するアプリケーションは、JTAトランザクションのコンテキストで実行します。データ・ソースの名前は、persistence.xmlファイルのjta-data-source要素に指定します。アプリケーションがトランザクションのコンテキストで実行されない場合は、resource-localと見なされます。この場合は、non-jta-data-source要素に、データ・ソースの名前を指定します。

TopLinkでは、XMLスキーマなどのリレーショナル・データベース以外のデータ・ソースも指定できます。

TopLinkを使用するアプリケーションはスタンドアロン(Java SE)モードで実行できます。このモードでは、非JTA準拠のデータ・ソースとともに、非Oracleスタックにおいて、サーバーの外部でアプリケーションが実行されます。この場合、JDBCドライバ・クラス、データベースに接続するためにクライアントが使用するURL、データベースへのアクセスに必要なユーザー名とパスワードなどのドライバ固有の情報を指定する必要があります。詳細およびスタンドアロン・モードでのアプリケーションの実行例は、EclipseLinkドキュメントの『EclipseLink/Examples/JPA/OutsideContainer』を参照してください。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/OutsideContainer

EclipseLinkドキュメントの『EclipseLink/Examples/JPA/Tomcat Web Tutorial』も参照してください。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial

2.1.5 TopLinkのキャッシュ

TopLinkのデフォルトでは、共有オブジェクト・キャッシュが使用されます。共有オブジェクト・キャッシュでは、読み取られて永続性ユニットに対して永続化されたすべてのオブジェクトのサブセットがキャッシュされます。TopLinkの共有キャッシュは、ローカルのEntityManagerキャッシュとは異なります。共有キャッシュは、永続性ユニット(EntityManagerFactoryまたはサーバー)の期間存在し、永続性ユニットのすべてのEntityManagerおよびユーザーによって共有されます。ローカルのEntityManagerキャッシュは共有されず、EntityManagerまたはトランザクションの期間のみ存在します。

共有キャッシュの利点は、オブジェクトを1回読み取ると、同じオブジェクトを再度読み取る際にデータベースにアクセスする必要がないことです。また、問合せを使用してオブジェクトを読み取る場合は、オブジェクトを再作成する必要はなく、オブジェクトの関係も再フェッチする必要がありません。

共有キャッシュの制限は、JDBC経由または別のアプリケーションやサーバーによってデータベースが直接変更されると、共有キャッシュのオブジェクトが失効することです。

TopLinkには、失効データを扱うために、次のようなメカニズムが用意されています。

- リフレッシュ

- 無効化

- オプティミスティック・ロック

- キャッシュ・コーディネーション

共有キャッシュは無効にしたり、@Cacheまたは@Cacheable注釈を使用して、選択的に有効化または無効化することもできます。TopLinkには、キャッシュするオブジェクト数および使用するメモリー量を構成するためのキャッシュ戦略もいくつか用意されています。

キャッシュが最新でないことをアプリケーションが認識している場合、アプリケーションはプログラムでキャッシュをクリア、リフレッシュまたは無効化できます。キャッシュされているオブジェクトのいずれかが使用中の場合にキャッシュをクリアすると、オブジェクトIDの問題が発生する場合があるので、無効化するほうが安全です。キャッシュされているオブジェクトのいずれも使用中でないことがわかっている場合は、キャッシュをクリアできます。

詳細は、EclipseLinkドキュメントの『EclipseLink/Examples/JPA/Caching』を参照してください。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching

2.1.5.1 キャッシュ動作の定義

TopLinkには、キャッシュ・プロパティを定義できる@Cache注釈が用意されています。プロパティには、キャッシュのタイプ、サイズ、リフレッシュ・ルールなどが含まれます。EclipseLinkドキュメントの『Using the @Cache Annotation』を参照してください。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching#Using_the_.40Cache_Annotation

2.1.5.2 クラスタ環境でのキャッシング

あるサーバーでの変更は他のサーバーにキャッシュされているオブジェクトには反映されないため、クラスタ環境でのキャッシングでは問題が生じる場合があります。これは、読取り専用オブジェクトでは問題になりませんが、頻繁に更新されるオブジェクトでは問題になります。

TopLinkには、この問題に対する解決策がいくつか用意されています。

- 頻繁に変更されるクラスに対してはキャッシュを無効にできます。

- キャッシュ・コーディネーションを使用して、クラスタ内のサーバー間で変更をブロードキャストして、変更されたオブジェクトの無効化情報を更新できます。

- 存続時間または時刻に基づいてキャッシュを無効化できます。

- オプティミスティック・ロックを使用して、無効なオブジェクトへの更新を防ぎ、キャッシュ内でオブジェクトが無効化されるようにトリガーすることができます。

2.1.6 データベース問合せ

TopLinkのオブジェクト・リレーショナル・コンポーネントは、様々な問合せをサポートしています。

2.1.6.1 JPQL

JPQLは、SQLに似た問合せ言語ですが、オブジェクト・モデルのパースペクティブから問合せを提示できること、およびエンティティと依存オブジェクトに対して定義されている関係のナビゲーションを可能にするパス式が含まれていることが異なります。TopLinkでは、JPQLを通常のJavaオブジェクトで使用できます。TopLinkでJPQLを使用すると、オブジェクト・モデルの各抽象エンティティの属性を使用して、問合せを宣言できます。

JPQLの短所は、動的問合せで、Webフォームや動的コンテンツから文字列を動的に連結して問合せを作成する必要があることです。また、JPQLは実行時までチェックされないので、タイプミスが多くなります。これらの短所は、次の項で説明する問合せ基準APIを使用すればある程度補えます。

EclipseLinkドキュメントの『JPQL』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL

EclipseLinkドキュメントの『EclipseLink/Release/2.1.0/JPAQueryEnhancements』も参照してください。

http://wiki.eclipse.org/EclipseLink/Release/2.1.0/JPAQueryEnhancements

2.1.6.2 基準問合せ

JPA 2.0には、動的問合せの作成を簡素化するために問合せ基準APIが定義されています。基準問合せでは、パラメータを使用でき、名前付き問合せと同様に問合せヒントを使用できます。問合せ基準APIでは、任意のJQPL問合せを記述できます。このAPIには、すべてのJPQLキーワードが定義されています。基準APIでは、一連のJavaインタフェースを使用して、問合せを動的に作成できるようになっています。コンパイル時に正確さを確認して、実行時のタイプミスを減らすこともできます。

EclipseLinkドキュメントの『Criteria Query』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Criteria

2.1.6.3 問合せヒント

TopLinkの問合せヒントでは、JPA仕様には定義されていないJPA問合せのカスタマイズまたは最適化を行えます。TopLinkのJPA問合せヒントを使用して、次のことを行えます。

- JPA問合せの作成

- @QueryHint注釈を使用したJPA問合せの指定

EclipseLinkドキュメントの『Query Hints』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Query_Hints

2.1.6.4 TopLinkの高度なネイティブ問合せサポート

TopLinkには、式フレームワーク(TopLinkネイティブ問合せサポートとも呼ばれる)が用意されています。この機能では、JPQLでサポートされていない問合せを記述する際に、生のSQLのかわりにデータベースに中立な形で問合せを表現できます。データベースにアクセスする場合、TopLinkの式は次の点でSQLよりも優れています。

- データベースが抽象化されるため、式の方が管理が容易です。

- ディスクリプタまたはデータベース表に変更を加えても、アプリケーションの問合せ構造に影響を与えません。

- 式では、Javaの通常のコール方法に似せてQueryインタフェースを標準化するため、読みやすさが向上します。

- 式を使用すると、読取り問合せによって、同じリレーションシップを共有する2つのクラスの間で問合せを透過的に行うことができます。これらのクラスがデータベース内の複数の表に格納されている場合、適切な結合文が自動的に生成され、両方の表から情報が返されます。

- 式は複雑な操作を単純化します。

TopLinkでは、指定した式から適切なSQLが自動的に生成されます。

式フレームワークでは、式、データベース問合せ、コール・オブジェクトおよびネイティブ問合せを操作できます。次のリストで説明されている問合せの詳細は、EclipseLinkドキュメントの『Native SQL Queries』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Native

- EclipseLinkのDatabaseQueryを使用したJPA問合せ
TopLinkのDatabaseQueryは、オブジェクト・レベルおよびデータ・レベルでの読取りおよび書込みを含む、データベース問合せの様々な要件を処理するための豊富なAPIが用意された問合せオブジェクトです。

- TopLinkのコール・オブジェクトを使用したJPA問合せ
DatabaseQueryのメソッドsetCallを使用すると、SQLストアド・プロシージャおよびストアド・ファンクションなど、EJB QL問合せおよびEISインタラクションなどの様々なデータ・ソースのオプションに対応した、独自のTopLink Callを定義できます。

- ネイティブ問合せの名前付きパラメータ
TopLinkでは、TopLinkの#表記規則を使用して、ネイティブ問合せに名前付きパラメータを指定できます。

- ネイティブ問合せのJPQL位置パラメータ
TopLinkでは、Java永続性問合せ言語(JPQL)の位置パラメータの表記規則?nを使用して、番号別にパラメータを指定すれば、ネイティブ問合せに位置パラメータを指定できます。

- ネイティブ問合せのJDBCスタイル位置パラメータ
TopLinkでは、JDBCスタイル位置パラメータの?表記規則を使用して、ネイティブ問合せに位置パラメータを指定できます。

2.2 Object-XMLマッピングのビルディング・ブロック

TopLink Object-XMLコンポーネントでは、JavaクラスをXMLスキーマに効率的にバインドできます。Object-XMLではJAXBが実装されるので、注釈でマッピング情報を指定でき、マッピングをXML形式で保存できます。

JAXB (Java Architecture for XML Binding—JSR 222)は、JavaのXMLバインディングの標準です。JAXBでは、XMLスキーマの概念が100%網羅されています。TopLinkでは、JAXBの実装が多くの拡張機能とともに提供されています。

TopLink Object-XMLをJAXBプロバイダとして使用する際には、既存のオブジェクト・モデルをXMLに変換するためのメタデータは不要です。XML表記を微調整する必要がある場合は、(注釈またはXMLを使用して)メタデータを指定できます。

TopLink Object-XMLには、Javaクラス・モデルでスキーマをミラーリングしなくても、複雑なXML構造を処理できる高度なマッピングが多数含まれています。

詳細は、EclipseLinkドキュメントの『The EclipseLink MOXy (JAXB) User's Guide』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy

次の各項で、これらの機能の多くについて説明します。

- 2.2.1項「JAXBプロバイダとしてのTopLink Object-XMLの使用」

- 2.2.2項「Object-XMLのアーキテクチャ」

- 2.2.3項「Object-XMLに対するメタデータの提供」

- 2.2.4項「XMLバインディング」

- 2.2.5項「eclipselink-oxm.xmlを使用したTopLink Object-XMLマッピングの指定」

- 2.2.6項「XPathによるオブジェクトの問合せ」

2.2.1 JAXBプロバイダとしてのTopLink Object-XMLの使用

TopLink Object-XMLをJAXBプロバイダとして使用するには、TopLink JAXBランタイムへのエントリ・ポイントを指定する必要があります。このエントリ・ポイントはJAXBContextFactoryクラスです。

jaxb.propertiesというテキスト・ファイルを作成して、JAXBContextFactoryクラスへのパスをjavax.xml.bind.context.factoryコンテキスト・パラメータの値として、次のように入力します。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

jaxb.propertiesファイルは、ドメイン・クラスと同じパッケージに存在する必要があります。

2.2.2 Object-XMLのアーキテクチャ

図2-2に示されているObject-XMLのサンプル・アーキテクチャでは、開始点はXMLスキーマになっています。バインディング・コンパイラは、スキーマから導出されたプログラム・クラスおよびインタフェースのセットにソース・スキーマをバインドします。アプリケーション内のJAXBの注釈が付いたクラスは、スキーマ・コンパイラで生成されるか、開発者がJAXB注釈を既存のJavaクラスに追加した結果によって生成されます。アプリケーションは、データをXML文書にマーシャリングするか、データをコンテンツ・オブジェクトのツリーにアンマーシャリングできます。各コンテンツ・オブジェクトは、導出されたスキーマ、またはスキーマ・ジェネレータによってマップされた既存のプログラム要素のどちらかのインスタンスで、XML内のインスタンスに対応しています。

図2-2 Object-XMLのサンプル・アーキテクチャ

「図2-2 Object-XMLのサンプル・アーキテクチャ」の説明

2.2.2.1 JAXBコンテキストおよびJAXBコンテキスト・ファクトリ

JAXBContextFactoryクラスは、TopLink JAXBランタイムへのエントリ・ポイントです。これは、必須のファクトリ・メソッドを提供し、JAXBContextの新しいインスタンスを作成できます。

JAXBContextFactoryでは、次のことを行えます。

- クラスの配列およびプロパティ・オブジェクトからのJAXBContextの作成

- コンテキスト・パスおよびクラスローダーからのJAXBContextの作成

JAXBContextクラスは、JAXB APIに対するクライアントのエントリ・ポイントを提供します。JAXBContextクラスは、メタデータの解釈、スキーマ・ファイルの生成、およびJAXBオブジェクト(Marshaller、Unmarshaller、Binder、IntrospectorおよびValidator)のインスタンスの作成を行います。

TopLink Object-XMLには、JAXBContextを作成する際にいくつかのオプションが用意されています。次のものからブートストラップするオプションがあります。

- JAXBの注釈の付いた1つ以上のクラスのリスト

- Javaクラスのマッピングが定義された1つ以上のTopLink XMLバインディング・ドキュメントのリスト

- クラスとXMLバインディングの組合せ

- コンテキスト・パスのリスト

- sessions.xmlに定義されているTopLinkセッションを参照するセッション名のリスト

2.2.3 Object-XMLに対するメタデータの提供

2.2.2.1項「JAXBコンテキストおよびJAXBコンテキスト・ファクトリ」に説明されている入力オプションに加えて、TopLink Object-XMLには、TopLinkのメタデータを提供するMetadataSourceの概念が用意されています。これにより、マッピング情報をアプリケーションの外部に保存して、アプリケーションのJAXBContextが作成またはリフレッシュされるときにマッピング情報を取得できるようになります。MetadataSourceの実装の詳細は、EclipseLinkドキュメントの『MetadataSource』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy/Runtime/MetadataSource

2.2.4 XMLバインディング

TopLinkでは、すべての標準JAXB注釈を使用できます。TopLinkには、標準注釈に加えて、TopLink XMLバインディング・ドキュメントという、メタデータを表現する別の方法も用意されています。XMLバインディングは、マッピング情報を実際のJavaクラスから分離できるだけでなく、次のような高度なメタデータ・タスクにも使用できます。

- 追加のマッピング情報で、既存の注釈を拡張またはオーバーライドできます。

- Java注釈を使用せずに、すべてのマッピング情報を外部指定できます。

- 複数のバインディング文書にまたがるマッピングを定義できます。

- 具体的なJavaフィールドに対応しない「仮想」マッピングを指定できます。

詳細は、EclipseLinkドキュメントの『XML Bindings』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy/Runtime/XML_Bindings

2.2.5 eclipselink-oxm.xmlを使用したTopLink Object-XMLマッピングの指定

Java注釈を使用して、TopLinkプロジェクトにJAXBの機能を指定できます。TopLinkには、Java注釈に加えて、eclipselink-oxm.xmlというXMLマッピング構成ファイルが用意されています。このマッピング・ファイルには、標準のJAXBマッピングに加えて、高度なマッピング・タイプ用の構成オプションが含まれています。eclipselink-oxm.xmlファイルを、ソース・コードのJAXB注釈のかわりに使用するか、JAXB注釈をオーバーライドするために使用できます。

注意:
このマッピング・ファイルを使用すると、TopLinkの多くの高度な機能が有効になりますが、他のJAXB実装に対するモデルの移植性がなくなる場合があります。

2.2.6 XPathによるオブジェクトの問合せ

TopLink Object-XMLでは、従来のJavaのアクセス方法を使用してオブジェクトの値を取得および設定する方法に加えて、XPath文を使用して値にアクセスすることもできます。TopLinkのJAXBContextには、XPathで値を取得および設定できるようにするための特殊なAPIがあります。詳細は、EclipseLinkドキュメントの『Querying Objects by XPath』を参照してください。

http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy/Runtime/Querying_Objects_by_XPath

3 TopLinkの開発ツール

この章では、様々な開発ツールによるTopLinkサポートについて説明します。

この章は次の項で構成されています:

- 3.1項「Oracle JDeveloper」

- 3.2項「Oracle Enterprise Pack for Eclipse」

- 3.3項「Eclipse」

- 3.4項「NetBeans」

3.1 Oracle JDeveloper

Oracle JDeveloperは、E-BusinessアプリケーションとWebサービスの開発、デバッグおよびデプロイをエンドツーエンドでサポートするJava EE開発環境です。

JDeveloperの詳細およびダウンロードは、次を参照してください。

http://www.oracle.com/us/products/tools/019657.htm

JDeveloperには、TopLinkを使用するアプリケーションの開発を支援する多くの機能が含まれています。これらの機能には、データベース表からJPAエンティティをリバース・エンジニアリングし、EntityManagerが挿入されたEJB 3.0セッションBeanを生成するウィザードが含まれています。これには、JPAエンティティを問い合せるメソッド、およびテスト・クライアントの生成も含まれています。

Oracle JDeveloperのTopLinkエディタを使用すると、Javaクラス、EJBおよびJPAエンティティを迅速かつ容易に構成し、コードを使用せずに、リレーショナル・データベースやXMLスキーマなどの様々なデータ・ソースにマッピングできます。TopLinkエディタでは、JPAおよびEJB 3.0など複数の標準がサポートされています。

DBWSBuilderデザインタイム・ユーティリティでは、TopLink DBWSサービス・ディスクリプタおよび付随するファイルを生成できます。このユーティリティは、データベース・メタデータからこれらのファイルを自動的に生成して、要素タグの名前とタイプを導出します。また、このユーティリティは、デプロイ可能なアーカイブにファイルをまとめます。

TopLinkエディタおよびDBWSBuilderの詳細は、JDeveloperのオンライン・ヘルプを参照してください。

3.2 Oracle Enterprise Pack for Eclipse

Oracle Enterprise Pack for Eclipse (OEPE)は、Eclipseが優先IDEである場合に、Java EEの開発をサポートするように設計された一連のプラグインです。

OEPEの詳細およびダウンロードは、次を参照してください。

http://www.oracle.com/technetwork/developer-tools/eclipse/overview/index.html

OEPEは、TopLink JPAを使用する永続性レイヤーを作成するために、次のタスクを完了できるように支援します。

- JPAプロジェクトに対する永続性プロバイダの構成
OEPEには、Eclipse JPAプロジェクトで使用できるEclipseLinkプロジェクト・ファセットが用意されています。EclipseLinkプロジェクト・ファセットを選択すると、プロジェクトが次のように変更されます。

- Oracle WebLogic Server 11gR1に同梱されているEclipseLink永続性プロバイダのJARファイルが含まれるようにプロジェクト・ビルド・パスが自動的に構成されます。Oracle WebLogic Serverの初期のバージョンにはライブラリ・ファイルが同梱されていませんが、ファセット構成ウィザードを使用してダウンロードできます。

- Eclipse JPAプロジェクトのpersistence.xmlファイルに、EclipseLink固有のデータベース接続プロパティを自動的に構成できます。

- JPAエンティティの生成
OEPEでは、OEPE JPAエンティティ生成ウィザードを使用してJPAエンティティを生成できます。

- Javaクラスの注釈指定
OEPEを使用すれば、データベース・スキーマに基づくJPA注釈を既存のJavaクラス(POJO)に指定できます。そうする際にEclipseでは、適切なアクセサにJPA注釈が追加されます。

- JPAエンティティ・ダイアグラム・エディタの使用
OEPEには、JPAプロジェクト内のエンティティ関係を表示するためのグラフィカル・インタフェースが用意されています。エンティティ・ダイアグラム・エディタを使用すれば、エンティティ間の関係の表示および変更、エンティティ・ソース・コードへの容易なアクセス、追加のオブジェクト・リレーショナル・マッピングの作成を行えます。このエディタでは、エンティティとエンティティのフィールドの両方のプロパティを編集できます。また、永続性コンテキストを記述するpersistence.xmlファイルも編集できます。

- SQLスキーマ・ビューアの使用
OEPEでは、データベース・スキーマ間の表および関係を表示するSQLスキーマ・ビューアを使用して、データベース・スキーマを調べることができます。このビューアでは、表ノードとして表が表示されます。各ノードには、表のすべての列が一覧表示され、列のデータ型が表示されます。また、ノードには、アイコンの形で、主キーと外部キーのインジケータも表示されます。表の間の外部キーの関係は、矢印の形で、リンクによって表されます。

3.3 Eclipse

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で入手できます。

http://marketplace.eclipse.org/

3.4 NetBeans

NetBeans IDEには、Oracle TopLinkを含むGlassFish Server 3.1.1がバンドルされています。このIDEでは、JPAベースのコード環境が完全にサポートされています。このサポートには、エンティティを作成するためのエンティティ・クラス・ウィザード、およびエンティティがJPA仕様に準拠していることを確認するためのエディタ・ヒントが含まれています。NetBeansには、persistence.xmlファイルを作成するための永続性ユニット・エディタも用意されています。

NetBeansの詳細およびダウンロードは、次を参照してください。

http://netbeans.org/index.html

Copyright © 2002, 2011, Oracle and/or its affiliates. All rights reserved.