ヘッダーをスキップ
Oracle® Fusion Middleware Oracle JDeveloperユーザーズ・ガイド
11g リリース2 (11.1.2.1.0)
B66717-01
  目次へ移動
目次

前
 
次
 

13 TopLinkマッピングの開発

この章では、Oracle JDeveloper内でTopLinkマッピングを開発する方法について説明します。TopLinkエディタを使用して、TopLinkディスクリプタや、Javaクラス、EJBおよびJPAエンティティからデータソース要素(データベース表またはXMLスキーマ要素など)へのマッピングを迅速かつ簡単に構成できます。TopLinkエディタを使用すると、Javaコードを作成せずにこの情報を作成できます。

この章では、次の項目で、TopLinkマッピングの作成およびJDeveloperプロジェクトへのTopLinkマッピングの統合に関する一般的なプロセスを説明します。

詳細は、次の項を参照してください。

13.1 TopLinkマッピングの開発について

Oracle TopLinkは、オブジェクトの永続性およびオブジェクト・トランスフォーメーションのための高度なフレームワークを提供します。開発やメンテナンスのコストを軽減し、エンタープライズ・アプリケーションの機能を向上させる開発ツールおよびランタイム機能が用意されています。

JDeveloper内のTopLinkエディタを使用して、Javaコードを使用せずに、Javaクラス、EJBおよびJPAエンティティを構成し、リレーショナル・データベース、企業情報システム(EIS)およびXMLスキーマなど別のデータソースにマップします。TopLinkエディタでは、JPA、JAXBおよびJava EEなど複数の標準がサポートされています。

TopLinkは、オブジェクト指向のプログラムをリレーショナル・データ構造にリンクします。TopLinkを使用すると、リレーショナル・データベースに永続オブジェクト指向データを格納する、パフォーマンスの高いアプリケーションを作成できます。オブジェクト指向データは、リレーショナル・データまたはXML文書に変換されます。TopLinkを使用すると、効率的で柔軟性が高く実証済であるソリューションを利用して、プライマリ・ドメインの問題に焦点を置いたまま、永続性とオブジェクト変換をアプリケーションに統合できます。

13.1.1 インピーダンス・ミスマッチについて

TopLinkを使用すると、インピーダンス・ミスマッチと呼ばれる、Javaソースとデータソース間の差異に対応できます。オブジェクト・リレーショナル・データベースは表、行、列、主キーおよび外部キーなどの要素で構成されていますが、JavaおよびJava EEにはエンティティ・クラス(標準JavaクラスまたはEnterprise JavaBean (EJB)エンティティBean)、ビジネス・ルール、複合リレーションおよび継承があります。非リレーショナル・データ・ソースでは、JavaエンティティをEISレコードまたはXML要素とスキーマに一致させる必要があります。これらの不一致(図13-1に示されています)は、オブジェクトと永続データのインピーダンス・ミスマッチとして知られています。

図13-1 オブジェクトと永続データのインピーダンス・ミスマッチの解決

オブジェクト・リレーショナルのインピーダンス・ミスマッチ

13.1.2 TopLinkアプリケーションの設計

TopLinkを使用すると、次を含む、Javaを使用するエンタープライズ・アーキテクチャに対して様々な永続性およびデータ変換機能を実行できます。

  • Java EE

  • Spring

  • Java Webサーバー(Tomcatなど)

  • Javaクライアント(Java SE、Webブラウザなど)

13.1.3 アプリケーション設計でのTopLinkの使用

TopLinkは、次の方法で使用できます。

  • リレーショナル・データベースの使用: TopLinkを使用すると、JDBCを使用してアクセスされる、SQLデータ・タイプをサポートするリレーショナル・データベースに、Javaオブジェクトを永続化できます。

  • Oracle XML Database (XDB)の使用: TopLinkでダイレクトXMLタイプ・マッピング機能を使用して、Oracle XMLデータベースにXML文書を永続化できます。

  • 企業情報システム(EIS)の使用: TopLinkで、JCAアダプタを使用してJavaオブジェクトをEISデータソースに永続化できます。このシナリオでは、JCAアダプタがEISとのインタラクションを受信することで、アプリケーションがEISデータ・ソースによって定義された操作を起動します。操作により、EISレコードが取得されたり返されます。TopLink EISディスクリプタとマッピングを使用して、JCAアダプタとEISデータ・ソースによってサポートされるEISレコード・タイプに、Javaオブジェクトを容易にマップできます。この使用方法は、レガシー・データソースに接続するアプリケーションでは一般的であり、Webサービスにも適用できます。

  • XMLの使用: TopLinkで、XML文書およびJAXBをベースにしたXMLスキーマ(XSD)を使用して、インメモリーの非永続JavaオブジェクトをXMLにトランスフォーメーションできます。TopLink JAXBコンパイラをXSDとともに使用して、JAXB固有の生成物(コンテンツと要素のインタフェース、実装クラス、オブジェクト・ファクトリ・クラスなど)とTopLink固有の生成物(セッション、プロジェクトXMLファイルなど)を両方とも生成できます。

13.1.4 TopLinkメタデータの作成

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

  • TopLinkランタイム環境に渡すTopLinkのsessions.xmlおよびproject.xmlファイルを作成するJDeveloperマッピング・エディタ。

  • JPAの注釈、persistence.xmlorm.xml、TopLink JPAの注釈およびTopLinkプロパティの拡張機能。TopLink JPA永続性プロバイダでは、これらのメタデータのメタデータ・ソースを解釈して、実行時にインメモリーのTopLinkセッションおよびプロジェクトが作成されます。

  • JavaおよびTopLink API(この方法は最も労力が必要とされます)

メタデータを使用すると、構成情報をランタイム環境に渡すことができます。ランタイム環境では、この情報を永続クラス(Javaオブジェクト、JPAエンティティまたはEJBエンティティBean)、およびTopLink APIを使用して記述されたコードとともに使用して、アプリケーションが完成します。

TopLink JPAを使用すると、JPAおよびEntityManagerを使用して永続クラスにアクセスしている間に、TopLinkのsessions.xmlおよびproject.xmlを使用してメタデータを指定することもできます。

TopLinkメタデータ・アーキテクチャにより、次のような多くの重要な利点が提供されます。

  • メタデータを使用することにより、TopLinkはオブジェクト・モデルまたはデータベース・スキーマに介入しません。

  • 開発者は、特定の設計を強引に通すことなく、必要に応じてオブジェクト・モデルを設計できるようになります。

  • DBAは、特定の設計を強引に通すことなく、必要に応じてデータベースを設計できるようになります。

  • コード生成(設計、実装、メンテナンスなどの重大な問題の原因になる可能性がある)に依存しません。

  • 非介入型です。TopLinkに適合するようにオブジェクト・モデルまたはデータベース・スキーマを設計することを開発者に要求するのではなく、TopLinkメタデータ自らがオブジェクト・モデルおよびデータベース・スキーマに適応します。

TopLink JPAを使用する場合、標準JPAの注釈、デプロイメントXML、またはこの両方を使用して永続性メタデータを柔軟に公開できます。必要に応じて、TopLink JPAの注釈および永続性ユニットの拡張機能を利用することもできます。

13.1.5 プロジェクト・メタデータの作成

TopLinkプロジェクトには、TopLinkランタイムがオブジェクトをデータ・ソースへマップするために使用するマッピング・メタデータが含まれています。プロジェクトは、TopLinkランタイムが使用するプライマリ・オブジェクトです。プロジェクト・メタデータの最も重要な内容には、次が含まれます。

  • ディスクリプタ

  • マッピング

  • データ・ソース・ログイン情報

TopLinkランタイムは、JPAを使用して、採用されている注釈、persistence.xmlorm.xmlおよびTopLink JPAの拡張機能に基づき、インメモリー・プロジェクトを構成します。

13.1.6 セッション・メタデータの作成

TopLinkセッション構成ファイル(sessions.xml)を使用すると、特定のプロジェクトのすべてのセッションを簡単に管理できます。データソース・ログイン情報、JTAトランザクション使用方法およびキャッシングを含む各セッションに関する情報を完全にカスタマイズできます。

TopLinkのセッションには、特定のproject.xmlファイルへの参照とデータ・ソースへのアクセスに必要な情報が含まれています。セッションは、TopLinkランタイムの機能にアクセスするためにアプリケーションが使用するプライマリ・オブジェクトです。

セッション・メタデータの作成およびアクセスを担当するエージェントは、CMPプロジェクトを作成するかどうかに応じて異なります。POJOプロジェクトでは、アプリケーションはセッションを直接取得してアクセスします。CMPプロジェクトでは、アプリケーションは、TopLinkランタイムによって内部的に取得されたセッションに間接的にアクセスします。

TopLinkランタイムは、TopLink JPAを使用して、JPAの注釈、persistence.xmlorm.xml、TopLink JPAの注釈およびpersistence.xmlのプロパティの拡張機能の任意の組合せに基づき、インメモリー・セッションを構成します。sessions.xmlファイルの使用はオプションです。

13.1.7 TopLinkディスクリプタの使用

TopLinkでは、ディスクリプタを使用して、あるデータソースによって特定クラスがどのように表現されるかを定義した情報を格納します。ディスクリプタには、クラスのインスタンス変数を、データ・ソースおよび、値の格納と取得に使用されるトランスフォーメーション・ルーチンに関連付けるマッピングを含めます。それによって、ディスクリプタは、Javaオブジェクトとそのデータ・ソース表現を接続する役目を果します。

2つのオブジェクト、つまり、ソース(親、すなわち所有)オブジェクトとターゲット(子、すなわち被所有)オブジェクトは、両者間に厳密な1対1の関係がある場合、集約によって関連付けられ、ターゲット・オブジェクトのすべての属性は、ソース・オブジェクトと同じデータソース表現から取得できます。つまり、ソース・オブジェクトが存在すればターゲット・オブジェクトも存在する必要があり、ソース・オブジェクトが破棄されればターゲット・オブジェクトも破棄されるということです。

JDeveloperを使用すると、次のタイプのTopLinkディスクリプタを作成できます。

  • リレーショナル・ディスクリプタ

  • EISディスクリプタ

  • XMLディスクリプタ

13.1.7.1 リレーショナル・ディスクリプタ

リレーショナル・ディスクリプタには、リレーショナル・データベース内の表にマップするJavaオブジェクトを記述します。リレーショナル・プロジェクトでリレーショナル・ディスクリプタを使用すると、リレーショナル・マッピングを構成できます。リレーショナル・プロジェクトでは、ディスクリプタを集約として指定できるため、ターゲット・オブジェクト内のデータ・メンバーをソース・オブジェクトの基礎となるデータベース表のフィールドと関連付ける集約マッピングを構成できます。

リレーショナル・ディスクリプタを集約ディスクリプタとして定義する場合、TopLinkではターゲット・クラスのフィールドごとに1つのマッピング・タイプを指定できますが、フィールドとデータベース表の関連付けは、ソース・ディスクリプタで集約オブジェクト・マッピングを構成した後で可能になります。つまり、ターゲット・クラス・ディスクリプタは各ターゲット・クラス・フィールドがマップされる方法を定義し、ソース・クラス・ディスクリプタは各ターゲット・クラス・フィールドがマップされる場所を定義する、ということです。この仕組みにより、異なる表にマップされた多数の親ディスクリプタ間で同一の集約オブジェクトを共有することができます。

13.1.7.2 EISディスクリプタ

JCAアダプタを介してEISデータ・ソースにマップするJavaオブジェクトを記述します。EISディスクリプタを使用すると、EISプロジェクトの作成時にEISマッピングを構成できます。

13.1.7.3 XMLディスクリプタ

XMLスキーマ・ドキュメント(XSD)に定義されているXML文書内の複合型へのインメモリー・マッピングを行うJavaオブジェクトを記述します。XMLディスクリプタをXMLプロジェクトで使用すると、XSDに定義されているXML要素へのXMLのマッピングをメモリー内に構成できます。

13.1.8 TopLinkマッピングの使用

TopLinkは、オブジェクトの表現からデータソースに固有の表現にデータを変換します。この変換はマッピングと呼ばれ、TopLinkプロジェクトの中核をなすものです。マッピングはそれぞれ、ドメイン・オブジェクトの単一データ・メンバーに対応しています。マッピングによって、オブジェクト・データ・メンバーをそのデータソース表現と関連付け、オブジェクトとデータソースの間の双方向変換を実行する手段を定義します。TopLinkマップは、アプリケーションがTopLinkの機能にアクセスする際に経由するファサードであるTopLinkセッションに属します。使用可能なマッピングのタイプは、TopLinkマップおよびTopLinkディスクリプタによって異なります。

13.1.8.1 リレーショナル・マッピングのタイプ

リレーショナル・マッピングは、オブジェクトのデータ・メンバー・タイプを、サポートされているリレーショナル・データベースの対応するリレーショナル・データベース表現に変換します。これらを使用して、プリミティブを含む単純なデータ・タイプ(intなど)、JDKクラス(Stringなど)およびラージ・オブジェクト(LOB)の値をマップします。また、これらを使用して、データ・ソース表現にオブジェクト・アイデンティティの維持(順序付けおよび後方参照など)が必要な関連付けによって、他のドメイン・オブジェクトを参照するオブジェクト・データ・メンバーを変換し、多重度および誘導可能性の様々なタイプを持たせることもできます。適切なマッピング・クラスは、主にリレーションシップのカーディナリティによって選択されます。

表13-1は、方向性、トランスフォーマ、コンバータおよびEJB 2.n CMPリレーショナル・マッピングというTopLinkの概念を使用したリレーショナル・マッピングのタイプのビルド・マップを示しています。

表13-1 リレーショナル・マッピングのタイプ

マッピング・タイプ 説明

フィールドへ直接

Java属性をデータベース・フィールドに直接マップします。

XMLタイプへ直接

Java属性をOracleデータベースのXMLType列にマップします。

1対1

他の永続Javaオブジェクトへの参照をデータベースにマップします。

可変1対1

インタフェースへの参照をデータベースにマップします。

1対多

永続オブジェクトのJavaコレクションをデータベースにマップします。

多対多

関連表を使用して、永続オブジェクトのJavaコレクションをデータベースにマップします。

ダイレクト・コレクション

ディスクリプタを持たないオブジェクトのJavaコレクションをマップします。

ダイレクト・マップ

ダイレクト・マップ・マッピングでは、java.util.Mapを実装するインスタンスが格納されます。

集約オブジェクト

オブジェクトが両方とも同じデータベース行に存在する必要がある、厳密な1対1マッピングを作成します。

トランスフォーメーション

カスタム・マッピングを作成し、1つ以上のフィールドを使用して属性に格納するオブジェクトを作成できるようにします。


13.1.8.2 EISマッピングのタイプ

TopLink企業情報システム(EIS)マッピングでは、Java EE Connector Architecture (JCA)アダプタを介した、レガシー・データ・ソースおよびエンタープライズ・アプリケーションへのアクセスをサポートします。TopLink EISマッピングでは、JCA Common Client Interface (CCI)を使用し、そのリソース・アダプタを介してEISにアクセスします。これにより、既存のJavaオブジェクト・モデルを直接トランザクション・データ・ソース(フラット・ファイル/階層データを持つメインフレームなど)にマップできるようになります。EISマッピングでは、オブジェクトのデータ・メンバーをオブジェクトのディスクリプタで定義されたEISレコード形式に変換します。

表13-2は、TopLinkが提供するEISマッピングのタイプを示しています。

表13-2 EISマッピングのタイプ

マッピング・タイプ 説明

ダイレクト・マッピング

単純なオブジェクト属性を直接EISレコードにマップします。

コンポジット・ダイレクト・コレクション・マッピング

Java属性のコレクションを直接EISレコードにマップします。

コンポジット・オブジェクト・マッピング

Javaオブジェクトを私有の1対1リレーションシップでEISレコードにマップします。コンポジット・オブジェクト・マッピングは、2つのクラス間のリレーションシップを表します。

コンポジット・コレクション・マッピング

JavaオブジェクトのMapまたはCollectionを私有の1対多リレーションシップでEISレコードにマップします。

1対1マッピング

1つのソース・オブジェクトと1つのマップ済永続Javaオブジェクトの間のリレーションシップを表す、参照マッピングを定義します。

1対多マッピング

1つのソース・オブジェクトとマップ済永続Javaオブジェクトのコレクションの間のリレーションシップを表す、参照マッピングを定義します。

トランスフォーメーション・マッピング

カスタム・マッピングを作成し、1つ以上のEISレコード・フィールドを使用してJavaクラスの属性に格納するオブジェクトを作成できるようにします。


13.1.8.3 XMLマッピングのタイプ

XMLマッピングは、オブジェクトのデータ・メンバーを、構造がXMLスキーマ・ドキュメント(XSD)により定義されているXML文書のXML要素に変換します。様々なXMLマッピング・タイプを使用して、XMLの単純および複合型の組合せにJavaオブジェクトの属性をマップできます。TopLinkでは、クラスのディスクリプタに各クラスのXMLマッピングを格納します。TopLinkでは、ディスクリプタを使用してXML文書からマップされたオブジェクトをインスタンス化し、新規または変更済のオブジェクトをXML文書として格納します。

表13-3は、XMLの単純および複合型の組合せにJavaオブジェクトの属性をマップするために使用可能なXMLマッピングのタイプを示しています。

表13-3 XMLマッピングのタイプ

マッピング・タイプ 説明

XMLダイレクト・マッピング

単純なオブジェクト属性をXML属性またはテキスト・ノードにマップします。

XMLコンポジット・ダイレクト・コレクション・マッピング

単純なオブジェクト属性のコレクションをXML属性またはテキスト・ノードにマップします。

XMLコンポジット・オブジェクト・マッピング

シングル・オブジェクトを含む任意の属性をXML要素にマップします。TopLinkランタイムでは、参照されたオブジェクトのディスクリプタを使用してその要素の内容を移入します。

XMLコンポジット・コレクション・マッピング

オブジェクトの同種のコレクションを含む属性を、複数のXML要素にマップします。TopLinkランタイムでは、参照されたオブジェクトのディスクリプタを使用してそれらの要素の内容を移入します。

XML任意オブジェクト・マッピング

XML任意オブジェクトのマッピングは、XMLコンポジット・オブジェクトのマッピングと類似しています。ただし、参照オブジェクトが異なるタイプ(Stringなど)である場合もあり、必ずしも継承や共通インタフェースを介して相互に関連付けられていない点が異なります。

XML任意コレクション・マッピング

XML任意コレクションのマッピングは、XMLコンポジット・コレクションのマッピングと類似しています。ただし、参照オブジェクトが異なるタイプ(Stringなど)である場合もあり、必ずしも継承や共通インタフェースを介して相互に関連付けられていない点が異なります。

XMLトランスフォーメーション・マッピング

カスタム・マッピングを作成し、1つ以上のXMLノードを使用してJavaクラスの属性に格納するオブジェクトを作成できるようにします。


13.1.9 TopLinkエディタの理解

TopLinkエディタを使用して、Javaクラスを構成して、コードを使用せずに様々なデータソース(リレーショナル・データベース、企業情報システム(EIS)、XMLスキーマなど)にマッピングできます。TopLinkエディタは、EJB 3.0 JPAなどの複数のマッピング標準をサポートしています。

TopLinkエディタには、アプリケーション・ナビゲータまたは「構造」ビューで選択した要素に固有の情報またはプロパティが表示されます。たとえば、アプリケーション・ナビゲータでTopLinkマップやセッション構成ファイル(sessions.xml)などのTopLinkプロジェクト要素を選択すると、TopLinkエディタでそのプロパティを構成できるようになります。同様に、「構造」ビューでTopLinkマップ、ディスクリプタ、マップされた属性、およびマップされていない属性を選択すると、それぞれのプロパティがTopLinkエディタに表示されます。

13.1.9.1 TopLinkマップの管理

TopLinkマップには、クラスをデータベース表またはXMLスキーマにどのようにマップするかに関する情報が含まれています。TopLinkエディタを使用して、次のようなマッピングの各コンポーネントを編集します。

  • ドライバ、URL、ログイン情報などのデータベース情報

  • アイデンティティ・マップ・オプション、キャッシュ・オプションなどのマッピングのデフォルト設定

TopLinkマップを構成するには、TopLinkマップ(tlMapなど)の「アプリケーション・ナビゲータ」ポップアップ・メニューの「開く」、またはTopLinkマップの「構造」ビューを選択します。TopLinkエディタに、リレーショナルやEISなどのタイプに応じて、オブジェクト・マップのプロパティが表示されます。リレーショナル・オブジェクト・マップに対してTopLinkエディタを使用すると、たとえば順序付けのポリシーを構成できます。TopLinkエディタの詳細は、『Oracle Fusion Middleware Oracle TopLink開発者ガイド』を参照してください。

TopLinkマッピングでは、ディスクリプタを使用して、データソース内で特定のクラスのインスタンスをどのように表現できるかに関する情報を格納します。マップのディスクリプタを構成するには、tlMapの「構造」ビュー・ディスクリプタを選択します。たとえば、エディタを使用すると、名前付き問合せを作成してアプリケーションのパフォーマンスを改善したり、ロック・ポリシーを構成してユーザーが互いの作業を上書きすることを回避できます。

TopLinkマッピングでは、データソース内でオブジェクトの属性がどのように表現されるかを定義します。「構造」ビューを使用してディスクリプタの属性のマッピングを構成するには、tlMapの「構造」ビュー・ディスクリプタ属性ポップアップ・メニューの「マップ」マッピング・タイプを選択します。

13.1.9.2 TopLinkセッションの管理

TopLinkセッション構成ファイル(sessions.xml)を使用すると、特定のプロジェクトのすべてのセッションを管理できます。TopLinkセッションの詳細は、『Oracle Fusion Middleware Oracle TopLink開発者ガイド』を参照してください。

TopLinkエディタでは、sessions.xmlの「構造」ビューの「開く」を選択することで、各セッションの情報(データソースのログイン情報、JTAトランザクションの使用、キャッシングなど)を完全にカスタマイズできます。また、TopLinkエディタでは、個々のセッションおよびそれらを管理するセッション・ブローカを作成および構成できます。セッション・ブローカを管理するには、sessions.xmlの「構造」ビュー・セッション・ブローカを選択します。

13.1.9.3 永続性構成の管理

TopLinkエディタを使用すると、TopLink JPAプロジェクト内のエンティティをパッケージ化するpersistence.xmlファイルを構成できます。永続性ユニットを作成するには、persistence.xmlのアプリケーション・ナビゲータの「開く」を選択します。

「構造」ウィンドウには、JPAディスクリプタおよび永続性ユニットが表示されます。永続ユニットを構成するには、persistence.xmlの「構造」ビュー永続性ユニットを選択します。

13.1.9.4 TopLinkの「構造」ビューのツールバー

「構造」ビューには、アプリケーション・ナビゲータまたはTopLinkエディタで選択されているTopLink要素に関する詳細情報が表示されます。次に例を示します。

  • EJBまたはJavaクラスを使用している場合、「構造」ビューには、関連のTopLinkディスクリプタおよびそのマッピンク属性が表示されます。

  • TopLinkセッション構成ファイルを使用している場合、「構造」ビューには、セッションおよびセッション・ブローカが表示されます。

  • 永続性構成を使用している場合、「構造」ビューには、JPAディスクリプタおよび永続性ユニットが表示されます。

「構造」ビューには、ディスクリプタ、マッピング、セッション、および永続性ユニットを変更するためのアクセスを提供するツールバーがあります。このツールバーは状況に依存するため、「構造」ビューで選択されている要素によって表示されるボタンは変わります。

表13-4 TopLinkの「構造」ビューのツールバーのアイコン

アイコン 名前 機能
ディスクリプタの追加または削除

ディスクリプタの追加または削除

TopLinkマップからディスクリプタを追加または削除します。

自動マップ

自動マップ

選択したディスクリプタまたは属性を同じ名前のデータベース・フィールドに自動マップしようとします。

集約ディスクリプタ

集約ディスクリプタ

ディスクリプタ・タイプを集約ディスクリプタに変更します。つまり、表、主キーおよび他のオプションに関するディスクリプタの定義が所有ディスクリプタのものになります。

クラス・ディスクリプタ

クラス・ディスクリプタ

ディスクリプタ・タイプをクラス・ディスクリプタに変更します。

マップ

マップ

選択した属性のマッピング・タイプを選択します。

新規の永続性ユニット

新規の永続性ユニット

新規永続性ユニットを作成する場合、クリックします。

新規データベース・セッションまたはサーバー・セッションを作成します

新規データベース・セッションまたはサーバー・セッションを作成します

セッション構成ファイル内でセッションを作成する場合、クリックします。

セッション・ブローカの作成

セッション・ブローカの作成

新規のセッション・ブローカを作成する場合、クリックします。

新規の名前付き接続プールを作成します

新規の名前付き接続プールを作成します

新規の名前付き接続プール(使用目的は任意ですが、通常はセキュリティ目的の接続プール)を作成する場合、クリックします。

シーケンス接続プールを追加します

シーケンス接続プールを追加します

順序付けに特化して使用される接続プールを追加する場合、クリックします。TopLinkでは、新規オブジェクトに識別子を割り当てる必要があるときは常にシーケンス接続プールが使用されます。


13.1.9.5 アプリケーション・ナビゲータのTopLinkプロジェクト要素

アプリケーション・ナビゲータには、TopLinkマップ、デプロイメント・ディスクリプタおよびセッション構成情報を含む、TopLinkプロジェクトに関連付けられた各要素が表示されます。

アプリケーション・ナビゲータのTopLinkプロジェクト要素には、次を含めることができます。

  • 「TopLink」フォルダ

  • セッション構成ファイル(sessions.xml)

  • TopLinkマップ(tlMap)

13.1.9.6 エディタ・ウィンドウのTopLinkエディタ・タブ

TopLinkエディタには、TopLinkマッピング情報が表示されます。このエディタに表示される情報は、アプリケーション・ナビゲータまたは「構造」ビューで選択したTopLink要素によって異なります。

13.1.9.7 「構造」ビューのTopLinkプロジェクト要素

「構造」ビューには、アプリケーション・ナビゲータまたはTopLinkエディタで選択されているTopLink要素に関する詳細情報が表示されます。

  • EJBまたはJavaクラスを使用している場合、「構造」ビューには、関連のTopLinkディスクリプタおよびそのマッピンク属性が表示されます。

  • TopLinkセッション構成ファイルを使用している場合、「構造」ビューにはセッションおよびセッション・ブローカが表示されます。

  • 永続性構成を使用している場合、「構造」ビューにはJPAディスクリプタおよび永続性単位が表示されます。

「構造」ビューで項目を選択すると、TopLinkエディタに次のプロパティが表示されます。

  • TopLinkマップ(tlMap)

  • ディスクリプタ

  • マップされたJava属性(1対1マッピング)

  • アンマップ属性

項目について特定の機能を実行するには、アプリケーション・ナビゲータで項目を選択してから次のようにします。

  • 「構造」ビューでオブジェクトを右クリックし、機能をポップアップ・メニューから選択します。

  • 「構造」ビューでオブジェクトを選択し、「構造」ツールバーのボタンをクリックします。

13.1.9.8 TopLink「構造」ビューのツールバーの使用

TopLinkエディタの「構造」ビューには、ディスクリプタとマッピングを簡単に変更できるツールバーがあります。このツールバーは状況に依存するため、「構造」ビューで選択されている要素によって実際に表示されるボタンは変わります。

13.1.9.9 TopLinkマッピングのメッセージ・ログでのステータス・レポート

TopLinkエディタのエラー・メッセージおよびステータス・メッセージは、「TopLinkの問題」ウィンドウに表示されます。

13.1.9.10 TopLinkのプリファレンスの構成

使用する永続性プロバイダ、使用するJPQLエディタ、および問合せタイプとフォーマットを構成できます。

TopLinkエディタのプリファレンスを構成するには、次のようにします。

  1. 「ツール」「プリファレンス」の順に選択します。

  2. 「カテゴリ」リストで、「TopLinkのカスタマイズ」を開きます。

  3. JPAオプションおよびマッピング・オプションを構成します。

  4. 各フィールドを完了し、「OK」をクリックします。

13.1.9.11 TopLinkマッピング・プロジェクトの作成方法

JDeveloperでは、TopLinkディスクリプタ(詳細は第13.1.7項「TopLinkディスクリプタの使用」を参照)およびマッピング(詳細は第13.1.8項「TopLinkマッピングの使用」を参照)はTopLinkマップ(.mwpファイル)に格納され、セッションはsessions.xmlファイルに格納されます。TopLinkマップには、クラスがデータベース表にどのようにマップされるかに関する情報が含まれています。TopLinkエディタを使用して、次のようなマッピングの各コンポーネントを編集します。

  • ドライバ、URL、ログイン情報などのデータベース情報

  • キャッシュ・オプションなどのマッピングのデフォルト設定

TopLinkマップ(またはTopLinkマップの要素)を選択すると、その属性がTopLinkエディタに表示されます。

TopLinkは、開発者がJDeveloperマッピング・エディタで作成したディスクリプタとマッピングを使用して、アプリケーションの永続エンティティをデータベースにマップします。マッピング・エディタは、次のようなプロジェクト開発に対するアプローチをサポートしています。

  • マッピング用のクラスと表のインポート

  • クラスのインポート、および表とマッピングの生成

  • 表のインポート、およびクラスとマッピングの生成

  • クラス定義と表定義の作成

JDeveloperマッピング・エディタには、アプリケーションの永続エンティティまたはリレーショナル・モデル・コンポーネントを生成するための機能がいくつか用意されていますが、これらのユーティリティの目的はアプリケーションのラウンドトリップ開発を完了することではなく、短期間の初期開発方法を支援することのみです。

新規TopLink対応プロジェクトを作成するには、次のようにします。

  1. 「ファイル」「新規」の順に選択します。

  2. 「カテゴリ」リストで、「一般」「プロジェクト」を選択します。

  3. 「項目」リストで、「TopLinkプロジェクト」を選択します。

  4. 「OK」をクリックします。

    「新規TopLink対応プロジェクト」ダイアログが表示されます。

  5. 各フィールドを完了し、「OK」をクリックします。

    オブジェクト・マップを含む新規プロジェクトが作成されます。

既存のJDeveloperプロジェクトにTopLinkマップを追加するには、次のようにします。

  1. アプリケーション・ナビゲータで既存のプロジェクトを右クリックし、「新規」を選択します。

  2. 「カテゴリ」リストで、「ビジネス層」「TopLink/JPA」を選択します。

  3. 「項目」リストで、「TopLinkオブジェクト・マップ」を選択します。

  4. 各フィールドを完了し、「OK」をクリックします。

    既存のプロジェクトにTopLinkマップ・ファイルが作成されます。

13.1.9.12 コンバータ・マッピングの使用方法

TopLinkでは、次のダイレクト・マッピング・タイプは使用されません。

  • タイプ変換

  • オブジェクト・タイプ

  • シリアライズ・オブジェクト

かわりに、TopLinkでは特殊なコンバータによって、フィールドへ直接マッピングを使用します。下位互換性のあるデプロイXMLファイルを生成するには、「TopLinkマップ」オプションの「一般」ページの「推奨されないダイレクト・マッピングの生成」オプションを使用します。

13.1.9.13 TopLinkディスクリプタの自動マップ方法

TopLinkの自動マップ・ウィザードでは、Javaクラス属性を同様の名前のデータベース・フィールドに自動的にマップできます。自動マップ・ウィザードでは、マップされていない属性に対するマッピングのみ作成されます。すでに定義されているマッピングは変更されません。

自動マップ・ウィザードは、プロジェクト全体または特定のクラス、あるいはディスクリプタに対して使用できます。

TopLinkディスクリプタを自動マップするには、次のようにします。

  1. アプリケーション・ナビゲータで、「TopLinkマップ」を選択します。

    「構造」ウィンドウにTopLinkマップ(およびその属性)が表示されます。

  2. 「構造」ウィンドウで、TopLinkマップ(または特定のJavaクラスまたはTopLinkディスクリプタ)を右クリックし、「自動マップ」を選択します。

    自動マップ・ウィザードが表示されます。ウィザードの各ページを完了します。

13.1.9.14 データ・ソース・ログイン情報

TopLinkマッピングの場合、データソースへのアクセスに必要な情報を指定するセッション・メタデータでセッション・ログインを構成できます。

13.2 TopLink JPAプロジェクトの開発

Plain Old Java Object (POJO)に基づいてJavaオブジェクトを永続化するためにTopLink JPA (Java永続性API)プロジェクトを使用します。

Java永続性APIは、POJOに基づくJava永続性のための軽量フレームワークです。JPAは、EJB 3.0仕様の一部です。JPAは、移植性のある標準的な方法でJavaオブジェクトをリレーショナル・データベース表にマップする方法を宣言して定義できるオブジェクト・リレーショナル・マッピング方法を提供します。また、このAPIを使用すると、EJB 3.0準拠のコンテナ内と標準のJava SE 5およびJava SE 6環境内の両方で、軽量Javaオブジェクト全体にわたって作成、削除および問合せを行うことが可能です。

JPAのTopLink実装は、EclipseLinkによって提供されます。詳細は、http://wiki.eclipse.org/EclipseLinkを参照してください。

TopLink JPAを使用したオブジェクト・リレーショナル・マッピングは、次の方法によって行うことができます。

表13-5 TopLink JPAを使用したオブジェクト・リレーショナル・マッピングの実行方法

方法 説明

メタデータ注釈の使用

注釈は、JPA永続性プロバイダが永続動作を管理するために実行時に解釈できるように、対応するJavaクラス・ファイルにコンパイルされるメタデータを使用してJavaソース・コードを装飾するための簡単な表現手段です。注釈を使用すると、エンティティの永続動作を構成できます。

XMLの使用

XMLマッピング・メタデータは、単独で使用したり、注釈メタデータと組み合せて使用できます。また、XMLマッピング・メタデータを使用して、注釈メタデータを上書きすることもできます。

デフォルト・プロパティ

各注釈には、デフォルト値があります。永続性エンジンにより、アプリケーションの大半に適用されるデフォルトが定義されます。デフォルト値を上書きする場合、適切な値を指定するのみですみます。構成値は必須ではなく、このルールの例外です。これは、例外による構成と呼ばれます。

エンティティの構成

エンティティのアイデンティティ、およびエンティティのロック技術や順序生成を構成できます。

基本プロパティ・マッピングの宣言

シンプルJavaタイプは、エンティティの即時状態の一部としてそのフィールドまたはプロパティにマップされます。シンプルJavaタイプのマッピングは、基本マッピングと呼ばれます。デフォルトでは、TopLink永続性プロバイダにより、シンプル・タイプの基本マッピングは自動的に構成されます。

関連のマッピング

TopLink永続性プロバイダでは、関連を明示的にマップする必要があります。このような注釈を@OnetoOne@ManytoOne@OnetoMany@ManytoMany@Mapkeyおよび@Orderbyとして使用して、データベースによる関連の実装方法の微調整を行うエンティティ関連のタイプおよび特性を指定します。

継承のマッピング

デフォルトでは、TopLink永続性プロバイダでは、すべての永続性フィールドが単一のエンティティ・クラスによって定義されることが想定されます。エンティティ・クラスによって1つ以上のスーパークラスから一部またはすべての永続フィールドが継承される場合、@Inheritance@MappedSuperclass@DiscriminatorColumnおよび@DiscriminatorValue注釈を使用します。

埋込みオブジェクトのマッピング

埋込みオブジェクトには、独自の永続アイデンティティはありません。これは、そのアイデンティティとしてエンティティに依存します。デフォルトでは、TopLink永続性プロバイダでは、すべてのエンティティがそれ自体の表にマップされることが想定されます。他のエンティティが所有するエンティティのこの動作を上書きするには、次の注釈を使用します。

  • @Embeddable

  • @Embedded

  • @AttributeOverride

  • @AttributeOverrides

  • @AssociationOverride

  • @AssociationOverrides


13.2.1 JPA永続性ディスクリプタ(persistence.xml)の作成および構成方法

永続性構成ファイル(persistence.xml)を使用して、エンティティをパッケージ化します。

永続性構成を作成するには、次のようにします。

  1. 「ファイル」「新規」の順に選択します。

  2. 「カテゴリ」リストで、「ビジネス層」→「TopLink/JPA」を選択します。

  3. 「項目」リストで、「JPA永続性ディスクリプタ」を選択します。

  4. 「OK」をクリックします。

    「新規のJPA永続性ディスクリプタ」ダイアログが表示されます。

  5. 各フィールドを完了し、新規のJPA永続性ディスクリプタ・ファイル(persistence.xml)のデフォルトの永続性ユニットを作成し、「OK」をクリックします。

    例13-1に、永続性構成の例を示します。

例13-1 永続性構成(persistence.xml)の例

<?xml version="1.0" encoding="windows-1252" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
   version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
 <persistence-unit name="myPersistenceUnit">
   <properties>
      <property name="toplink.target-database" value="Oracle11g"/>
       <property name="toplink.target-server" value="WebLogic_10"/>
   </properties>
 </persistence-unit>
 <persistence-unit name="myPersitenceUnitName">
...
 </persistence-unit>
</persistence>

永続性構成(persistence.xml)ファイルを構成するには、次のようにします。

  1. アプリケーション・ナビゲータで「persistence.xml」ノードを選択します。

  2. 「構造」ウィンドウで、「JPA永続性ディスクリプタ」を選択します。

  3. 「JPA永続性ディスクリプタ」(persistence.xml)ページで「一般」および「メタデータ・プリファレンス」タブを完了します。

13.2.2 永続性ユニットの作成方法

永続性ユニットを作成するには、次のようにします。

  1. アプリケーション・ナビゲータまたは「構造」ウィンドウで、永続性構成ファイル(persistence.xml)をダブルクリックします。

  2. 「一般」ページで、「新規の永続性ユニットの作成」をクリックし、新規の永続性ユニットを作成します。

  3. 「新規の永続性ユニット」ダイアログで各フィールドを完了します。

  4. 「メタデータ・プリファレンス」ページで、新規マッピング・メタデータを永続化する方法を指定します。注釈またはJPAマッピング・ディスクリプタを指定できます。この選択を行うには、少なくとも1つのorm.xmlマッピング・ディスクリプタ・ファイルを最初に作成する必要があります。(第13.2.4項「JPAディスクリプタの作成方法」を参照。)

    例13-2に、永続性ユニットの例を示します。

例13-2 永続性ユニットの例

...
 <persistence-unit name="myPersitenceUnitName"
           transaction-type="RESOURCE_LOCAL">
     <mapping-file>META-INF/orm.xml</mapping-file>
     <exclude-unlisted-classes/>
     <properties>
       <property name="eclipselink.jdbc.driver" 
                 value="oracle.jdbc.OracleDriver"/>
       <property name="eclipselink.jdbc.url"
                 value="jdbc:oracle:thin:@localhost:1521:XE"/>
       <property name="eclipselink.jdbc.user" value="scott"/>
       <property name="eclipselink.jdbc.password"
                 value="3E20F8982C53F4ABA825E30206EC8ADE"/> 
       <property name="eclipselink.target-database" value="Oracle11g"/>
       <property name="eclipselink.logging.level" value="FINER"/>
       <property name="eclipselink.jdbc.native-sql" value="true"/> 
       <property name="eclipselink.target-server" value="WebLogic_10"/>
     </properties>
 </persistence-unit>
...

13.2.3 永続性ユニットの構成方法

「永続性ユニット」ページ(最初にアプリケーション・ナビゲータでpersistence.xmlを選択してから「構造」ビューでJPAディスクリプタを展開することによってアクセス)のタブを使用して、永続性ユニットを構成できます。

永続性ユニットの構成には、次の構成のような多くのステップが含まれます。

  • 一般情報

  • 接続情報

  • TopLink情報

  • スキーマ生成情報

  • プロパティ

  • メタデータ情報

JPA永続性ユニットの一般情報を構成するには、次のようにします。

  1. アプリケーション・ナビゲータでJPA永続性ディスクリプタ(persistence.xml)を選択します。

  2. 「構造」ウィンドウで永続性ユニットを選択します。

    「永続性ユニット」ページが表示されます。

  3. 「一般」タブでフィールドを完了し、永続性ユニットがアプリケーション・サーバーおよびデータベースに接続する方法を指定します。

JPA永続性ユニットの接続情報を構成するには、次のようにします。

  1. アプリケーション・ナビゲータでJPA永続性ディスクリプタ(persistence.xml)を選択します。

  2. 「構造」ウィンドウで永続性ユニットを選択します。

    「永続性ユニット」ページが表示されます。

  3. 「接続」タブでフィールドを完了し、永続性プロバイダを選択し、一般プロパティ(JPAマッピング・ディスクリプタ、Javaアーカイブおよびマップされたクラスなど)を構成します。

JPA永続性ユニットに関するTopLinkセッション固有の情報を構成するには、次のようにします。

  1. アプリケーション・ナビゲータでJPA永続性ディスクリプタ(persistence.xml)を選択します。

  2. 「構造」ウィンドウで永続性ユニットを選択します。

    「永続性ユニット」ページが表示されます。

  3. 「TopLinkのカスタマイズ」タブでフィールドを完了し、永続性ユニットに関するTopLink固有の情報を指定します。

DDL生成オプションを構成するには、次のようにします。

ほとんどのJPA永続性プロバイダではこのサポートが提供されていますが、これらのオプションはTopLink固有のものです。

  1. アプリケーション・ナビゲータでJPA永続性ディスクリプタ(persistence.xml)を選択します。

  2. 「構造」ウィンドウで永続性ユニットを選択します。

    「永続性ユニット」ページが表示されます。

  3. 「スキーマ生成」タブでフィールドを完了し、TopLinkでDDLスクリプトを生成する方法を指定します。

永続性ユニットに関するTopLink固有でないプロパティを構成するには、次のようにします。

  1. アプリケーション・ナビゲータでJPA永続性ディスクリプタ(persistence.xml)を選択します。

  2. 「構造」ウィンドウで永続性ユニットを選択します。

    「永続性ユニット」ページが表示されます。

  3. 「プロパティ」タブでフィールドを完了し、TopLink固有でない一般プロパティを指定します。

永続性ユニットのメタデータ上書きを構成するには、次のようにします。

  1. アプリケーション・ナビゲータでJPA永続性ディスクリプタ(persistence.xml)を選択します。

  2. 「構造」ウィンドウで永続性ユニットを選択します。

    「永続性ユニット」ページが表示されます。

  3. 「メタデータ・プリファレンス」タブでフィールドを完了し、マッピング・ディスクリプタに関する情報を指定します。

    このタブが使用可能なのは、永続性ユニットにJPAマッピング・ディスクリプタが含まれる場合のみです。

13.2.4 JPAディスクリプタの作成方法

JPAマッピング・ディスクリプタは、注釈の代替手段として使用されます。JPAマッピング・ディスクリプタとして追加する情報により、Java注釈が上書きされます。

新規のJPAマッピング・ディスクリプタを作成するには、次のようにします。

  1. アプリケーション・ナビゲータで永続性構成(persistence.xml)を選択します。

  2. 「一般」タブを選択します。

  3. 「JPAマッピング・ディスクリプタ」領域で、「新規のJPAマッピング・ディスクリプタの作成」ボタンをクリックします。

  4. ダイアログのフィールドを完了し、「OK」をクリックします。

    マッピング・ディスクリプタ(orm.xml)がプロジェクトに追加されます。

  5. ORM (orm.xml)ページでJPAディスクリプタごとに次のタブを完了します。

    • 一般

    • 永続性ユニットのデフォルト

    • ジェネレータ

    • 問合せ

JPAマッピング・ディスクリプタの一般情報を構成するには、次のようにします。

  1. アプリケーション・ナビゲータでJPAマッピング・ディスクリプタ(orm.xml)を選択します。

  2. 「構造」ウィンドウでディスクリプタを選択します。

    ORM (orm.xml)ページが表示されます。

  3. 「一般」タブでフィールドを完了し、永続性プロバイダを選択し、一般プロパティ(マップされたクラス、開発データベースおよび他のデフォルトなど)を構成します。

13.2.4.1 永続性ユニットのデフォルトの構成方法

このマッピング・ディスクリプタが含まれる永続性ユニットおよび関連エンティティに適用される設定を構成できます。これらの値は、永続性ユニット・レベルの任意の構成設定によって上書きされます。

永続性ユニットのデフォルトを構成するには、次のようにします。

  1. アプリケーション・ナビゲータでJPAマッピング・ディスクリプタ(orm.xml)を選択します。

  2. 「構造」ウィンドウでディスクリプタを選択します。

    ORM (orm.xml)ページが表示されます。

  3. 「永続性ユニットのデフォルト」タブでフィールドを完了し、アクセス・タイプ、エンティティ・リスナーおよび他のデフォルトを構成します。

13.2.4.2 ジェネレータの構成方法

このマッピング・ディスクリプタによって使用されるジェネレータを定義できます。

ジェネレータを構成するには、次のようにします。

  1. アプリケーション・ナビゲータでJPAマッピング・ディスクリプタ(orm.xml)を選択します。

  2. 「構造」ウィンドウでディスクリプタを選択します。

    ORM (orm.xml)ページが表示されます。

  3. 「ジェネレータ」タブでフィールドを完了し、データベース順序および表ジェネレータを構成します。

13.2.4.3 問合せの構成方法

関連する永続性ユニットで使用するためにこのマッピング・ディスクリプタでJPQLおよびネイティブ問合せを定義できます。

問合せを構成するには、次のようにします。

  1. アプリケーション・ナビゲータでJPAマッピング・ディスクリプタ(orm.xml)を選択します。

  2. 「構造」ウィンドウでディスクリプタを選択します。

    ORM (orm.xml)ページが表示されます。

13.2.5 JPAマッピングの使用

Oracle TopLinkには、完全なJPA 2.0準拠のJPA実装が用意されています。これは、すべての必須機能、多くのオプション機能、および一部の追加機能に完全に準拠しています。

TopLinkは、EJB 3.0コンテナの内外でのデプロイメントをサポートしています。これには、Webコンテナ、他のEJB 3.0以外のJava EEコンテナ、およびJava SE環境が含まれます。

TopLinkは、プラッガブル永続性機能を介して、任意のEJB 3.0準拠コンテナで永続性プロバイダとして機能します。

13.2.6 TopLink拡張機能の使用

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

TopLink JPAは、JPA仕様による定義内容に対して拡張機能を提供します。これらの拡張機能は、永続性ユニット・プロパティ、問合せヒント、注釈、TopLink独自のXMLメタデータおよびカスタムAPIの形式で提供されます。

13.3 TopLinkリレーショナル・プロジェクトの開発

TopLinkエディタは、JDBCを使用してアクセスされる従来型のリレーショナル・データベースにJavaオブジェクトをマップするリレーショナル・プロジェクトの作成を完全にサポートします。従来のリレーショナル・データベース、またはオブジェクト記憶域に特化されたデータ型をサポートするオブジェクト・リレーショナル・データベース(どちらのデータベースも、JDBCを使用してアクセスします)に対するJavaオブジェクトのトランザクション永続性を可能にするために、TopLinkリレーショナル・プロジェクトを使用します。

オブジェクト・リレーショナル・データベースに対するリレーショナル・プロジェクトを作成するには、Javaコードを使用してプロジェクトを作成する必要があります。オブジェクト・ストレージ用に特化されたデータ・タイプをサポートする、JDBCを使用してアクセスされるオブジェクト・リレーショナル・データベース( Oracle Databaseなど)に対するJavaオブジェクトのトランザクション永続性を可能にする、リレーショナル・プロジェクトを作成できます。

13.3.1 リレーショナル・プロジェクトおよびオブジェクト・マップの作成方法

オブジェクト・リレーショナル・データベースに対するリレーショナル・プロジェクトを作成するには、Javaコードを使用してプロジェクトを作成する必要があります。オブジェクト・ストレージ用に特化されたデータ・タイプをサポートする、JDBCを使用してアクセスされるオブジェクト・リレーショナル・データベース( Oracle Databaseなど)に対するJavaオブジェクトのトランザクション永続性を可能にする、リレーショナル・プロジェクトを作成できます。

新規リレーショナル・プロジェクトを作成するには、次のようにします。

  1. 「ファイル」「新規」の順に選択します。

  2. 「カテゴリ」リストで、「一般」「プロジェクト」を選択します。

  3. 「項目」リストで、「TopLinkプロジェクト」を選択します。

  4. 「OK」をクリックします。

    「新規TopLink対応プロジェクト」ダイアログが表示されます。

  5. ダイアログでフィールドを完了し、プロジェクト名、プロジェクトの場所、およびTopLinkマップを指定します。

  6. 「データソース」領域で、「データベース」を選択し、特定のデータベース情報を指定します。

  7. 「OK」をクリックします。

    TopLinkマップおよびTopLinkセッション構成ファイル(sessions.xml)が含まれる新規プロジェクトが作成されます。

リレーショナル・プロジェクトの新規TopLinkオブジェクト・マップを作成するには、次のようにします。

  1. 「ファイル」「新規」の順に選択します。

  2. 「カテゴリ」リストで、「ビジネス層」「TopLink/JPA」を選択します。

  3. 「項目」リストで、「TopLinkオブジェクト・マップ」を選択します。

  4. 「OK」をクリックします。

    「新規TopLinkオブジェクト・マップ」ダイアログが表示されます。

  5. ダイアログでフィールドを完了し、TopLinkマップを指定します。

  6. 「データソース」領域で、「データベース」を選択し、特定のデータベース情報を指定します。

  7. 「OK」をクリックします。

    TopLinkマップおよびTopLinkセッション構成ファイル(sessions.xml)が含まれる新規プロジェクトが作成されます。

13.3.2 リレーショナル・ディスクリプタの作成方法

リレーショナル・ディスクリプタには、リレーショナル・データベース内の表にマップするJavaオブジェクトを記述します。リレーショナル・プロジェクトでは、ディスクリプタをクラス・ディスクリプタまたは集約ディスクリプタとして指定できます。

クラス・ディスクリプタは任意の永続オブジェクトに適用できますが、集約オブジェクトには適用できません。クラス・ディスクリプタを使用すると、集約コレクション・マッピングおよび集約オブジェクト・マッピングを除く任意のリレーショナル・マッピングを構成できます。

集約オブジェクトは、所有オブジェクトに厳密に依存するオブジェクトです。集約ディスクリプタでは、表、主キー、または多くの標準ディスクリプタ・オプションは所有ディスクリプタから継承されるため、これらは定義されません。集約マッピングを構成し、ターゲット・オブジェクト内のデータ・メンバーを、ソース・オブジェクトの基礎となるデータベース表のフィールドと関連付けるには、ターゲット・オブジェクトのディスクリプタを集約として指定する必要があります。

ディスクリプタの継承は集約として構成できますが、この場合、継承ツリー内のすべてのディスクリプタが集約である必要があります。集約ディスクリプタとクラス・ディスクリプタは、同じ継承ツリーに置くことはできません。

クラス・ディスクリプタを集約ディスクリプタに変更したり、リレーショナル・ディスクリプタから集約指定を削除してデフォルトのタイプに戻すこともできます。詳細は、第13.3.3項「リレーショナル・ディスクリプタの構成方法」を参照してください。


注意:

クラス・ディスクリプタを集約ディスクリプタに変更する場合、ディスクリプタの既存の情報は永久的に失われます。ディスクリプタをクラス・ディスクリプタに戻す場合、これを再構成する必要があります。

新規TopLinkディスクリプタを作成するには、次のようにします。

  1. アプリケーション・ナビゲータでTopLinkマップを右クリックし、「ディスクリプタの追加または削除」を選択します。

  2. TopLinkディスクリプタの作成元のパッケージおよびクラスを選択し、「OK」をクリックします。

    「構造」ウィンドウでTopLinkマップにディスクリプタが追加されます。

13.3.3 リレーショナル・ディスクリプタの構成方法

リレーショナル・ディスクリプタはクラス・タイプまたは集約タイプとして構成できます。デフォルトでは、Javaクラスをリレーショナル・プロジェクトに追加すると、このためのリレーショナル・クラス・ディスクリプタが自動的に作成されます。

クラス・ディスクリプタは集約ディスクリプタに変更できます。

TopLinkリレーショナル・クラス・ディスクリプタを集約ディスクリプタに構成するには、次のようにします。

  1. アプリケーション・ナビゲータでTopLinkマップを選択します。

  2. 「構造」ウィンドウでディスクリプタを右クリックし、「ディスクリプタ・タイプ」サブメニューで「集約」を選択します。

    これで、選択したディスクリプタが集約ディスクリプタになります。

  3. 集約ディスクリプタをクラス・ディスクリプタに変換するには、ディスクリプタを右クリックし、「ディスクリプタ・タイプ」サブメニューで「クラス」を選択します。

13.4 TopLink XMLプロジェクトの開発

XMLプロジェクトを使用すると、JavaオブジェクトからXMLへのマッピングを制御する注釈を定義するJava Architecture for XML Binding (JAXB)を使用して、JavaオブジェクトとXML文書間で非トランザクション型の変換を行うことができます。

TopLinkランタイムは、1つ以上のXMLスキーマに基づいてXMLデータ変換を行います。XMLプロジェクトでは、TopLinkエディタが配布XMLのスキーマを直接参照し、指定したスキーマに関して構成されたマッピングをエクスポートします。

TopLinkは、JAXBの上部に追加の機能レイヤーを提供します。特に、TopLinkには、JAXB固有のファイルとTopLink固有のファイルの両方を生成するTopLink JAXBコンパイラが用意されています。

JAXBコンパイラは、XSD内の名前属性のコンテンツ、要素または実装に従って名前が付けられた実装クラスを生成します。生成された実装クラスは、各JAXBプロパティのプライベート属性を持つシンプル・ドメイン・クラスです。public getおよびpublic setメソッドは、属性値を戻すか設定します。

JAXBコンパイラは、TopLinkプロジェクト・ファイル、session.xmlファイル、およびTopLinkプロジェクトXMLファイルを生成します。任意の実装クラスに、型保証列挙へのマッピングが含まれる場合、TopLink JAXBコンパイラは、DescriptorAfterLoadsという名前の単一クラスを生成します。

TopLinkは、実装クラスを生成するために使用されたXMLスキーマに対して、完全なオブジェクト・ツリーとサブツリーの両方を検証できます。さらに、TopLinkは、オブジェクトの実装クラスを生成するために使用されたスキーマに対して、ルート・オブジェクト(XML文書のルート要素に対応するオブジェクト)と非ルート・オブジェクトの両方を検証できます。

JAXBは、標準JavaオブジェクトとXMLの間の変換用APIを提供します。JAXBは、JavaオブジェクトからXMLへのマッピングを制御する注釈を定義します。詳細は、http://www.oracle.com/technetwork/java/index-jsp-137051.htmlを参照してください。

JAXBは、TopLinkがオブジェクトのセットをXMLにマーシャリングしたりXML文書をオブジェクトにアンマーシャリングするために使用するマッピングのデフォルト・セットも定義します。TopLinkは、JAXBの上部に追加の機能レイヤーを提供します。このレイヤーにより、JAXBオブジェクト・モデルを再コンパイルしなくても、既存のオブジェクト・モデルからTopLinkマッピングを作成し、それを引き続き操作できるようになります。

13.4.1 XMLプロジェクトの作成方法

新規XMLプロジェクトを作成するには、次のようにします。

  1. 「ファイル」→「新規」の順に選択します。

  2. 「カテゴリ」リストで、「一般」→「プロパティ」→「TopLink」を選択します。

  3. 「項目」リストで、「TopLinkプロジェクト」を選択します。

  4. 「OK」をクリックします。

    新規TopLink対応マップ・ダイアログが表示されます。

  5. ダイアログでフィールドを完了し、プロジェクト名、プロジェクトの場所、およびTopLinkマップを指定します。

  6. 「データソース」領域で、「データベース」を選択し、特定のデータベース情報を指定します。

  7. 「OK」をクリックします。

    TopLinkマップおよびTopLinkセッション構成ファイル(sessions.xml)が追加されます。

13.4.2 XMLオブジェクト・マップの作成方法

新規TopLinkオブジェクト・マップを作成するには、次のようにします。

  1. 「ファイル」→「新規」の順に選択します。

  2. 「カテゴリ」リストで、「ビジネス層」「TopLink/JPA」を選択します。

  3. 「項目」リストで、「TopLinkオブジェクト・マップ」を選択します。

  4. 「OK」をクリックします。

    新規TopLink対応マップ・ダイアログが表示されます。

  5. ダイアログでフィールドを完了し、プロジェクト名、プロジェクトの場所、およびTopLinkマップを指定します。

  6. 「データソース」領域で、「XML」を選択します。

  7. 「OK」をクリックします。

    TopLinkマップおよびTopLinkセッション構成ファイル(sessions.xml)が追加されます。

13.4.3 XMLディスクリプタの作成方法

XMLプロジェクトの新規TopLinkディスクリプタを作成するには、次のようにします。

  1. アプリケーション・ナビゲータでTopLinkマップを右クリックし、「ディスクリプタの追加または削除」を選択します。

  2. TopLinkディスクリプタの作成元のパッケージおよびクラスを選択し、「OK」をクリックします。

    「構造」ウィンドウでTopLink要素にディスクリプタが追加されます。

  3. 「XMLディスクリプタ」ページでフィールドを完了し、ディスクリプタを構成します。

13.4.4 XMLスキーマの追加方法

既存のデータ・モデル(XMLスキーマ文書)はあるが、対応するオブジェクト・モデル(ドメイン・オブジェクトに対するJavaクラス)がない場合は、次の手順を使用してTopLinkプロジェクトを作成し、対応するオブジェクト・モデルを自動生成します。

XMLスキーマを追加するには、次のようにします。

  1. アプリケーション・ナビゲータでTopLinkマップを選択します。

  2. 「構造」ウィンドウでスキーマ要素を右クリックし、「スキーマのインポート」を選択します。

  3. ダイアログでフィールドを完了し、インポートするXMLスキーマを指定します。

  4. 「OK」をクリックします。

    TopLinkマップにスキーマ(tlmap)が追加されます。

TopLink JAXBコンパイラでは、必要なJAXBファイルおよびTopLinkファイルがともにXMLスキーマ(XSD)文書から自動生成されるため、TopLinkによるJAXBアプリケーション開発が容易になります。生成後は、JAXBオブジェクト・モデルを再コンパイルしなくても、XMLマッピングを微調整できます。

13.5 TopLink EISプロジェクトの開発

Java EE Connector Architecture (JCA)アダプタおよびEISレコードを使用してアクセスされる非リレーショナル・データソースに対して、Javaオブジェクトのトランザクション永続性を可能にするTopLink EISプロジェクトを使用します。

EISプロジェクトを使用して、レガシーまたは非リレーショナルのデータ・ソースとTopLinkを統合することをお薦めします。TopLinkは、TopLinkマッピングを使用してJ2Cを介した、JavaオブジェクトからEISのマップ済レコード、索引付きレコードおよびXMLレコードへのマッピングをサポートしています。J2Cにより、非リレーショナルEISにアクセスするためのCommon Client Interface (CCI) APIが提供されます。このAPIにより、JDBCによってリレーショナル・データ・ソースへのアクセスに提供されるインタフェースに類似した、非リレーショナル・データ・ソースへのインタフェースが実現されます。

EISには、レガシー・データ・ソース、エンタープライズ・アプリケーション、レガシー・アプリケーションおよびその他の情報システムが含まれます。これらのシステムにはCustomer Information Control System (CICS)、Virtual Storage Access Method (VSAM)、Information Management System (IMS)、ADABASEデータベースおよびフラット・ファイルなどのソースが含まれます。EISプロジェクトを使用して、レガシーまたは非リレーショナルのデータ・ソースとTopLinkを統合することをお薦めします。EISデータ・ソースにアクセスするその他の方法には、次のものがあります。

13.5.1 EISプロジェクトの作成方法

Java EE Connector Architecture (JCA)アダプタおよびEISレコードを使用してアクセスされる非リレーショナル・データソースに対して、Javaオブジェクトのトランザクション永続性を可能にするEISプロジェクトを使用します。

EISプロジェクトを作成するには、次のようにします。

  1. 「ファイル」「新規」の順に選択します。

  2. 「カテゴリ」リストで、「一般」「プロジェクト」を選択します。

  3. 「項目」リストで、「TopLinkプロジェクト」を選択します。

  4. 「OK」をクリックします。

  5. ダイアログでフィールドを完了し、プロジェクト名、プロジェクトの場所、およびTopLinkマップを指定します。

  6. 「データソース」領域で、「EIS」を選択し、特定のEISプラットフォームを指定します。

  7. 「OK」をクリックします。

    TopLinkマップおよびTopLinkセッション構成ファイル(sessions.xml)が含まれる新規プロジェクトが作成されます。

13.5.2 EISオブジェクト・マップの作成方法

EISマッピングでは、オブジェクトのデータ・メンバーをオブジェクトのディスクリプタで定義されたEISレコード形式に変換します。

EISプロジェクトの新規TopLinkオブジェクト・マップを作成するには、次のようにします。

  1. 「ファイル」「新規」の順に選択します。

  2. 「カテゴリ」リストで、「ビジネス層」「TopLink/JPA」を選択します。

  3. 「項目」リストで、「TopLinkオブジェクト・マップ」を選択します。

  4. 「OK」をクリックします。

  5. ダイアログでフィールドを完了し、TopLinkマップを指定します。

  6. 「データソース」領域で、「EIS」を選択し、特定のEISプラットフォームを指定します。

  7. 「OK」をクリックします。

    TopLinkマップがプロジェクトに追加されます。

13.5.3 EISディスクリプタの作成方法

EISディスクリプタには、JCAアダプタを介してEISデータ・ソースにマップするJavaオブジェクトを記述します。

EISディスクリプタを作成するには、次のようにします。

  1. 「構造」ウィンドウでTopLinkマップを選択します。

  2. 「ディスクリプタの追加または選択済TopLinkマップからの削除を行います」ボタンをクリックします。

  3. EISディスクリプタの作成元のクラスを選択し、「OK」をクリックします。

    「構造」ウィンドウにEISディスクリプタが追加されます。

  4. EISディスクリプタのプロパティ・タブを完了します。

13.5.4 EISデータソースの使用

各EISプロジェクトに対して、これから使用するJCAデータ・ソース・プラットフォームを次の中から指定する必要があります。

  • Oracle AQ

  • Attunity Connect

  • IBM MQSeries

このプラットフォーム構成は、セッション・ログインによりオーバーライドされます(構成されている場合)。

13.6 TopLinkセッションの開発

各TopLinkマップはTopLinkセッションに属します。セッションとは、アプリケーションがTopLink機能へのアクセスに使用するファサードです。セッションにより、データ・ソース・プラットフォーム情報、データ・ソース・ログイン情報および特定のアプリケーションのマッピング・メタデータが関連付けられます。マッピング・メタデータは、各種セッションを定義することにより、様々なアプリケーションで再利用できます。

TopLinkセッションは、TopLinkランタイムにアクセスするための主要手段となります。TopLinkセッションを使用すると、アプリケーションは永続オブジェクトが含まれるデータソースに対して永続データ操作を実行できます。セッションにより、データ・ソース・プラットフォーム情報、データ・ソース・ログイン情報および特定のアプリケーションのマッピング・メタデータが関連付けられます。マッピング・メタデータは、各種セッションを定義することにより、様々なアプリケーションで再利用できます。

TopLinkには様々なセッション・タイプが用意されており、それぞれ異なる設計要件およびデータ・アクセス方法に向けて最適化されています。同一のアプリケーション内で様々なセッション・タイプを使用することができます。

TopLinkエディタには、次のTopLinkセッションがあります。

他のセッション・タイプは、Javaコードで直接構成できます。セッション・タイプの詳細は、『Oracle Fusion Middleware Oracle TopLink開発者ガイド』を参照してください。

13.6.1 新規セッション構成ファイルの作成方法

各TopLinkセッション構成(sessions.xmlファイル)には、複数のセッションとセッション・ブローカを含めることができます。また、含めたすべてのセッションに適用される各セッション構成のクラスパスを指定できます。

新規セッション構成ファイルを作成するには、次のようにします。

  1. 「ファイル」「新規」の順に選択します。

  2. 「カテゴリ」リストで、「ビジネス層」「TopLink/JPA」を選択します。

  3. 「項目」リストで、「TopLinkセッション構成」を選択します。

  4. 「OK」をクリックします。

    「TopLinkセッション構成の作成」ダイアログが表示されます。

  5. ダイアログの各フィールドを完了し、「OK」をクリックします。

    アプリケーション・ナビゲータで、sessions.xmlファイルが作成元のフォルダに追加され、デフォルトのセッションが「構造」ビューのセッション構成ノードに追加されます。

13.6.2 セッションの作成方法

TopLinkセッションは、TopLinkランタイムにアクセスするための主要手段となります。TopLinkセッションは、アプリケーションが永続オブジェクトが含まれるデータ・ソースに対してあらゆる永続データ操作を実行するための手段となります。

セッションにより、データ・ソース・プラットフォーム情報、データ・ソース・ログイン情報および特定のアプリケーションのマッピング・メタデータが関連付けられます。マッピング・メタデータは、各種セッションを定義することにより、様々なアプリケーションで再利用できます。

新規TopLinkセッションを作成するには、次のようにします。

  1. アプリケーション・ナビゲータで、TopLinkセッション構成ファイルを右クリックし、「開く」を選択します。

    TopLinkエディタにTopLinkセッション構成ファイルが表示され、このセッション構成ファイル内の既存のセッションおよびセッション・ブローカが表示されます。

  2. 「新規セッションの作成」をクリックします。

  3. 「新規セッション」ダイアログの各フィールドを完了し、「OK」をクリックします。

    「構造」ビューでセッション構成ノードに新規セッションが追加されます。

13.6.3 実行時におけるセッションの取得

セッションの作成および構成後は、実行時にTopLinkセッション・マネージャを使用してセッション・インスタンスを取得できます。TopLinkセッション・マネージャを使用すると、単一のエンティティの下で保持される一連のセッションを構築できます。セッション・マネージャは、静的ユーティリティ・クラスです。TopLinkのセッションをsessions.xmlファイルからロードし、名前によってセッションをメモリーにキャッシュし、各TopLinkセッションに対して1つのアクセス・ポイントを提供します。

セッション・マネージャには、2つの主な機能があります。すなわち、セッションのインスタンスを作成することと、各名前付きセッションの1つのインスタンスのみがセッション・マネージャの任意のインスタンスに対して存在することを保証することです。

セッション・マネージャでは、次のようにセッションをインスタンス化します。

  • クライアント・アプリケーションが名前を使用してセッションを要求します。

  • セッション・マネージャは、sessions.xmlファイル内のセッション名を検索します。セッション名が存在する場合、セッション・マネージャは、指定されたセッションをインスタンス化します。それ以外の場合は、例外が発生します。

  • インスタンス化の後、セッションは、アプリケーションが停止されるまで実行可能です。

セッション・インスタンスの設定後は、それを使用して特別タスク用にセッションの追加タイプを取得できます。セッション・マネージャは、EJBアプリケーションでは特に便利です。Enterprise Beanがセッション・マネージャを取得でき、そこから目的のセッションを取得できるためです。

13.6.4 セッション・ブローカの作成方法

セッション・ブローカは、クライアント・アプリケーションが単一のTopLinkセッションで複数のデータベースに透過的にアクセスできるようにするメカニズムです。セッション・ブローカには、サーバー・セッションとデータベース・セッションの両方が含まれる場合があります。セッション・ブローカはサーバー・セッションと使用することをお薦めします。これは、サーバー・セッションが最もスケーラブルなセッション・タイプであるためです。

サーバー・セッションを指定してセッション・ブローカを作成、構成した後は、実行時にセッション・ブローカからクライアント・セッションを取得して、各クライアントについてセッション・ブローカによって管理されているすべてのデータ・ソースへの専用接続を提供できます。

新規セッション・ブローカを作成するには、次のようにします。

  1. アプリケーション・ナビゲータで、セッション構成ファイル(sessions.xml)を開きます。

    セッション構成がTopLinkエディタに表示されます。

  2. 「新規セッション・ブローカの作成」をクリックします。

  3. ダイアログの各フィールドを完了し、セッション・ブローカに追加するセッションを選択し、「OK」をクリックします。

13.6.5 データソース・ログインの作成方法

TopLinkセッション構成ファイル(sessions.xml)により、TopLinkマップ内で指定したすべてのログイン情報が上書きされます。リレーショナル・データベースまたはEISデータソースに対してデータソース・ログインを作成できます。

データソースを作成する手順は、次のとおりです。

  1. アプリケーション・ナビゲータでTopLinkセッション構成(sessions.xml)を選択します。

  2. sessions.xml「構造」ビューで「セッション」ノードを展開し、TopLinkセッションを選択します。

    TopLinkセッション情報がTopLinkエディタに表示されます。

  3. 「ログイン」タブを選択します。

  4. 接続情報を完了します。

13.6.6 接続プールの作成方法

接続プールは、1つ以上のクライアントのかわりにデータソース接続の共有コレクション(プール)を作成および保持するサービスです。接続プールは、リクエストに基づいてプロセスに接続を提供し、プロセスが接続の使用を終了すると、接続をプールに返します。接続は、プールに返されると、他のプロセスで使用できます。

データ・ソースへの接続の確立には時間がかかるため、接続プールのこのような接続を再使用してパフォーマンスを向上できます。TopLinkは、接続プールを使用して、サーバーおよびクライアント・セッションで使用される接続を管理および共有します。単一のデータソースへの接続を再利用することにより、必要な接続数が減り、アプリケーションで多くのクライアントをサポートできるようになります。

新規接続プールを作成するには、次のようにします。

  1. アプリケーション・ナビゲータでTopLinkセッション構成(sessions.xml)を選択します。

  2. sessions.xml「構造」ウィンドウで「セッション」ノードを展開し、TopLinkセッションを選択します。

  3. セッションを右クリックし、ポップアップ・メニューの「新規」「名前付き接続プール」を選択します。

  4. 接続プールの名前を入力し、「OK」をクリックします。

    「構造」ウィンドウに接続プールが追加されます。

  5. 新しく作成された接続プールを選択します。

    そのプロパティが「エディタ」ウィンドウの「接続プール」ページに表示されます。

13.7 TopLinkアプリケーションの開発

Oracle TopLinkは、オブジェクトの永続性およびオブジェクト・トランスフォーメーションのための高度なフレームワークを提供します。開発やメンテナンスのコストを軽減し、エンタープライズ・アプリケーションの機能を向上させる開発ツールおよびランタイム機能が用意されています。

13.7.1 TopLinkキャッシュの使用

TopLinkキャッシュは、クラスと主キーの値に基づいて最近読み取られたり書き込まれたオブジェクトが格納される、インメモリー・リポジトリです。

TopLInkでは、次の目的でこのキャッシュが利用されます。

  • 最近読み取られたり書き込まれたオブジェクトを保持し、メモリー内でそれらにアクセスしてデータベースへのアクセスを最小限にすることで、パフォーマンスを向上させます。

  • ロックと分離レベルを管理します。

  • オブジェクト・アイデンティティを管理します。

TopLinkでは、次の2種類のキャッシュが使用されます。

  • セッション・キャッシュ: 特定のセッションにアタッチされたクライアントに対してサービスを提供する共有キャッシュ。クライアント・セッションがデータソースに対してオブジェクトの読取りや書込みを行うと、親サーバー・セッションのキャッシュにオブジェクトのコピーが保存され、このコピーがセッション内のその他すべてのプロセスからアクセスできるようになります。

    TopLinkでは、オブジェクトが次の場所からセッション・キャッシュに追加されます。

    • データ・ストア: 読取り操作が実行された場合。

    • 作業ユニット・キャッシュ: 作業ユニットがトランザクションを正常にコミットした場合。

  • 作業ユニット・キャッシュ: 作業ユニット内の操作にサービスを提供します。作業ユニット・キャッシュは、オブジェクトを保持してセッション・キャッシュから分離し、作業ユニットが変更内容をデータ・ソースにコミットした後、変更されたオブジェクトまたは新規オブジェクトをセッション・キャッシュに書き込みます。TopLinkは、作業ユニットがデータソースにコミットすると、セッション・キャッシュを更新します。

13.7.1.1 オブジェクト・アイデンティティ

TopLinkは、順序付けによって割り当てられる場合と割り当てられない場合がある、永続エンティティの主キー属性を使用して、キャッシュを介してオブジェクト・アイデンティティを保持します。オブジェクト・アイデンティティは、常に保持することをお薦めします。オブジェクト・アクティビティを無効化するのは、読取り専用オブジェクトの場合など、絶対に必要な場合のみにしてください。

13.7.1.2 問合せとキャッシュ

共有セッション・キャッシュに対して実行される問合せは、インメモリー問合せと呼ばれます。

デフォルトでは、主キーに基づいてシングル・オブジェクトを検索する問合せは、必要なオブジェクトをまずキャッシュから取得し、オブジェクトがキャッシュに存在しない場合にのみ、データ・ソースで検索を行います。その他すべての問合せタイプの場合は、デフォルトでデータベースを最初に検索します。特定の問合せを、メモリー内キャッシュ、データベース、その両方のうち、いずれに対して実行するかを指定できます。

13.7.1.3 失効したデータの処理

失効したデータは、データ・ソースにコミットされた最新バージョンでないオブジェクトをキャッシュした結果として発生します。

13.7.1.4 明示的な問合せのリフレッシュ

複数のオブジェクトが最新の状態である必要があるシステムの場合、分散キャッシュ・コーディネーションを行うほどの負荷をかけずに、これらのオブジェクトをデータベースから明示的にリフレッシュするよう指定できます。これには、次のようにします。

  1. 必要なオブジェクトをリフレッシュする一連の問合せを構成します。

  2. 適切なリフレッシュ・ポリシーを設定します。

  3. 必要に応じて問合せを起動し、オブジェクトをリフレッシュします。

13.7.1.5キャッシュの無効化

キャッシュの無効化ポリシーを使用して、キャッシュされたオブジェクトが無効になる方法とタイミングを指定します。キャッシュ無効化の使用により、失効したデータがアプリケーションで使用されないようにします。特定の時刻にオブジェクトを無効化したり、オブジェクトが読み込まれてから指定した時間が経過したらオブジェクトを無効としてマークするようキャッシュを構成できます。または、オブジェクトを明示的にのみ無効化する無効化ポリシーを設定することもできます。無効化ポリシーを設定する場合、すべてのオブジェクトに適用するにはプロジェクト・レベルで構成し、特定のオブジェクトに適用するにはディスクリプタ・レベルで構成し、問合せから戻された結果に適用するには問合せレベルで構成します。

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

キャッシュ・コーディネーションでは、データソースへのアクセスを回避することでパフォーマンスが向上します。セッションのインスタンスが相互にオブジェクト変更をブロードキャストすることにより、各セッションのキャッシュが最新の状態に保たれるか、次回読み取るデータソースを基にオブジェクトを更新する必要があることが通知されるため、失効したデータも削減されます。また、キャッシュ・コーディネーションにより、分散環境でのオプティミスティック・ロック例外の数は減少し、アプリケーションで失敗するトランザクションや繰り返されるトランザクションの数も減少します。読取りベースであり、同じオブジェクトを定期的にリクエストおよび更新し、複数の分散セッションを持つ単一のJavaアプリケーションによって実行された変更があるアプリケーションに対してキャッシュ・コーディネーションを使用します。

キャッシュ・コーディネーションのかわりに、アイデンティティ・タイプ、キャッシュ無効化またはキャッシュ分離を使用してread-only、read-mostlyおよびwrite-mostlyクラスごとにTopLinkキャッシュをチューニングすることもできます。このチューニングは、キャッシュ・コーディネーションの前に実行できます。

13.7.1.7 キャッシュの分離

独立クライアント・セッションには、共有サーバー・セッション・キャッシュを無効化するメカニズムがあります。独立クラスとしてマークされたクラスは、すべてクライアント・セッションのライフ・サイクルを基準としてオブジェクトをキャッシュします。これらのクラスは、共有サーバー・セッション・キャッシュを使用しません。このメカニズムでは、キャッシュを一部のクラスに許可し、一部のクラスに禁止するようクラス単位で構成できるため、キャッシュを抑制するのに最適です。

13.7.1.8 キャッシュのロックとトランザクションの分離

TopLinkでは、デフォルトで、読取りまたは書込み操作中のキャッシュ・ロックを最小限に抑えるために同時実行性が最適化されます。非常に明確な理由があって変更する場合を除き、TopLinkのトランザクション分離構成はデフォルトのまま使用してください。

13.7.2 TopLinkキャッシュの構成方法

JDeveloperでは、特定のTopLinkマップに対してTopLinkキャッシュを構成できます。キャッシュ・オプションは、すべてのディスクリプタに対してグローバルに適用されます。マップ・レベルのキャッシュ構成を上書きするには、ディスクリプタ・レベルでキャッシュ構成を定義します。

TopLinkマップ・レベルでTopLinkキャッシュを構成するには、次のようにします。

  1. アプリケーション・ナビゲータでTopLinkマップを選択します。

  2. 「構造」ウィンドウで、TopLinkマップを選択します。

  3. 「デフォルト」タブでキャッシュ・ファイルを完了します。

TopLinkキャッシュは、クラスと主キーの値に基づいて最近読み取られたり書き込まれたオブジェクトが格納される、インメモリー・リポジトリです。

ディスクリプタ・レベルでTopLinkキャッシュを構成するには、次のようにします。

  1. アプリケーション・ナビゲータでTopLinkマップを選択します。

  2. 「構造」ウィンドウで、TopLinkマップを選択します。

  3. 「キャッシュ」タブでキャッシュ・ファイルを完了します。

13.7.3 問合せの使用

TopLinkを使用すると、リレーショナルや非リレーショナルのデータ・ソースに対して、Java EEおよびJava EE以外のアプリケーションの両方で問合せを使用して、永続オブジェクトまたはデータを作成、読取り、更新および削除できます。問合せの詳細は、『Oracle Fusion Middleware Oracle TopLink開発者ガイド』を参照してください。

データソースの問合せとは、データソースの内容に対する操作の実行、データソースの内容との相互作用を意味します。そのための手順は、次のとおりです。

  • 問い合せるデータ・ソースのネイティブな構文で操作を定義します。

  • 制御された方法で操作を適用します。

  • 操作によって結果が返された場合は、それを管理します。

また、TopLinkでは、問合せがTopLinkキャッシュにどのような影響を与えるのかも考慮する必要があります。

13.7.3.1 TopLink問合せ言語

TopLinkを使用すると、次の問合せ言語のいずれかを使用して問合せを表現できます。

  • SQL問合せ

  • EJBQL問合せ

  • JPQL問合せ

  • XML問合せ

  • EISインタラクション

  • 例による問合せ

  • TopLinkの式

13.7.3.2 TopLink問合せのタイプ

  • 名前付き問合せ: 前に作成されて準備された場所であるディスクリプタのDescriptorQueryManagerまたはセッションに名前別に格納されるDatabaseQueryのインスタンス。その後、この問合せは、名前を使用して繰り返し実行することができます。

  • コール問合せ: 作成した後、データのみに限定されたデータソース・アクションを実行するための特別なセッションAPIを使用して直接実行するか、DatabaseQueryのコンテキストで間接的に実行するコールのインスタンス。TopLinkは、カスタムSQL、ストアド・プロシージャおよびEISインタラクションに対するコール・インスタンスをサポートしています。

  • ディスクリプタ問合せマネージャ: DescriptorQueryManagerでは、各基本データソース操作(作成、読取り、更新および削除)のデフォルトのDatabaseQueryを定義します。また、DatabaseQueryまたはそのコールのいずれかをカスタマイズするために使用できるAPIを提供します。

  • EJB 2.n CMPファインダ: Enterprise Beanを戻すEnterprise Beanのホーム・インタフェースで定義される問合せ。JPAQLCallEJBQLCall、JPA/EJB QLをとるコールを含め、任意のTopLink問合せタイプを使用してファインダを実装できます。

ほとんどの場合、特定の問合せ言語で問合せを直接構成できます。可能であれば、適切なコールを使用してDatabaseQueryを構成し、TopLink式を使用して選択基準を指定することをお薦めします。SQLで問合せを直接構成する方法が最も簡単な方法(つまり、簡単な操作またはアンマップ・データに対する操作)であるように思われますが、DatabaseQueryを使用した方法の場合、問合せをドメイン・オブジェクト・モデルに限定し、データソース・スキーマ実装の詳細に依存しなくてすむという大きな利点があります。

13.7.4 問合せの作成方法

問合せには、渡された引数に基づいて暗黙的に作成され、ワン・ステップで実行されるもの(たとえば、セッション問合せ)と、ユーザーが明示的に作成、構成および実行するもの(たとえば、データベース問合せ)があります。

問合せを作成するには:

  1. アプリケーション・ナビゲータでTopLinkマップを選択します。

  2. 「構造」ウィンドウでディスクリプタを選択します。

  3. 「問合せ」タブで、目的の問合せを作成します。

    「問合せ」タブを使用すると、TopLinkディスクリプタに関連する問合せを作成および管理できます。「名前付き問合せ」セクションで名前付き問合せを作成したり、「カスタム・コール」セクションでカスタム問合せを作成できます。

13.7.5 基本問合せAPIの使用

TopLink基本問合せAPIには、最も一般的に使用される次の問合せのサポートが含まれます。

  • セッション問合せ

  • DatabaseQuery問合せ

  • 名前付き問合せ

  • SQLコール

  • EJBQLコール

  • EISインタラクション

  • コレクション問合せの結果

  • レポート問合せの結果

13.7.6 詳細問合せAPIの使用

TopLink問合せAPIを使用すると、より詳細な次の問合せAPIコールおよび手法を使用することもできます。

  • リダイレクト問合せ

  • 履歴問合せ

  • フェッチ・グループ

  • 読取り専用問合せ

  • インタフェース

  • 継承階層

  • その他の結合式

  • EJBファインダ

  • カーソルとストリームの問合せ結果

詳細な問合せAPIの詳細は、『Oracle Fusion Middleware Oracle TopLink開発者ガイド』を参照してください。

13.7.6.1 リダイレクト問合せ

リダイレクト問合せは、名前付き問合せで、問合せの実行制御をアプリケーションに委譲します。リダイレクト問合せを使用すると、問合せの実装をstaticメソッドとしてコードで定義できます。複雑な操作を実行する場合、問合せのリダイレクタをTopLinkの問合せフレームワークと組み合せることができます。

13.7.6.2 履歴問合せ

時間に関する問合せを作成するには、TopLinkで問合せに追加するAsOfClauseを指定します。AsOfClauseクラスは、履歴スキーマがタイムスタンプに基づいている場合に使用し、AsOfSCNClauseクラスは、履歴スキーマがデータベース・システムの変更数に基づいている場合に使用します。履歴セッションを取得する際にAsOfClauseを指定することにより、TopLinkですべての問合せに対して同じ句が追加されるようにするか、問合せごとにAsOfClauseを指定できます。

13.7.6.3 フェッチ・グループ

フェッチ・グループは、ReadObjectQueryまたはReadAllQueryとともに使用できます。問合せを実行すると、TopLinkによりフェッチ・グループ内の属性のみが取得されます。除外された属性のいずれかに関するgetterメソッドをコールすると、TopLinkでは、このサブセットから除外されたすべての属性をフェッチする問合せが自動的に実行されます。

13.7.6.4 読取り専用問合せ

データが読取り専用であることがわかっている場合は、問合せを読取り専用として指定することでパフォーマンスを向上できます。これにより、問合せによって返されるオブジェクトが不変であることがTopLinkに通知されます。

オブジェクト・レベルの読取り問合せを読取り専用として構成できます。このような問合せをUnitOfWorkのコンテキストで実行すると、読取り専用の未登録オブジェクトがTopLinkによって返されます。読取り専用オブジェクトは登録や変更の確認をする必要がないため、この方法で読取り専用データを問い合せると、パフォーマンスを向上できます。

13.7.6.5 インタフェース

インタフェースのディスクリプタを定義して問合せを有効にした場合、TopLinkではインタフェースに対する問合せが次のようにサポートされます。

  • インタフェースのインプリメンタが1つしかない場合、問合せでは具象クラスのインスタンスが返されます。

  • インタフェースのインプリメンタが複数ある場合、問合せでは実装するすべてのクラスのインスタンスが返されます。

13.7.6.6 継承階層

継承階層の一部であるクラスに対して問合せを行うと、セッションによりディスクリプタがチェックされ、次のようにクラスのタイプが特定されます。

  • サブクラスを読み取るようにディスクリプタを構成(デフォルト構成)すると、問合せではクラスとそのサブクラスのインスタンスが返されます。

  • サブクラスを読み取らないようにディスクリプタを構成すると、問合せでは問合せ対象となるクラスのインスタンスのみが返されます。サブクラスのインスタンスは返されません。

  • サブクラスを外部結合するようにディスクリプタを構成すると、問合せではクラスとそのサブクラスのインスタンスが返されます。

  • サブクラスを外部結合するようにディスクリプタを構成すると、問合せではクラスとそのサブクラスのインスタンスが返されます。

13.7.6.7 その他の結合式

あるクラスで実行する各問合せに自動的に式を追加するよう、問合せマネージャを設定することができます。たとえば、特定のクラスの有効なインスタンスに対してデータベースをフィルタ処理する式を追加できます。これは、次の目的で使用します。

  • 論理的に削除されたオブジェクトをフィルタ処理する場合

  • 2つの別々のクラスが継承を使用せずに単一の表を共有できるようにする場合

  • オブジェクトの履歴バージョンをフィルタ処理する場合

13.7.6.8 EJBファインダ

TopLink問合せフレームワークを使用するエンティティBeanに対してファインダを作成するには、ファインダの定義、宣言および構成が必要です。事前定義されたファインダの場合、ファインダを明示的に作成する必要はありません。デフォルトのファインダの場合、ファインダのメソッドのみを作成する必要があります。

13.7.6.9 カーソルとストリームの問合せ結果

カーソルとストリームは、大きな結果セットを効率的に扱うことのできる関連メカニズムです。ストリームとはコレクションのビューであり、ファイル、デバイス、Vectorなどです。ストリームを使用すると、コレクションの要素に一度に1つずつ順にアクセスできます。これにより、1つのコレクションの全オブジェクトが同時にストリームに含まれることのないストリーム・クラスの実装が可能になります。

大きな結果セットは、収集して処理する際に、リソースを大量に消費します。パフォーマンスを向上させ、クライアントが返された結果をより確実に制御できるようにするには、カーソルまたはストリームを使用するようTopLink問合せを構成します。カーソルとストリームは、DataReadQueryおよびReadAllQueryのすべてのサブクラスでサポートされています。

13.7.7 TopLink式の作成方法

TopLinkの式を使用すると、ドメイン・オブジェクト・モデルに基づいて問合せの検索基準を指定できます。問合せを実行する際、TopLinkではこれらの検索基準を、使用しているプラットフォームに適した問合せ言語に変換します。

TopLinkは、式をサポートする次の2種類のパブリック・クラスを提供します。

  • Expressionクラスは、単純な定数からブール・ロジックを伴う複雑な句まで、あらゆる式を表します。式の操作、グループ化および統合を行うことができます。

  • ExpressionBuilderクラスは、新しい式を構成するためのファクトリです。選択基準は、DatabaseQueryのメソッドsetSelectionCriteriaを使用してExpressionとして指定したり、Expressionを取るファインダに指定できます。

通常、単純な式は次の部分で構成されています。

  • 属性: 永続クラスの問合せキーまたはマップされた属性を表します。

  • 演算子: GreaterThanEqualまたはLikeなどのブール・ロジックを実装する式メソッドです。

  • 定数または比較: オブジェクトの選択に使用される値を参照します。

名前付き問合せで使用する基本式を作成するには、次のようにします。

  1. アプリケーション・ナビゲータでTopLinkマップを選択します。

  2. 「構造」ウィンドウでディスクリプタを選択します。

  3. 名前付き問合せを選択し、「選択基準」領域で式を編集します。

13.7.8 TopLinkトランザクションの概要

データベース・トランザクションは、単一操作として成功または失敗した一連の操作(作成、更新または削除)です。失敗したトランザクションは破棄されるかロールバックされ、データベースは元の状態のままにされます。トランザクションには、内部トランザクション(TopLinkによって提供されるもの)または外部トランザクション(アプリケーション・サーバーなどのアプリケーションの外部のソースによって提供されるもの)があります。

TopLinkでは、トランザクションは作業ユニット・オブジェクトに含まれます。作業ユニットをセッションから取得し、そのAPIを使用すると、直接、またはJava Transaction API (JTA)などのJava 2 Enterprise Edition (Java EE)アプリケーション・サーバー・トランザクション・コントローラを使用して、トランザクションを制御できます。

トランザクションがコミットされるたびに、データベースではデータに加えられたすべての変更のログが記録されます。トランザクション内の操作がすべて成功した場合は、データベースが変更されますが、トランザクションの一部が失敗した場合は、ログを使用して変更内容がロールバックされます。

トランザクションは、独自のコンテキスト(論理領域)の中で、他のトランザクションやデータベース操作から独立して実行されます。トランザクション・コンテキストには境界が設定されています。つまり、トランザクション・コンテキストは次のものを含む定義済の構造を持ちます。

  • トランザクション内の操作が開始される開始ポイント。トランザクションは、このポイントで操作の実行を開始します。

  • 操作が完了し、トランザクションが変更内容をデータベースに正式に反映しようとする、コミット・ポイント。

同じデータに対する同時(並列)トランザクションが相互作用できる度合いは、構成されているトランザクション分離のレベルによって決まります。ANSI/SQLでは、4つのレベルのデータベース・トランザクション分離が定義されています。どのレベルでも、パフォーマンスと次のような望ましくない動作による悪影響の間でトレードオフが発生します。

  • 内容を保証しない読取り: トランザクションが同時トランザクションによって書き込まれた未コミット・データを読み取ります。

  • 非リピータブル・リード: トランザクションがデータを再度読み取り、最初の読取り操作後にコミットされた他のトランザクションによってデータが変更されていることを検出します。

  • 非リピータブル・リード: トランザクションがデータを再度読み取り、最初の読取り操作後にコミットされた他のトランザクションによってデータが変更されていることを検出します。

13.7.9 TopLinkトランザクションおよび作業ユニット

作業ユニットは、トランザクション内で行われた変更を、その変更がデータベースに正常にコミットされるまで、他のスレッドから分離します。その他のトランザクション・メカニズムとは異なり、作業ユニットはトランザクション内のオブジェクトに対する変更、変更の順序および他のTopLinkのキャッシュを無効にする可能性がある変更を自動的に管理します。作業ユニットは、最小のチェンジ・セットを計算し、参照整合性規則に準拠してデッドロックを回避するようにデータベース・コールを順序付けし、変更されたオブジェクトを共有キャッシュにマージして、これらの問題を管理します。クラスタ化環境では、作業ユニットはコーディネート・キャッシュ内の他のサーバーと変更を同期化することもできます。

通常のトランザクションと同様に、作業ユニット・トランザクションは次のものを提供します。

  • 作業ユニット・トランザクションのコンテキスト: 作業ユニット操作は、書込みがコミット時までデータベースから分離される作業ユニットのコンテキスト内で行われます。作業ユニットは、独自の内部キャッシュ内でオブジェクトのコピーまたはクローンに対して変更を実行し、成功した場合、データベースおよびセッション・キャッシュ内のオブジェクトに変更を適用します。

  • 作業ユニット・トランザクションの境界設定: TopLinkアプリケーションでは、作業ユニットを使用してトランザクションの境界が設定されます。アプリケーションにコンテナ管理トランザクションを提供するJava EEコンテナが含まれている場合、アプリケーション・サーバーでは、独自のトランザクション・サービスを使用して、トランザクションの境界が設定されます。TopLinkの外部トランザクション・コントローラを指定することで、コンテナのトランザクション・サービスと統合するように、TopLinkを構成できます。

  • 作業ユニット・トランザクションの分離: 作業ユニットは、データベース・トランザクションの分離と直接の関係はありません。作業ユニットでは問合せがデータベース・トランザクション外部で実行される場合があるため、データベースはこれら外部のデータとその可視性を制御できません。ただし、デフォルトでは、TopLinkは、基礎となるデータベースに構成されたデータベース・トランザクション分離とは無関係のトランザクション分離レベルを提供します。各作業ユニット・インスタンスは、登録されているオブジェクトの独自のコピー(クローン)に対して実行されます。この場合、作業ユニットでは、オブジェクトの変更に対する問合せを1つの作業ユニット内で実行できるAPIにより、読取りコミット操作を行います。変更がデータベースにコミットされるのは、作業ユニットのコミット・メソッドがコールされる場合のみです。