ヘッダーをスキップ
Oracle® Fusion Middleware Oracle TopLinkコンセプト
11g リリース1 (11.1.1)
B66434-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

1 一般的な概念

この章では、Oracle TopLinkとその主要機能(TopLinkを構成するコンポーネント、メタデータ、アプリケーション・アーキテクチャ、マッピングおよびAPI)について説明します。

この章の内容は次のとおりです。

1.1TopLinkとは

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

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

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

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

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を使用して、XMLスキーマ・ドキュメント(XSD)に基づいて、JavaオブジェクトとXMLドキュメントの間でインメモリー変換を実行できます。

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

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

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

1.2 TopLinkの主な機能

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

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

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

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

1.3 TopLinkのメタデータ

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

メタデータを通じて、構成情報をランタイム環境に渡すことができます。ランタイム環境では、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サービス

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 (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属性にマップされます。Object-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、プロパティおよび拡張機能の詳細は、EclipseLinkドキュメントのEclipseLink JPA 拡張機能の使用に関する説明を参照してください。

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の実装で置き換えられました。