この章では、次の項で、TopLinkマッピングの作成およびJDeveloperプロジェクトへのTopLinkマッピングの統合に関する一般的なプロセスを説明します。
詳細は、次を参照してください。
Oracle Fusion Middleware Oracle TopLinkの理解
Oracle Fusion Middleware Oracle TopLinkソリューション・ガイド
Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス
Oracle Fusion Middleware Oracle TopLinkデータベースWebサービスによる永続性アーキテクチャの開発
Oracle Fusion Middleware Oracle Toplinkのドキュメント・データ・バインディングを使用した永続性アーキテクチャの開発
Oracle Fusion Middleware Oracle TopLink Java APIリファレンス
Oracle TopLinkは、開発ツールやランタイム機能を備えたオブジェクト永続性およびオブジェクト変換フレームワークです。
TopLinkは、オブジェクト指向のプログラムをデータ構造にリンクします。TopLinkでは、オブジェクト指向データがリレーショナル・データまたはXML文書に変換されます。TopLinkを使用すると、永続性とオブジェクト変換をアプリケーションに組み込むことができます。
JDeveloper内のツールを使用して、Javaクラス、EJBおよびJPAエンティティを構成し、リレーショナル・データベース、企業情報システム(EIS)、XMLスキーマ、JSONドキュメントなど別のデータソースにマップできます。TopLinkでは、JPA、JAXBおよびJava EEなど複数の標準がサポートされています。
Oracle TopLinkには、完全なJPA 1.0および2.0準拠のJPA実装が用意されています。これは、すべての必須機能、多くのオプション機能および一部の追加機能に完全に準拠しています。
Java永続性API (JPA)は、POJOに基づくJava永続性のための軽量フレームワークです。JPAはEJB 3.x仕様の一部です。JPAは、移植性のある標準的な方法でJavaオブジェクトをリレーショナル・データベース表にマップする方法を宣言して定義できるオブジェクト・リレーショナル・マッピング方法を提供します。また、このAPIを使用すると、EJB 3.0準拠のコンテナ内と標準のJava SE 5およびJava SE 6環境内の両方で、軽量Javaオブジェクト全体にわたって作成、削除および問合せを行うことが可能です。
Oracle TopLinkには、完全なJPA 1.0および2.0準拠のJPA実装が用意されています。これは、すべての必須機能、多くのオプション機能および一部の追加機能に完全に準拠しています。
TopLinkは、EJB 3.xコンテナの内外でのデプロイメントをサポートしています。これには、Webコンテナ、他のEJB 3.x以外のJava EEコンテナ、およびJava SE環境が含まれます。
TopLinkは、プラガブル永続性機能を介して、任意のEJB 3.x準拠コンテナで永続性プロバイダとして機能します。
JPAのTopLink実装は、EclipseLinkによって提供されます。詳細は、http://wiki.eclipse.org/EclipseLink
を参照してください。
使用するJPAのバージョン(1.0または2.0)をプロジェクト・レベルで指定できます。新規のマッピング・ファイル、新規の永続性ユニットまたは新規の永続性ディスクリプタ(persistence.xml
)を作成する場合、JPAバージョンがまだ選択されていないときは、バージョンを指定できます。これらのアイテムのいずれかがプロジェクトですでに作成されている場合は、プロジェクトのバージョンが使用されます。
JPAバージョンを指定するには、次のようにします。
EJB 3.x以降では、JPAエンティティは、リレーショナル・データベースなどのデータ・ストアに格納された永続データを表すPOJOです。一般に、エンティティはリレーショナル・データベースの表を表現し、各エンティティ・インスタンスはその表の行に相当します。JDeveloperでエンティティを作成するには、データベース内の表構造の詳細を含むすべての関連情報を指定します。また、既存のデータベース表からエンティティを作成することもできます。
永続性構成(persistence.xml
)がプロジェクトにまだ存在しない場合は、新規の構成が作成されます。
エンティティを表から作成すると、マッピングが自動的に作成されます。このマッピングは後で変更できます。
エンティティを作成するには、次のようにします。
「アプリケーション」ウィンドウで、エンティティを作成するプロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」で、「ビジネス層」を展開し、「TopLink/JPA」を選択します。次に「エンティティ」を選択し、「OK」をクリックします。
「エンティティの作成」ウィザードの各フィールドを入力します。
既存のデータベース表からエンティティを作成するには、次のようにします。
永続性コンテキストを構成するには、永続性構成ファイル(persistence.xml
)を使用します。
永続性構成を作成するには、次のようにします。
「アプリケーション」ウィンドウで、JPA永続性ディスクリプタを作成するプロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」で、「ビジネス層」を展開し、「TopLink/JPA」を選択します。次に「JPA永続性ディスクリプタ」を選択し、「OK」をクリックします。
新規のJPA永続性ディスクリプタ・ファイル(persistence.xml
)のデフォルトの永続性ユニットを作成するための「新規のJPA永続性ディスクリプタ」ダイアログで各フィールドを入力し、「OK」をクリックします。
次の例には永続性構成例が含まれます。
<?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="myPersistenceUnitName"> ... </persistence-unit> </persistence>
永続性構成(persistence.xml)ファイルを構成するには、次のようにします。
persistence.xml
)を選択します。persistence.xml
)」ページで「一般」および「メタデータ・プリファレンス」タブを入力します。永続性ユニットを作成するには、次のようにします。
... <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.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> ...
「永続性ユニット」ページ(「アプリケーション」ウィンドウでpersistence.xml
を選択してから「構造」ビューでJPAディスクリプタを展開することによってアクセス)の各タブを使用して、永続性ユニットを構成できます。
永続性ユニットの構成には、次の構成のような多くのステップが含まれます。
一般情報
接続情報
TopLink情報
スキーマ生成情報
プロパティ
メタデータ情報
JPA永続性ユニットの一般情報を構成するには、次のようにします。
「アプリケーション」ウィンドウで、JPA永続性ディスクリプタ(persistence.xml
)をダブルクリックします。
persistence.xml
の概要エディタで、「一般」ナビゲーション・タブをクリックします。
「永続性ユニット」で、構成する永続性ユニットの名前をダブルクリックします。
永続性ユニットの概要エディタで、「一般」ナビゲーション・タブをクリックします。各フィールドを入力して、永続性ユニットがアプリケーション・サーバーおよびデータベースに接続する方法を指定します。
JPA永続性ユニットの接続情報を構成するには、次のようにします。
「アプリケーション」ウィンドウで、JPA永続性ディスクリプタ(persistence.xml
)をダブルクリックします。
persistence.xml
の概要エディタで、「一般」ナビゲーション・タブをクリックします。
「永続性ユニット」で、構成する永続性ユニットの名前をダブルクリックします。
永続性ユニットの概要エディタで、「接続」ナビゲーション・タブをクリックします。各フィールドを入力して、永続性プロバイダを選択し、その一般プロパティ(JPAマッピング・ディスクリプタ、Javaアーカイブおよびマップされたクラスなど)を構成します。
JPA永続性ユニットに関するTopLinkセッション固有の情報を構成するには、次のようにします。
「アプリケーション」ウィンドウで、JPA永続性ディスクリプタ(persistence.xml
)をダブルクリックします。
persistence.xml
の概要エディタで、「一般」ナビゲーション・タブをクリックします。
「永続性ユニット」で、構成する永続性ユニットの名前をダブルクリックします。
永続性ユニットの概要エディタで、「セッション・カスタマイズ」ナビゲーション・タブをクリックします。各フィールドを入力して、永続性ユニットに関するTopLink固有の情報を指定します。エンティティ・カスタマイザ・クラスの指定、TopLinkセッション・オーバーライドの設定、およびエンティティ・マネージャのプロパティ(検証モード、ペシミスティック・ロック・モード、問合せタイムアウト・モードなど)のカスタマイズを行うことができます。
DDL生成オプションを構成するには、次のようにします。
ほとんどのJPA永続性プロバイダではこのサポートが提供されていますが、これらのオプションはTopLink固有のものです。
「アプリケーション」ウィンドウで、JPA永続性ディスクリプタ(persistence.xml
)をダブルクリックします。
persistence.xml
の概要エディタで、「一般」ナビゲーション・タブをクリックします。
「永続性ユニット」で、構成する永続性ユニットの名前をダブルクリックします。
永続性ユニットの概要エディタで、「スキーマ生成」ナビゲーション・タブをクリックします。各フィールドを入力して、TopLinkによるDDLスクリプトの生成方法を指定します。
永続性ユニットに関するTopLink固有でないプロパティを構成するには、次のようにします。
「アプリケーション」ウィンドウで、JPA永続性ディスクリプタ(persistence.xml
)をダブルクリックします。
persistence.xml
の概要エディタで、「一般」ナビゲーション・タブをクリックします。
「永続性ユニット」で、構成する永続性ユニットの名前をダブルクリックします。
永続性ユニットの概要エディタで、「プロパティ」ナビゲーション・タブをクリックします。各フィールドを入力して、TopLink固有でない一般的なプロパティを指定します。
永続性ユニットのメタデータオーバーライドを構成するには、次のようにします。
TopLink JPAは、エンティティについて次の種類のマッピングをサポートしています。
基本: 基本マッピングは、エンティティのフィールドまたはプロパティ(あるいはその両方)とデータベース上の列の間のダイレクト・アソシエーションを定義します。
要素コレクション: 要素コレクション・マッピングは、基本値または埋込み可能のアソシエーション・コレクションをデータベースにマップします。
埋込み: 埋込みマッピングは、埋込み可能クラスのインスタンスを値として持つエンティティの永続性プロパティを指定するときに使用します。
埋込みID: 埋込みIDマッピングは、エンティティまたはマップされたスーパークラスの永続フィールドまたはプロパティ(埋込み可能クラスであるコンポジット主キー)を指定します。参照される埋込み可能クラスは埋込み可能である必要があります。
ID: IDマッピングは、エンティティの主キー・プロパティまたはフィールドを指定し、エンティティまたはマップされたスーパークラスで適用できます。
多対多: デフォルトでは、JPAは多対多の多重度を持つ複数値アソシエーションには多対多マッピングを自動的に定義します。
多対1: デフォルトでは、JPAは多対1の多重度を持つ別のエンティティ・クラスに対する単一値アソシエーションには多対1マッピングを自動的に定義します。
1対多: 多対1マッピングは、1対多の多重度を持つ複数値アソシエーションを定義します。双方向と一方向のマッピングがサポートされています。
1対1: 1対1マッピングは、1対1の多重度を持つ別のエンティティに対する単一値アソシエーションを定義します。双方向と一方向のマッピングがサポートされています。
トランスフォーメーション: トランスフォーメーション・マッピングは、属性を1つ以上のデータベース列にマップするときに使用します。1つの読取りトランスフォーマと複数の書込みトランスフォーマを構成できます。
一時: デフォルトでは、エンティティのすべてのフィールドが永続とみなされます。一時マッピングは、永続でないエンティティのフィールドまたはプロパティ(たとえば、実行時に使用されるがエンティティの状態の一部ではないフィールドまたはプロパティ)を指定するときに使用します。
可変1対1: 可変1対1マッピングは、Javaオブジェクトとインタフェースの実装者の間のポインタ参照を表すために使用します。このマッピングは、通常、ソース・オブジェクトとターゲット・オブジェクトの間の1つのポインタ(インスタンス変数に格納されます)で表されます。
注釈は、JPA永続性プロバイダが永続動作を管理するために実行時に解釈できるように、対応するJavaクラス・ファイルにコンパイルされるメタデータを使用してJavaソース・コードを装飾するための簡単な表現手段です。注釈を使用すると、エンティティの永続動作を構成できます。
XMLマッピング・メタデータは、単独で使用したり、注釈メタデータと組み合せて使用できます。また、XMLマッピング・メタデータを使用して、注釈メタデータをオーバーライドすることもできます。
各注釈には、デフォルト値があります。永続性エンジンにより、アプリケーションの大半に適用されるデフォルトが定義されます。デフォルト値をオーバーライドする場合、適切な値を指定するのみですみます。構成値は必須ではなく、このルールの例外です。これは、例外による構成と呼ばれます。
シンプルJavaタイプは、エンティティの即時状態の一部としてそのフィールドまたはプロパティにマップされます。シンプルJavaタイプのマッピングは、基本マッピングと呼ばれます。基本マッピングは、エンティティのフィールドまたはプロパティ(あるいはその両方)とデータベース上の列の間のダイレクト・アソシエーションを定義します。デフォルトでは、TopLink永続性プロバイダにより、シンプル・タイプの基本マッピングは自動的に構成されます。ただし、@Basic注釈を使用してデフォルトをオーバーライドできます。
TopLink永続性プロバイダでは、関連を明示的にマップする必要があります。@OneToOne
、@ManyToOne
、@OneToMany
、@ManyToMany
、@MapKey
、@OrderBy
などの注釈を使用して、データベースによる関連の実装方法を微調整するエンティティ関連のタイプおよび特性を指定します。
デフォルトでは、TopLink永続性プロバイダでは、すべての永続性フィールドが単一のエンティティ・クラスによって定義されることが想定されます。エンティティ・クラスによって1つ以上のスーパークラスから一部またはすべての永続フィールドが継承される場合、@Inheritance
、@MappedSuperclass
、@DiscriminatorColumn
および@DiscriminatorValue
注釈を使用します。
次の手順は、JPAマッピングを使用するときに行う様々な操作の実行方法を説明したものです。
注釈を使用してマッピングを構成するには、次のようにします。
「アプリケーション」ウィンドウで、永続性構成(persistence.xml
)を選択します。
「構造」ビューで、マッピングのレベルまでノードを開きます。つまり、プロジェクト、マップされたクラス、エンティティの順に展開します。
次のいずれかの操作を行います。
フィールドまたはプロパティ (CountryID
など)を選択します。マッピングの概要エディタで、目的に応じてマッピングの詳細を編集します。
フィールドまたはプロパティを右クリックして「マップ」
をポイントし、新規のマッピングを選択します。マッピングの概要エディタで、目的に応じてマッピングの詳細を編集します。
Javaソースを表示するには、「構造」ビューでマップされたフィールドまたはプロパティを右クリックし、「ソースに移動」をクリックします。
マッピング・ディスクリプタ・ファイル(orm.xml
)を使用してマッピングを構成するには、次のようにします。
「アプリケーション」ウィンドウで、マッピング・ディスクリプタ(orm.xml
)を選択します。
「構造」ビューで、マッピングのレベルまでノードを開きます。つまり、プロジェクト、マップされたクラス、エンティティの順に展開します。
次のいずれかの操作を行います。
フィールドまたはプロパティ (CountryID
など)を選択します。マッピングの概要エディタで、目的に応じてマッピングの詳細を編集します。
フィールドまたはプロパティを右クリックして「マップ」
をポイントし、新規のマッピングを選択します。マッピングの概要エディタで、目的に応じてマッピングの詳細を編集します。
XMLソースを表示するには、次のようにします。
「構造」ビューでマップされたフィールドまたはプロパティを右クリックし、「ソースに移動」をクリックします。
マッピングの概要エディタが表示されたら、「ソース」タブをクリックしてXMLソースを表示します。
JPAマッピング・ディスクリプタ(通常、orm.xml
という名前)は、注釈の代替手段として使用できます。JPAマッピング・ディスクリプタ内の情報は、Java注釈よりも優先されます。
JPAマッピング・ディスクリプタを作成するには、次のようにします。
「アプリケーション」ウィンドウで、JPA永続性ディスクリプタを作成するプロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」で、「ビジネス層」を展開し、「TopLink/JPA」を選択します。次に「JPAマッピング(XML)」を選択し、「OK」をクリックします。
「新規JPAマッピング」ダイアログの各フィールドを入力し、「OK」をクリックします。
永続性ユニットに関連付けられたJPAマッピング・ディスクリプタを作成するには、次のようにします。
「アプリケーション」ウィンドウで、永続性構成(persistence.xml
)をダブルクリックします。
persistence.xml
の概要エディタで、「一般」ナビゲーション・タブをクリックします。
「永続性ユニット」領域で、永続性ユニットをダブルクリックします。
永続性ユニットの「一般」タブをクリックします。
「JPAマッピング・ディスクリプタ」領域で、「新規のJPAマッピング・ディスクリプタの作成」ボタンをクリックします。
ダイアログ内の各フィールドを入力し、「OK」をクリックします。
「JPAマッピング・ディスクリプタ」領域で、新規マッピング・ディスクリプタの名前をダブルクリックし、ディスクリプタの詳細(マップされたクラス、開発データベースなどのデフォルト)を指定します。
JPAマッピング・ディスクリプタの一般情報を構成するには、次のようにします。
「アプリケーション」ウィンドウで、JPAマッピング・ディスクリプタ(orm.xml
)をダブルクリックします。
マッピング・ディスクリプタの概要エディタで、「一般」ナビゲーション・タブをクリックします。各フィールドを入力して、永続性プロバイダを選択し、その一般プロパティ(マップされたクラス、開発データベースなどのデフォルト)を構成します。
エンティティ、埋込み可能またはマップされたクラスをJPAマッピング・ディスクリプタに関連付けるには、次のようにします。
「アプリケーション」ウィンドウで、JPAマッピング・ディスクリプタ(orm.xml
)をダブルクリックします。
ディスクリプタの概要エディタで、「一般」ナビゲーション・タブをクリックします。
「マップされたクラス」領域で、次のいずれかの操作を行います。
「エンティティ」で、「エンティティとしてのクラスの追加」アイコンをクリックします。
「埋込み可能」で、「埋込み可能クラスとしてのクラスの追加」アイコンをクリックします。
「マップされたスーパークラス」で、「マップされたスーパークラスとしてのクラスの追加」アイコンをクリックします。
「エンティティ・クラスの管理」ダイアログ、「埋込み可能クラスの管理」ダイアログまたは「マップされたスーパークラスの管理」ダイアログで、次の操作を行います。
プロジェクトを選択します。
「使用可能なクラス」で、ノードを展開し、追加するアイテムを選択します。
「選択したクラスのリストへの追加」アイコンまたは「すべてのクラスのリストへの追加」アイコンをクリックして、選択したアイテムを「選択したクラス」 リストに移動します。「OK」をクリックします。
このマッピング・ディスクリプタが含まれる永続性ユニットおよび関連エンティティに適用される設定を構成できます。これらの値は、永続性ユニット・レベルの任意の構成設定によってオーバーライドされます。
永続性ユニットのデフォルトを構成するには、次のようにします。
orm.xml
)をダブルクリックします。管理クラスの属性の永続状態にアクセスする方法としてフィールドまたはプロパティのどちらかを指定できます。フィールド値には直接アクセスします。プロパティ値にはget()
メソッドとset()
メソッドを使用してアクセスします。
構成の様々なレベルでデフォルトの設定やアクセス・タイプの指定ができます。デフォルトとオーバーライドを使用することを「複合アクセス」と呼ぶ場合があります。
デフォルトでは、1つのエンティティ階層に1つのアクセス・タイプ(フィールドまたはプロパティ)が適用されますが、以降のセクションで説明するように、このデフォルトはオーバーライドできます。
アクセス・タイプの設定の優先順位を、高いものから低いものの順に次のリストに示します。管理クラス(エンティティ、埋込み可能およびマップされたスーパークラス)では、継承階層で下位のクラスまたは属性の設定が階層で上位の設定よりも優先されます。
マップされた属性。このレベルの設定は、管理クラス、マッピング・ディスクリプタ(orm.xml
)および永続性ユニットに対するデフォルト設定よりも優先されます。
管理クラス。このレベルの設定は、マッピング・ディスクリプタ(orm.xml
)および永続性ユニットに対するデフォルト設定よりも優先されます。このレベルの設定は、管理属性での設定によりオーバーライドできます。
埋込み可能クラスのアクセス・タイプは、そのクラスが埋め込まれているエンティティ・クラス、マップされたスーパークラスまたは埋込み可能クラス(要素コレクションのメンバーとしての場合を含む)によって決まります。包含する側のクラスのアクセス・タイプが明示的に指定されているか、デフォルト設定になっているかは関係ありません。継承されたアクセス・タイプは、埋込み可能クラスに別のタイプを指定することによりオーバーライドできます。
ディスクリプタのマッピング(orm.xml
)。このレベルの設定は、永続性ユニットに対するデフォルト設定よりも優先されます。このレベルの設定は、管理クラスと管理属性での設定によりオーバーライドできます。
永続性ユニット。このレベルの設定は、マッピング・ディスクリプタ、管理クラスおよび管理属性に対する設定によりオーバーライドできます。
永続性ユニット内の管理クラスに対するアクセス・タイプを構成するには、次のようにします。
「アプリケーション」ウィンドウで、JPAマッピング・ディスクリプタ(orm.xml
)をダブルクリックします。
マッピング・ディスクリプタの概要エディタで、「永続性ユニットのデフォルト」ナビゲーション・タブをクリックします。
「アクセス・タイプ」で、「フィールド・アクセス」または「メソッド・アクセス」を選択します。これにより、永続性ユニット内の管理クラスで、マッピング・ディスクリプタにXMLエントリがあるすべてのクラスに対するデフォルトを定義します。*
マッピング・ディスクリプタ内の管理クラスに対するアクセス・タイプを構成するには、次のようにします。
「アプリケーション」ウィンドウで、JPAマッピング・ディスクリプタ(orm.xml
)をダブルクリックします。
マッピング・ディスクリプタの概要エディタで、「一般」ナビゲーション・タブをクリックします。
「デフォルト」領域の「アクセス・タイプ」で、「フィールド」または「プロパティ」を選択します。
1つの管理クラス(エンティティ、埋込み可能クラスまたはマップされたスーパークラス)に対するアクセス・タイプを構成するには、次のようにします。
「アプリケーション」ウィンドウで、管理クラスのJavaソース・ファイルをダブルクリックします。
クラスの概要エディタで、「一般」ナビゲーション・タブをクリックします。
「アクセス・タイプ」で、「フィールド」または「プロパティ」を選択します。
属性マッピングのメソッド・アクセスを指定するには、次のようにします。
「アプリケーション」ウィンドウで、JPAマッピング・ディスクリプタ(orm.xml
)をダブルクリックします。
「構造」ウィンドウで、構成する属性マッピングが含まれている管理クラスを展開し、属性をダブルクリックします。
「メソッド・アクセスの使用」を選択し、目的のset()
メソッドまたはget()
メソッド(あるいは、その両方)を選択します。
ジェネレータを定義して、エンティティのジェネレータ戦略と、エンティティへの一意IDの割当に使用する名前付きジェネレータを決定します。ジェネレータ名の有効範囲は、永続性ユニット全体のすべてのジェネレータ・タイプに及びます。マッピング・ディスクリプタでXMLを使用して定義したジェネレータは、エンティティで注釈を使用して定義した同名のジェネレータよりも優先されます。
JPAマッピング・ディスクリプタ(orm.xml)でジェネレータを構成するには、次のようにします。
「アプリケーション」ウィンドウで、JPAマッピング・ディスクリプタ(orm.xml
)をダブルクリックします。
マッピング・ディスクリプタの概要エディタで、「ジェネレータ」タブをクリックし、シーケンス・ジェネレータと表ジェネレータを構成します。
エンティティに対するジェネレータを構成するには、次のようにします。
Departments.java
など)をダブルクリックします。関連する永続性ユニットで使用するためにこのマッピング・ディスクリプタでJPQLおよびネイティブ問合せを定義できます。
問合せを構成するには、次のようにします。
orm.xml
)をダブルクリックします。1対1と多対1のマッピングでは、エンティティのIDをその親エンティティ(マッピングのターゲット)のIDから導出するように指定できます。
IDを導出するように指定するには、次のようにします。
Java Enterprise Edition 5 (Java EE 5) EJB 3.0仕様の一部であるJava永続性API (JPA)では、Javaの永続性が大幅に簡略化されています。これには、オブジェクト・リレーショナル・マッピング・アプローチが用意されています。このアプローチを使用すると、Java EE 5アプリケーション・サーバーの内部とJava Standard Edition (Java SE) 5アプリケーションのEJBコンテナの外部で動作する標準的で移植可能な方法で、Javaオブジェクトをリレーショナル・データベース表にマッピングする方法を宣言的に定義できます。
TopLink JPAは、JPA仕様による定義内容に対して拡張機能を提供します。これらの拡張機能は、永続性ユニット・プロパティ、問合せヒント、注釈、TopLink独自のXMLメタデータおよびカスタムAPIの形式で提供されます。
JDeveloper内のツールを使用すると、ネイティブTopLinkを使用してJavaクラス、EJBおよびJPAエンティティを構成し、リレーショナル・データベース、企業情報システム(EIS)、XMLスキーマなど別のデータソースにマップできます。TopLinkでは、JPA、JAXBおよびJava EEなど複数の標準がサポートされています。
ネイティブTopLinkを使用すると、次のようなJavaを使用するエンタープライズ・アーキテクチャに対して様々な永続性およびデータ変換機能を実行できます。
Java EE
Spring
Oracle WebLogic ServerやApache TomcatなどのJava Webサーバー
Javaクライアント(Java SE、Webブラウザなど)
ネイティブTopLinkは、次の方法で使用できます。
リレーショナル・データベースの使用: ネイティブTopLinkを使用すると、JDBCを使用してアクセスされる、SQLデータ・タイプをサポートするリレーショナル・データベースに、Javaオブジェクトを永続化できます。
Oracle XML Database (XDB)の使用: TopLinkで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ファイルなど)を両方とも生成できます。
ネイティブTopLinkのメタデータは、アプリケーションの開発とデプロイされたランタイム環境の間の橋渡しをします。次のものを使用して、メタデータを取得できます。
TopLinkランタイム環境に渡すTopLinkのsessions.xml
およびproject.xml
ファイルを作成するJDeveloperマッピング・エディタ。
JPAの注釈、persistence.xml
、orm.xml
、TopLink JPA注釈の拡張機能およびTopLinkプロパティの拡張機能。TopLink JPA永続性プロバイダでは、これらのメタデータのソースを解釈して、実行時にインメモリーのセッションおよびプロジェクトが作成されます。
JavaおよびTopLink API(この方法は最も労力が必要とされます)。
メタデータを使用すると、構成情報をランタイム環境に渡すことができます。ランタイム環境では、この情報を永続クラス(JavaオブジェクトまたはJPAエンティティ)、およびTopLink APIを使用して記述されたコードとともに使用して、アプリケーションが完成します。
ネイティブTopLink JPAを使用すると、JPAおよびEntityManagerを使用して永続クラスにアクセスしている間に、TopLinkのsessions.xml
およびproject.xml
を使用してメタデータを指定することもできます。
TopLinkメタデータ・アーキテクチャにより、次のような多くの重要な利点が提供されます。
メタデータを使用することにより、TopLinkはオブジェクト・モデルまたはデータベース・スキーマに介入しません。
開発者は、特定の設計を強引に通すことなく、必要に応じてオブジェクト・モデルを設計できるようになります。
DBAは、特定の設計を強引に通すことなく、必要に応じてデータベースを設計できるようになります。
コード生成(設計、実装、メンテナンスなどの重大な問題の原因になる可能性がある)に依存しません。
非介入型です。TopLinkに適合するようにオブジェクト・モデルまたはデータベース・スキーマを設計することを開発者に要求するのではなく、TopLinkメタデータ自らがオブジェクト・モデルおよびデータベース・スキーマに適応します。
ネイティブTopLinkプロジェクトには、TopLinkランタイムがオブジェクトをデータソースへマップするために使用するマッピング・メタデータが含まれています。プロジェクトは、TopLinkランタイムが使用するプライマリ・オブジェクトです。プロジェクト・メタデータの最も重要な内容には、次が含まれます。
ディスクリプタ
マッピング
データ・ソース・ログイン情報
TopLinkランタイムは、JPAを使用して、採用されている注釈、persistence.xml
、orm.xml
およびTopLink JPAの拡張機能に基づき、インメモリー・プロジェクトを構成します。
ネイティブTopLinkセッション構成ファイル(sessions.xml
)を使用すると、特定のプロジェクトのすべてのセッションを簡単に管理できます。データソース・ログイン情報、JTAトランザクション使用方法およびキャッシングを含む各セッションに関する情報を完全にカスタマイズできます。
TopLinkのセッションには、特定のproject.xml
ファイルへの参照とデータソースへのアクセスに必要な情報が含まれています。セッションは、TopLinkランタイムの機能にアクセスするためにアプリケーションが使用するプライマリ・オブジェクトです。
セッション・メタデータの作成およびアクセスを担当するエージェントは、CMPプロジェクトを作成するかどうかに応じて異なります。POJOプロジェクトでは、アプリケーションはセッションを直接取得してアクセスします。CMPプロジェクトでは、アプリケーションは、TopLinkランタイムによって内部的に取得されたセッションに間接的にアクセスします。
TopLinkランタイムは、TopLink JPAを使用して、JPAの注釈、persistence.xml
、orm.xml
、TopLink JPAの注釈およびpersistence.xmlのプロパティの拡張機能の任意の組合せに基づき、インメモリー・セッションを構成します。sessions.xml
ファイルの使用はオプションです。
TopLinkでは、ディスクリプタを使用して、あるデータソースによって特定クラスがどのように表現されるかを定義した情報を格納します。ディスクリプタには、クラスのインスタンス変数を、データ・ソースおよび、値の格納と取得に使用されるトランスフォーメーション・ルーチンに関連付けるマッピングを含めます。それによって、ディスクリプタは、Javaオブジェクトとそのデータ・ソース表現を接続する役目を果します。
2つのオブジェクト、つまり、ソース(親、すなわち所有側)オブジェクトとターゲット(子、すなわち所有される側)オブジェクトは、両者間に厳密な1対1の関係がある場合、集約によって関連付けられ、ターゲット・オブジェクトのすべての属性は、ソース・オブジェクトと同じデータソース表現から取得できます。つまり、ソース・オブジェクトが存在すればターゲット・オブジェクトも存在する必要があり、ソース・オブジェクトが破棄されればターゲット・オブジェクトも破棄されるということです。
JDeveloperを使用すると、次のタイプのTopLinkディスクリプタを作成できます。
リレーショナル・ディスクリプタ
EISディスクリプタ
XMLディスクリプタ
リレーショナル・ディスクリプタには、リレーショナル・データベース内の表にマップするJavaオブジェクトを記述します。リレーショナル・プロジェクトでリレーショナル・ディスクリプタを使用すると、リレーショナル・マッピングを構成できます。リレーショナル・プロジェクトでは、ディスクリプタを集約として指定できるため、ターゲット・オブジェクト内のデータ・メンバーをソース・オブジェクトの基礎となるデータベース表のフィールドと関連付ける集約マッピングを構成できます。
リレーショナル・ディスクリプタを集約ディスクリプタとして定義する場合、TopLinkではターゲット・クラスのフィールドごとに1つのマッピング・タイプを指定できますが、フィールドとデータベース表の関連付けは、ソース・ディスクリプタで集約オブジェクト・マッピングを構成した後で可能になります。つまり、ターゲット・クラス・ディスクリプタは各ターゲット・クラス・フィールドがマップされる方法を定義し、ソース・クラス・ディスクリプタは各ターゲット・クラス・フィールドがマップされる場所を定義する、ということです。この仕組みにより、異なる表にマップされた多数の親ディスクリプタ間で同一の集約オブジェクトを共有することができます。
JCAアダプタを介してEISデータ・ソースにマップするJavaオブジェクトを記述します。EISディスクリプタを使用すると、EISプロジェクトの作成時にEISマッピングを構成できます。
ネイティブTopLinkは、オブジェクトの表現からデータソースに固有の表現にデータを変換します。この変換はマッピングと呼ばれ、TopLinkプロジェクトの中核をなすものです。マッピングはそれぞれ、ドメイン・オブジェクトの単一データ・メンバーに対応しています。マッピングによって、オブジェクト・データ・メンバーをそのデータソース表現と関連付け、オブジェクトとデータソースの間の双方向変換を実行する手段を定義します。TopLinkマップは、アプリケーションがTopLinkの機能にアクセスする際に経由するファサードであるTopLinkセッションに属します。使用可能なマッピングのタイプは、TopLinkマップおよびTopLinkディスクリプタによって異なります。
リレーショナル・マッピングは、オブジェクトのデータ・メンバー・タイプを、サポートされているリレーショナル・データベースの対応するリレーショナル・データベース表現に変換します。これらを使用して、プリミティブを含む単純なデータ・タイプ(intなど)、JDKクラス(Stringなど)およびラージ・オブジェクト(LOB)の値をマップします。また、これらを使用して、データ・ソース表現にオブジェクト・アイデンティティの維持(順序付けおよび後方参照など)が必要な関連付けによって、他のドメイン・オブジェクトを参照するオブジェクト・データ・メンバーを変換し、多重度および誘導可能性の様々なタイプを持たせることもできます。適切なマッピング・クラスは、主にリレーションシップのカーディナリティによって選択されます。
表18-1は、方向性、トランスフォーマ、コンバータおよびEJB 2.n CMPリレーショナル・マッピングというTopLinkの概念を使用したリレーショナル・マッピングのタイプのビルド・マップを示しています。
表18-1 リレーショナル・マッピングのタイプ
マッピング・タイプ | 説明 |
---|---|
フィールドへ直接 |
Java属性をデータベース・フィールドに直接マップします。 |
XMLタイプへ直接 |
Java属性をOracleデータベースの |
1対1 |
他の永続Javaオブジェクトへの参照をデータベースにマップします。 |
可変1対1 |
インタフェースへの参照をデータベースにマップします。 |
1対多 |
永続オブジェクトのJavaコレクションをデータベースにマップします。 |
多対多 |
関連表を使用して、永続オブジェクトのJavaコレクションをデータベースにマップします。 |
ダイレクト・コレクション |
ディスクリプタを持たないオブジェクトのJavaコレクションをマップします。 |
ダイレクト・マップ |
ダイレクト・マップ・マッピングでは、 |
集約オブジェクト |
オブジェクトが両方とも同じデータベース行に存在する必要がある、厳密な1対1マッピングを作成します。 |
変換 |
カスタム・マッピングを作成し、1つ以上のフィールドを使用して属性に格納するオブジェクトを作成できるようにします。 |
ネイティブTopLink企業情報システム(EIS)マッピングでは、Java EE Connector Architecture (JCA)アダプタを介した、レガシー・データ・ソースおよびエンタープライズ・アプリケーションへのアクセスをサポートします。TopLink EISマッピングでは、JCA Common Client Interface (CCI)を使用し、そのリソース・アダプタを介してEISにアクセスします。これにより、既存のJavaオブジェクト・モデルを直接トランザクション・データ・ソース(フラット・ファイル/階層データを持つメインフレームなど)にマップできるようになります。EISマッピングでは、オブジェクトのデータ・メンバーをオブジェクトのディスクリプタで定義されたEISレコード形式に変換します。
表18-2は、TopLinkが提供するEISマッピングのタイプを示しています。
表18-2 EISマッピングのタイプ
マッピング・タイプ | 説明 |
---|---|
ダイレクト・マッピング |
単純なオブジェクト属性を直接EISレコードにマップします。 |
コンポジット・ダイレクト・コレクション・マッピング |
Java属性のコレクションを直接EISレコードにマップします。 |
コンポジット・オブジェクト・マッピング |
Javaオブジェクトを私有の1対1リレーションシップでEISレコードにマップします。コンポジット・オブジェクト・マッピングは、2つのクラス間のリレーションシップを表します。 |
コンポジット・コレクション・マッピング |
Javaオブジェクトの |
1対1マッピング |
1つのソース・オブジェクトと1つのマップ済永続Javaオブジェクトの間のリレーションシップを表す、参照マッピングを定義します。 |
1対多マッピング |
1つのソース・オブジェクトとマップ済永続Javaオブジェクトのコレクションの間のリレーションシップを表す、参照マッピングを定義します。 |
トランスフォーメーション・マッピング |
カスタム・マッピングを作成し、1つ以上のEISレコード・フィールドを使用してJavaクラスの属性に格納するオブジェクトを作成できるようにします。 |
XMLマッピングは、オブジェクトのデータ・メンバーを、構造がXMLスキーマ・ドキュメント(XSD)により定義されているXML文書のXML要素に変換します。様々なXMLマッピング・タイプを使用して、XMLの単純および複合型の組合せにJavaオブジェクトの属性をマップできます。TopLinkでは、クラスのディスクリプタに各クラスのXMLマッピングを格納します。TopLinkでは、ディスクリプタを使用してXML文書からマップされたオブジェクトをインスタンス化し、新規または変更済のオブジェクトをXML文書として格納します。
表18-3は、XMLの単純および複合型の組合せにJavaオブジェクトの属性をマップするために使用可能なXMLマッピングのタイプを示しています。
表18-3 XMLマッピングのタイプ
マッピング・タイプ | 説明 |
---|---|
XMLダイレクト・マッピング |
単純なオブジェクト属性をXML属性またはテキスト・ノードにマップします。 |
XMLコンポジット・ダイレクト・コレクション・マッピング |
単純なオブジェクト属性のコレクションをXML属性またはテキスト・ノードにマップします。 |
XMLコンポジット・オブジェクト・マッピング |
シングル・オブジェクトを含む任意の属性をXML要素にマップします。TopLinkランタイムでは、参照されたオブジェクトのディスクリプタを使用してその要素の内容を移入します。 |
XMLコンポジット・コレクション・マッピング |
オブジェクトの同種のコレクションを含む属性を、複数のXML要素にマップします。TopLinkランタイムでは、参照されたオブジェクトのディスクリプタを使用してそれらの要素の内容を移入します。 |
XML任意オブジェクト・マッピング |
XML任意オブジェクトのマッピングは、XMLコンポジット・オブジェクトのマッピングと類似しています。ただし、参照オブジェクトが異なるタイプ( |
XML任意コレクション・マッピング |
XML任意コレクションのマッピングは、XMLコンポジット・コレクションのマッピングと類似しています。ただし、参照オブジェクトが異なるタイプ( |
XMLトランスフォーメーション・マッピング |
カスタム・マッピングを作成し、1つ以上のXMLノードを使用してJavaクラスの属性に格納するオブジェクトを作成できるようにします。 |
TopLinkエディタを使用して、Javaクラスを構成して、コードを使用せずに様々なデータソース(リレーショナル・データベース、企業情報システム(EIS)、XMLスキーマなど)にマッピングできます。TopLinkエディタは、EJB 3.1 JPAなどの複数のマッピング標準をサポートしています。
TopLinkエディタには、「アプリケーション」ウィンドウまたは「構造」ビューで選択した要素に固有の情報またはプロパティが表示されます。たとえば、「アプリケーション」ウィンドウでTopLinkマップやセッション構成ファイル(sessions.xml)などのTopLinkプロジェクト要素を選択すると、TopLinkエディタでそのプロパティを構成できるようになります。同様に、「構造」ビューでTopLinkマップ、ディスクリプタ、マップされた属性、およびマップされていない属性を選択すると、それぞれのプロパティがTopLinkエディタに表示されます。
TopLinkマップには、クラスをデータベース表またはXMLスキーマにどのようにマップするかに関する情報が含まれています。TopLinkエディタを使用して、次のようなマッピングの各コンポーネントを編集します。
ドライバ、URL、ログイン情報などのデータベース情報
アイデンティティ・マップ・オプション、キャッシュ・オプションなどのマッピングのデフォルト設定
TopLinkマップを構成するには、TopLinkマップ(tlMapなど)の「アプリケーション」ウィンドウ・コンテキスト・メニューの「開く」を選択するか、TopLinkマップの「構造」ビューを選択します。TopLinkエディタに、リレーショナルやEISなどのタイプに応じて、オブジェクト・マップのプロパティが表示されます。リレーショナル・オブジェクト・マップに対してTopLinkエディタを使用すると、たとえば順序付けのポリシーを構成できます。
TopLinkマッピングでは、ディスクリプタを使用して、データソース内で特定のクラスのインスタンスをどのように表現できるかに関する情報を格納します。マップのディスクリプタを構成するには、tlMapの「構造」ビュー・ディスクリプタを選択します。たとえば、エディタを使用すると、名前付き問合せを作成してアプリケーションのパフォーマンスを改善したり、ロック・ポリシーを構成してユーザーが互いの作業を上書きすることを回避できます。
TopLinkマッピングでは、データソース内でオブジェクトの属性がどのように表現されるかを定義します。「構造」ビューを使用してディスクリプタの属性のマッピングを構成するには、tlMapの「構造」ビューを選択します。
TopLinkセッション構成ファイル(sessions.xml)を使用すると、特定のプロジェクトのすべてのセッションを管理できます。TopLinkセッションの詳細は、『Oracle Fusion Middleware Oracle TopLink開発者ガイド』を参照してください。
TopLinkエディタでは、sessions.xmlの「構造」ビューの「開く」を選択することで、各セッションの情報(データソースのログイン情報、JTAトランザクションの使用、キャッシングなど)を完全にカスタマイズできます。また、TopLinkエディタでは、個々のセッションおよびそれらを管理するセッション・ブローカを作成および構成できます。セッション・ブローカを管理するには、sessions.xmlの「構造」ビュー・セッション・ブローカを選択します。
TopLinkエディタを使用すると、TopLink JPAプロジェクト内のエンティティをパッケージ化するpersistence.xml
ファイルを構成できます。persistence.xml
の「アプリケーション」ウィンドウの「開く」を選択すると、永続性ユニットを作成できます。
「構造」ウィンドウには、JPAディスクリプタおよび永続性ユニットが表示されます。永続ユニットを構成するには、persistence.xmlの「構造」ビュー永続性ユニットを選択します。
「構造」ビューには、「アプリケーション」ウィンドウまたはTopLinkエディタで選択されているTopLink要素に関する詳細情報が表示されます。次に例を示します。
EJBまたはJavaクラスを使用している場合、「構造」ビューには、関連のTopLinkディスクリプタおよびそのマッピンク属性が表示されます。
TopLinkセッション構成ファイルを使用している場合、「構造」ビューには、セッションおよびセッション・ブローカが表示されます。
永続性構成を使用している場合、「構造」ビューには、JPAディスクリプタおよび永続性ユニットが表示されます。
「構造」ビューには、ディスクリプタ、マッピング、セッション、および永続性ユニットを変更するためのアクセスを提供するツールバーがあります。このツールバーは状況に依存するため、「構造」ビューで選択されている要素によって表示されるボタンは変わります。
表18-4 TopLinkの「構造」ビューのツールバーのアイコン
アイコン | 名前 | 機能 |
---|---|---|
![]() |
ディスクリプタの追加または削除 |
TopLinkマップからディスクリプタを追加または削除します。 |
![]() |
自動マップ |
選択したディスクリプタまたは属性を同じ名前のデータベース・フィールドに自動マップしようとします。 |
![]() |
集約ディスクリプタ |
ディスクリプタ・タイプを集約ディスクリプタに変更します。つまり、表、主キーおよび他のオプションに関するディスクリプタの定義が所有ディスクリプタのものになります。 |
![]() |
クラス・ディスクリプタ |
ディスクリプタ・タイプをクラス・ディスクリプタに変更します。 |
![]() |
マップ |
選択した属性のマッピング・タイプを選択します。 |
![]() |
新規の永続性ユニット |
新規永続性ユニットを作成する場合、クリックします。 |
![]() |
新規データベース・セッションまたはサーバー・セッションを作成します |
セッション構成ファイル内でセッションを作成する場合、クリックします。 |
![]() |
セッション・ブローカの作成 |
新規のセッション・ブローカを作成する場合、クリックします。 |
![]() |
新規の名前付き接続プールを作成します |
新規の名前付き接続プール(使用目的は任意ですが、通常はセキュリティ目的の接続プール)を作成する場合、クリックします。 |
![]() |
シーケンス接続プールを追加します |
順序付けに特化して使用される接続プールを追加する場合、クリックします。TopLinkでは、新規オブジェクトに識別子を割り当てる必要があるときは常にシーケンス接続プールが使用されます。 |
「アプリケーション」ウィンドウには、TopLinkマップ、デプロイメント・ディスクリプタ、セッション構成情報など、TopLinkプロジェクトに関連付けられている各要素が表示されます。
「アプリケーション」ウィンドウに表示されるTopLinkプロジェクト要素には、次のものを含めることができます。
TopLinkフォルダ
セッション構成ファイル(sessions.xml
)
TopLinkマップ(tlMap)
TopLinkエディタには、TopLinkマッピング情報が表示されます。このエディタに表示される情報は、「アプリケーション」ウィンドウまたは「構造」ビューで選択したTopLink要素によって異なります。
「構造」ビューには、「アプリケーション」ウィンドウまたはTopLinkエディタで選択されているTopLink要素に関する詳細情報が表示されます。
EJBまたはJavaクラスを使用している場合、「構造」ビューには、関連のTopLinkディスクリプタおよびそのマッピンク属性が表示されます。
TopLinkセッション構成ファイルを使用している場合、「構造」ビューにはセッションおよびセッション・ブローカが表示されます。
永続性構成を使用している場合、「構造」ビューにはJPAディスクリプタおよび永続性単位が表示されます。
「構造」ビューで項目を選択すると、TopLinkエディタに次のプロパティが表示されます。
TopLinkマップ(tlMap)
ディスクリプタ
マップされたJava属性(1対1マッピング)
マップされていない属性
項目について特定の機能を実行するには、「アプリケーション」ウィンドウで項目を選択してから次のようにします。
「構造」ビューでオブジェクトを右クリックし、機能をポップアップ・メニューから選択します。
「構造」ビューでオブジェクトを選択し、「構造」ツールバーのボタンをクリックします。
TopLinkエディタの「構造」ビューには、ディスクリプタとマッピングを簡単に変更できるツールバーがあります。このツールバーは状況に依存するため、「構造」ビューで選択されている要素によって実際に表示されるボタンは変わります。
使用する永続性プロバイダ、使用するJPQLエディタ、および問合せタイプとフォーマットを構成できます。
TopLinkエディタのプリファレンスを構成するには、次のようにします。
JDeveloperでは、ネイティブTopLinkディスクリプタ(詳細は「TopLinkディスクリプタの使用」を参照)およびマッピング(詳細は「マッピングの使用」を参照)をTopLinkマップ(.mwp
ファイル)に格納し、セッションをsessions.xmlファイルに格納します。TopLinkマップには、クラスがデータベース表にどのようにマップされるかに関する情報が含まれています。TopLinkエディタを使用して、次のようなマッピングの各コンポーネントを編集します。
ドライバ、URL、ログイン情報などのデータベース情報
キャッシュ・オプションなどのマッピングのデフォルト設定
TopLinkマップ(またはTopLinkマップの要素)を選択すると、その属性がTopLinkエディタに表示されます。
TopLinkは、開発者がJDeveloperマッピング・エディタで作成したディスクリプタとマッピングを使用して、アプリケーションの永続エンティティをデータベースにマップします。マッピング・エディタは、次のようなプロジェクト開発に対するアプローチをサポートしています。
マッピング用のクラスと表のインポート
クラスのインポート、および表とマッピングの生成
表のインポート、およびクラスとマッピングの生成
クラス定義と表定義の作成
JDeveloperマッピング・エディタには、アプリケーションの永続エンティティまたはリレーショナル・モデル・コンポーネントを生成するための機能がいくつか用意されていますが、これらのユーティリティの目的はアプリケーションのラウンドトリップ開発を完了することではなく、短期間の初期開発方法を支援することのみです。
ネイティブTopLinkオブジェクト・マップを既存のプロジェクトに追加するには、次のようにします。
TopLinkでは、次のダイレクト・マッピング・タイプは使用されません。
タイプ変換
オブジェクト・タイプ
シリアライズ・オブジェクト
かわりに、TopLinkでは特殊なコンバータによって、フィールドへ直接マッピングを使用します。下位互換性のあるデプロイXMLファイルを生成するには、「TopLinkマップ」オプションの「一般」ページの「推奨されないダイレクト・マッピングの生成」オプションを使用します。
TopLinkの「自動マップ」ウィザードでは、Javaクラス属性を同様の名前のデータベース・フィールドに自動的にマップできます。「自動マップ」ウィザードでは、マップされていない属性に対するマッピングのみ作成されます。すでに定義されているマッピングは変更されません。
「自動マップ」ウィザードは、プロジェクト全体または特定のクラス、あるいはディスクリプタに対して使用できます。
TopLinkディスクリプタを自動マップするには、次のようにします。
TopLinkエディタは、JDBCを使用してアクセスされる従来型のリレーショナル・データベースにJavaオブジェクトをマップするリレーショナル・プロジェクトの作成を完全にサポートします。従来のリレーショナル・データベース、またはオブジェクト記憶域に特化されたデータ型をサポートするオブジェクト・リレーショナル・データベース(どちらのデータベースも、JDBCを使用してアクセスします)に対するJavaオブジェクトのトランザクション永続性を可能にするために、TopLinkリレーショナル・プロジェクトを使用します。
オブジェクト・リレーショナル・データベースに対するリレーショナル・プロジェクトを作成するには、Javaコードを使用してプロジェクトを作成する必要があります。オブジェクト・ストレージ用に特化されたデータ・タイプをサポートする、JDBCを使用してアクセスされるオブジェクト・リレーショナル・データベース(Oracle Databaseなど)に対するJavaオブジェクトのトランザクション永続性を可能にする、リレーショナル・プロジェクトを作成できます。
オブジェクト・リレーショナル・データベースに対するリレーショナル・プロジェクトを作成するには、Javaコードを使用してプロジェクトを作成する必要があります。オブジェクト・ストレージ用に特化されたデータ・タイプをサポートする、JDBCを使用してアクセスされるオブジェクト・リレーショナル・データベース(Oracle Databaseなど)に対するJavaオブジェクトのトランザクション永続性を可能にする、リレーショナル・プロジェクトを作成できます。
リレーショナル・プロジェクトの新規ネイティブTopLinkオブジェクト・マップを作成するには、次のようにします。
リレーショナル・プロジェクトに対する新規プロジェクトを作成する場合は、次のように新規プロジェクトを作成します。
メイン・メニューから「ファイル」→「新規」→「プロジェクト」を選択します。
「新規ギャラリ」で、「プロジェクト」→「カスタム・プロジェクト」を選択します。
「アプリケーション」ウィンドウで、TopLinkオブジェクト・マップを作成するプロジェクトを右クリックし、「新規」→「ギャラリから」を選択します。
「新規ギャラリ」で、「ビジネス層」を展開して「TopLink/JPA」を選択し、「TopLinkオブジェクト・マップ」を選択します。
「OK」をクリックします。
「新規TopLinkオブジェクト・マップ」ダイアログの「データソース」領域で、「データベース」を選択し、データベース情報を指定します。
「OK」をクリックします。
新規プロジェクトにTopLinkマップとTopLinkセッション構成ファイル(sessions.xml
)が追加されます。
リレーショナル・ディスクリプタには、リレーショナル・データベース内の表にマップするJavaオブジェクトを記述します。リレーショナル・プロジェクトでは、ディスクリプタをクラス・ディスクリプタまたは集約ディスクリプタとして指定できます。
クラス・ディスクリプタは任意の永続オブジェクトに適用できますが、集約オブジェクトには適用できません。クラス・ディスクリプタを使用すると、集約コレクション・マッピングおよび集約オブジェクト・マッピングを除く任意のリレーショナル・マッピングを構成できます。
集約オブジェクトは、所有オブジェクトに厳密に依存するオブジェクトです。集約ディスクリプタでは、表、主キー、または多くの標準ディスクリプタ・オプションは所有ディスクリプタから継承されるため、これらは定義されません。集約マッピングを構成し、ターゲット・オブジェクト内のデータ・メンバーを、ソース・オブジェクトの基礎となるデータベース表のフィールドと関連付けるには、ターゲット・オブジェクトのディスクリプタを集約として指定する必要があります。
ディスクリプタの継承は集約として構成できますが、この場合、継承ツリー内のすべてのディスクリプタが集約である必要があります。集約ディスクリプタとクラス・ディスクリプタは、同じ継承ツリーに置くことはできません。
クラス・ディスクリプタを集約ディスクリプタに変更したり、リレーショナル・ディスクリプタから集約指定を削除してデフォルトのタイプに戻すこともできます。詳細は、「リレーショナル・ディスクリプタの構成方法」を参照してください。
注意:
クラス・ディスクリプタを集約ディスクリプタに変更する場合、ディスクリプタの既存の情報は永久的に失われます。ディスクリプタをクラス・ディスクリプタに戻す場合、これを再構成する必要があります。
新規TopLinkディスクリプタを作成するには、次のようにします。
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マッピングを作成し、それを引き続き操作できるようになります。
XMLプロジェクトの新規ネイティブTopLinkオブジェクト・マップを作成するには、次のようにします。
XMLプロジェクトに対する新規プロジェクトを作成する場合は、次のように作成します。
メイン・メニューから「ファイル」→「新規」→「プロジェクト」を選択します。
「新規ギャラリ」で、「プロジェクト」→「カスタム・プロジェクト」を選択します。
「アプリケーション」ウィンドウで、TopLink XMLオブジェクト・マップを作成するプロジェクトを右クリックし、「新規」→「ギャラリから」を選択します。
「新規ギャラリ」で、「ビジネス層」を展開して「TopLink/JPA」を選択し、「TopLinkオブジェクト・マップ」を選択します。
「OK」をクリックします。
「新規TopLinkオブジェクト・マップ」ダイアログの「データソース」領域で、「XML」を選択します。
「OK」をクリックします。
JDeveloperでは、TopLinkマップおよびTopLinkセッション構成ファイル(sessions.xml
)が追加されます。
既存のデータ・モデル(XMLスキーマ文書)はあるが、対応するオブジェクト・モデル(ドメイン・オブジェクトに対するJavaクラス)がない場合は、次の手順を使用してTopLinkプロジェクトを作成し、対応するオブジェクト・モデルを自動生成します。
XMLスキーマを追加するには、次のようにします。
TopLink JAXBコンパイラでは、必要なJAXBファイルおよびTopLinkファイルがともにXMLスキーマ(XSD)文書から自動生成されるため、TopLinkによるJAXBアプリケーション開発が容易になります。生成後は、JAXBオブジェクト・モデルを再コンパイルしなくても、XMLマッピングを微調整できます。
Java EE Connector Architecture (JCA)アダプタおよびEISレコードを使用してアクセスされる非リレーショナル・データソースに対して、Javaオブジェクトのトランザクション永続性を可能にするTopLink EISプロジェクトを使用します。
EISプロジェクトを使用して、レガシーまたは非リレーショナルのデータソースとTopLinkを統合することをお薦めします。TopLinkは、TopLinkマッピングを使用してJ2Cを介した、JavaオブジェクトからEISのマップ済レコード、索引付きレコードおよびXMLレコードへのマッピングをサポートしています。J2Cにより、非リレーショナルEISにアクセスするためのCommon Client Interface (CCI) APIが提供されます。これにより、JDBCによってリレーショナル・データ・ソースへのアクセスに提供されるインタフェースに類似した、非リレーショナル・データ・ソースへのインタフェースが実現されます。
EISには、レガシー・データ・ソース、エンタープライズ・アプリケーション、レガシー・アプリケーションおよびその他の情報システムが含まれます。これらのシステムにはCustomer Information Control System (CICS)、Virtual Storage Access Method (VSAM)、Information Management System (IMS)、ADABASEデータベースおよびフラット・ファイルなどのソースが含まれます。EISプロジェクトを使用して、レガシーまたは非リレーショナルのデータソースとTopLinkを統合することをお薦めします。EISデータ・ソースにアクセスするその他の方法には、次のものがあります。
EISシステムがリレーショナル・データベースであるかのようにEISシステムに接続できる特別なJDBCドライバを使用します。これらのドライバとともにTopLinkリレーショナル・プロジェクトを使用できます。
Oracleデータベースなどのリレーショナル・データベースにあるEISデータとリンクまたは統合します。
プロプラエタリのAPIを使用してEISシステムにアクセスします。この場合、JCA CCIインタフェースでAPIをラップして、TopLink EISプロジェクトとともに使用できるようにすることもできます。
Java EE Connector Architecture (JCA)アダプタおよびEISレコードを使用してアクセスされる非リレーショナル・データソースに対して、Javaオブジェクトのトランザクション永続性を可能にするEISプロジェクトを使用します。
EISマッピングでは、オブジェクトのデータ・メンバーをオブジェクトのディスクリプタで定義されたEISレコード形式に変換します。
EISプロジェクトの新規ネイティブTopLinkオブジェクト・マップを作成するには、次のようにします。
EISプロジェクトに対する新規プロジェクトを作成する場合は、次のように作成します。
メイン・メニューから「ファイル」→「新規」→「プロジェクト」を選択します。
「新規ギャラリ」で、「プロジェクト」→「カスタム・プロジェクト」を選択します。
「アプリケーション」ウィンドウで、TopLinkオブジェクト・マップを作成するプロジェクトを右クリックし、「新規」→「ギャラリから」を選択します。
「新規ギャラリ」で、「ビジネス層」を展開して「TopLink/JPA」を選択し、「TopLinkオブジェクト・マップ」を選択します。
「OK」をクリックします。
「新規TopLinkオブジェクト・マップ」ダイアログの「データソース」領域で、「EIS」を選択し、使用するEISプラットフォームを指定します。
「OK」をクリックします。
JDeveloperでは、TopLinkマップおよびTopLinkセッション構成ファイル(sessions.xml
)が追加されます。
EISディスクリプタには、JCAアダプタを介してEISデータ・ソースにマップするJavaオブジェクトを記述します。
EISディスクリプタを作成するには、次のようにします。
TopLinkマップは、それぞれ1つのTopLinkセッションに属します。セッションとは、アプリケーションがTopLink機能へのアクセスに使用するファサードです。セッションにより、データ・ソース・プラットフォーム情報、データ・ソース・ログイン情報および特定のアプリケーションのマッピング・メタデータが関連付けられます。マッピング・メタデータは、各種セッションを定義することにより、様々なアプリケーションで再利用できます。
TopLinkセッションは、TopLinkランタイムにアクセスするための主要手段となります。これを使用すると、アプリケーションは永続オブジェクトが含まれるデータソースに対して永続データ操作を実行できます。セッションにより、データ・ソース・プラットフォーム情報、データ・ソース・ログイン情報および特定のアプリケーションのマッピング・メタデータが関連付けられます。マッピング・メタデータは、各種セッションを定義することにより、様々なアプリケーションで再利用できます。
TopLinkには様々なセッション・タイプが用意されており、それぞれ異なる設計要件およびデータ・アクセス方法に向けて最適化されています。同一のアプリケーション内で様々なセッション・タイプを使用することができます。
TopLinkエディタには、次のTopLinkセッションがあります。
サーバー・セッションおよびクライアント・セッション - サーバー・セッションでは、データベースやEISの各プラットフォームを使用する3層アーキテクチャの複数クライアント用に、単一のデータソース(共有オブジェクトや接続プールなど)に対するセッション管理を提供します。これは最も柔軟かつスケーラブルで、最もよく使用されるセッションです。実行時にサーバー・セッションからクライアント・セッションを取得して、クライアントごとに単一データ・ソースにアクセスします。
データベース・セッション - データベース・セッションは、1つの接続で1ユーザーのすべてのデータソース・リクエストを処理する単純なスタンドアロン・アプリケーションでのクライアント・アプリケーションに、単一のデータソース接続を提供します。
セッション・ブローカおよびクライアント・セッション - セッション・ブローカは、2つ以上のサーバー・セッションを集約することで、複数クライアントの複数データソースに対するセッション管理を提供します(データベース・セッションで使用することもできます)。
実行時にセッション・ブローカからクライアント・セッションを取得して、クライアントごとにセッション・ブローカによって管理されているすべてのデータ・ソースにアクセスします。
他のセッション・タイプは、Javaコードで直接構成できます。セッション・タイプの詳細は、『Oracle® Fusion Middleware Oracle TopLink開発者ガイド』を参照してください。
各ネイティブTopLinkセッション構成(sessions.xmlファイル)には、複数のセッションとセッション・ブローカを含めることができます。また、含めたすべてのセッションに適用される各セッション構成のクラスパスを指定できます。
新規セッション構成ファイルを作成するには、次のようにします。
ネイティブTopLinkセッションは、TopLinkランタイムにアクセスするための主要手段となります。これは、アプリケーションが永続オブジェクトが含まれるデータ・ソースに対してあらゆる永続データ操作を実行するための手段となります。
セッションにより、データ・ソース・プラットフォーム情報、データ・ソース・ログイン情報および特定のアプリケーションのマッピング・メタデータが関連付けられます。マッピング・メタデータは、各種セッションを定義することにより、様々なアプリケーションで再利用できます。
新規TopLinkセッションを作成するには、次のようにします。
セッションの作成および構成後は、実行時にTopLinkセッション・マネージャを使用してセッション・インスタンスを取得できます。TopLinkセッション・マネージャを使用すると、単一のエンティティの下で保持される一連のセッションを構築できます。セッション・マネージャは、静的ユーティリティ・クラスです。TopLinkのセッションをsessions.xml
ファイルからロードし、名前によってセッションをメモリーにキャッシュし、各TopLinkセッションに対して1つのアクセス・ポイントを提供します。
セッション・マネージャには、2つの主な機能があります。すなわち、セッションのインスタンスを作成することと、各名前付きセッションの1つのインスタンスのみがセッション・マネージャの任意のインスタンスに対して存在することを保証することです。
セッション・マネージャでは、次のようにセッションをインスタンス化します。
クライアント・アプリケーションが名前を使用してセッションを要求します。
セッション・マネージャは、sessions.xml
ファイル内のセッション名を検索します。セッション名が存在する場合、セッション・マネージャは、指定されたセッションをインスタンス化します。それ以外の場合は、例外が発生します。
インスタンス化の後、セッションは、アプリケーションが停止されるまで実行可能です。
セッション・インスタンスの設定後は、それを使用して特別タスク用にセッションの追加タイプを取得できます。セッション・マネージャは、EJBアプリケーションでは特に便利です。Enterprise Beanがセッション・マネージャを取得でき、そこから目的のセッションを取得できるためです。
セッション・ブローカは、クライアント・アプリケーションが単一のTopLinkセッションで複数のデータベースに透過的にアクセスできるようにするメカニズムです。セッション・ブローカには、サーバー・セッションとデータベース・セッションの両方が含まれる場合があります。セッション・ブローカはサーバー・セッションと使用することをお薦めします。これは、サーバー・セッションが最もスケーラブルなセッション・タイプであるためです。
サーバー・セッションを指定してセッション・ブローカを作成、構成した後は、実行時にセッション・ブローカからクライアント・セッションを取得して、各クライアントについてセッション・ブローカによって管理されているすべてのデータ・ソースへの専用接続を提供できます。
新規セッション・ブローカを作成するには、次のようにします。
TopLinkセッション構成ファイル(sessions.xml)により、TopLinkマップ内で指定したすべてのログイン情報がオーバーライドされます。リレーショナル・データベースまたはEISデータソースに対してデータソース・ログインを作成できます。
データソースを作成する手順は、次のとおりです。
接続プールは、1つ以上のクライアントのかわりにデータソース接続の共有コレクション(プール)を作成および保持するサービスです。接続プールは、リクエストに基づいてプロセスに接続を提供し、プロセスが接続の使用を終了すると、接続をプールに返します。接続は、プールに返されると、他のプロセスで使用できます。
データ・ソースへの接続の確立には時間がかかるため、接続プールのこのような接続を再使用してパフォーマンスを向上できます。TopLinkは、接続プールを使用して、サーバーおよびクライアント・セッションで使用される接続を管理および共有します。単一のデータソースへの接続を再利用することにより、必要な接続数が減り、アプリケーションで多くのクライアントをサポートできるようになります。
新規接続プールを作成するには、次のようにします。
「アプリケーション」ウィンドウで、TopLink構成(sessions.xml
)を選択します。
sessions.xml
「構造」ウィンドウで「セッション」ノードを展開し、TopLinkセッションを選択します。
セッションを右クリックし、ポップアップ・メニューの「新規」→「名前付き接続プール」を選択します。
接続プールの名前を入力し、「OK」をクリックします。
JDeveloperは、「構造」ウィンドウに接続プールを追加します。
新しく作成された接続プールを選択します。
そのプロパティが「エディタ」ウィンドウの「接続プール」ページに表示されます。
Oracle TopLinkは、オブジェクトの永続性およびオブジェクト・トランスフォーメーションのための高度なフレームワークを提供します。開発やメンテナンスのコストを軽減し、エンタープライズ・アプリケーションの機能を高める開発ツールおよびランタイム機能が用意されています。
TopLinkキャッシュは、クラスと主キーの値に基づいて最近読み取られたか書き込まれたオブジェクトが格納される、インメモリー・リポジトリです。
TopLinkでは、次の目的でこのキャッシュが利用されます。
最近読み取られたり書き込まれたオブジェクトを保持し、メモリー内でそれらにアクセスしてデータベースへのアクセスを最小限にすることで、パフォーマンスを向上させます。
ロックと分離レベルを管理します。
オブジェクト・アイデンティティを管理します。
TopLinkでは、次の2種類のキャッシュが使用されます。
セッション・キャッシュ - 特定のセッションにアタッチされたクライアントに対してサービスを提供する共有キャッシュ。クライアント・セッションがデータソースに対してオブジェクトの読取りや書込みを行うと、TopLinkでは親サーバー・セッションのキャッシュにオブジェクトのコピーが保存され、このコピーがセッション内のその他すべてのプロセスにアクセスできるようになります。
TopLinkでは、オブジェクトが次の場所からセッション・キャッシュに追加されます。
データ・ストア: TopLinkで読取り操作が実行された場合。
作業ユニット・キャッシュ: 作業ユニットがトランザクションを正常にコミットした場合。
作業ユニット・キャッシュ - 作業ユニット内の操作にサービスを提供します。作業ユニット・キャッシュは、オブジェクトを保持してセッション・キャッシュから分離し、作業ユニットが変更内容をデータ・ソースにコミットした後、変更されたオブジェクトまたは新規オブジェクトをセッション・キャッシュに書き込みます。TopLinkは、作業ユニットがデータソースにコミットすると、セッション・キャッシュを更新します。
TopLinkは、順序付けによって割り当てられる場合と割り当てられない場合がある、永続エンティティの主キー属性を使用して、キャッシュを介してオブジェクト・アイデンティティを保持します。オブジェクト・アイデンティティは、常に保持することをお薦めします。オブジェクト・アクティビティを無効化するのは、読取り専用オブジェクトの場合など、絶対に必要な場合のみにしてください。
共有セッション・キャッシュに対して実行される問合せは、インメモリー問合せと呼ばれます。
デフォルトでは、主キーに基づいてシングル・オブジェクトを検索する問合せは、必要なオブジェクトをまずキャッシュから取得し、オブジェクトがキャッシュに存在しない場合にのみ、データ・ソースで検索を行います。その他すべての問合せタイプの場合は、デフォルトでデータベースを最初に検索します。特定の問合せを、インメモリー・キャッシュ、データベース、その両方のうち、いずれに対して実行するかを指定できます。
複数のオブジェクトが最新の状態である必要があるシステムの場合、分散キャッシュ・コーディネーションを行うほどの負荷をかけずに、これらのオブジェクトをデータベースから明示的にリフレッシュするよう指定できます。手順は次のとおりです。
必要なオブジェクトをリフレッシュする一連の問合せを構成します。
適切なリフレッシュ・ポリシーを設定します。
必要に応じて問合せを起動し、オブジェクトをリフレッシュします。
キャッシュの無効化ポリシーを使用して、キャッシュされたオブジェクトが無効になる方法とタイミングを指定します。キャッシュ無効化の使用により、失効したデータがアプリケーションで使用されないようにします。特定の時刻にオブジェクトを無効化したり、オブジェクトが読み込まれてから指定した時間が経過したらオブジェクトを無効としてマークするようキャッシュを構成できます。または、オブジェクトを明示的にのみ無効化する無効化ポリシーを設定することもできます。無効化ポリシーを設定する場合、すべてのオブジェクトに適用するにはプロジェクト・レベルで構成し、特定のオブジェクトに適用するにはディスクリプタ・レベルで構成し、問合せから戻された結果に適用するには問合せレベルで構成します。
キャッシュ・コーディネーションでは、データソースへのアクセスを回避することでパフォーマンスが向上します。セッションのインスタンスが相互にオブジェクト変更をブロードキャストすることにより、各セッションのキャッシュが最新の状態に保たれるか、次回読み取るデータソースを基にオブジェクトを更新する必要があることが通知されるため、失効したデータも削減されます。また、キャッシュ・コーディネーションにより、分散環境でのオプティミスティック・ロック例外の数は減少し、アプリケーションで失敗するトランザクションや繰り返されるトランザクションの数も減少します。読取りベースであり、同じオブジェクトを定期的にリクエストおよび更新し、複数の分散セッションを持つ単一のJavaアプリケーションによって実行された変更があるアプリケーションに対してキャッシュ・コーディネーションを使用します。
キャッシュ・コーディネーションのかわりに、アイデンティティ・タイプ、キャッシュ無効化またはキャッシュ分離を使用してread-only、read-mostlyおよびwrite-mostlyクラスごとにTopLinkキャッシュをチューニングすることもできます。このチューニングは、キャッシュ・コーディネーションの前に実行できます。
独立クライアント・セッションには、共有サーバー・セッション・キャッシュを無効化するメカニズムがあります。独立クラスとしてマークされたクラスは、すべてクライアント・セッションのライフ・サイクルを基準としてオブジェクトをキャッシュします。これらのクラスは、共有サーバー・セッション・キャッシュを使用しません。このメカニズムでは、キャッシュを一部のクラスに許可し、一部のクラスに禁止するようクラス単位で構成できるため、キャッシュの抑制に最適です。
TopLinkキャッシュは、クラスと主キーの値に基づいて最近読み取られたか書き込まれたオブジェクトが格納される、インメモリー・リポジトリです。
JDeveloperでは、特定のTopLinkマップに対してTopLinkキャッシュを構成できます。キャッシュ・オプションは、すべてのディスクリプタに対してグローバルに適用されます。マップ・レベルのキャッシュ構成をオーバーライドするには、ディスクリプタ・レベルでキャッシュ構成を定義します。
TopLinkマップ・レベルでTopLinkキャッシュを構成するには、次のようにします。
「アプリケーション」ウィンドウで、TopLinkマップを選択します。
「構造」ウィンドウで、TopLinkマップをダブルクリックします。
「デフォルト」タブを選択します。
「キャッシング」で、キャッシュ・オプションを設定します。キャッシュ・タイプは、 「完全」、「なし」、「ソフト」、「弱」、「弱参照キャッシュと強参照サブキャッシュ」、「弱参照キャッシュとソフト参照サブキャッシュ」の中から選択できます。これらのキャッシュ・タイプとそのオプションの詳細は、[F1]キーを押してオンライン・ヘルプを参照してください。
ディスクリプタ・レベルでTopLinkキャッシュを構成するには、次のようにします。
TopLinkを使用すると、リレーショナルや非リレーショナルのデータソースに対して、Java EEおよびJava EE以外のアプリケーションの両方で問合せを使用して、永続オブジェクトまたはデータを作成、読取り、更新および削除できます。問合せの詳細は、『Oracle® Fusion Middleware Oracle TopLink開発者ガイド』を参照してください。
データソースの問合せとは、データソースの内容に対する操作の実行、データソースの内容との相互作用を意味します。そのための手順は、次のとおりです。
問い合せるデータ・ソースのネイティブな構文で操作を定義します。
制御された方法で操作を適用します。
操作によって結果が返された場合は、それを管理します。
また、TopLinkでは、問合せがTopLinkキャッシュにどのような影響を与えるのかも考慮する必要があります。
TopLinkを使用すると、次の問合せ言語のいずれかを使用して問合せを表現できます。
SQL問合せ
EJBQL問合せ
JPQL問合せ
XML問合せ
EISインタラクション
例による問合せ
TopLink式
名前付き問合せ - 以前に作成済で準備された場所であるディスクリプタのDescriptorQueryManager
またはセッションに名前別に格納されるDatabaseQuery
のインスタンス。その後、この問合せは、名前を使用して繰り返し実行することができます。
コール問合せ - 作成した後、データのみに限定されたデータソース・アクションを実行するための特別なセッションAPIを使用して直接実行するか、DatabaseQuery
のコンテキストで間接的に実行するコールのインスタンス。TopLinkは、カスタムSQL、ストアド・プロシージャおよびEISインタラクションに対するコール・インスタンスをサポートしています。
ディスクリプタ問合せマネージャ - DescriptorQueryManager
では、各基本データソース操作(作成、読取り、更新および削除)のデフォルトのDatabaseQuery
を定義します。また、DatabaseQuery
またはそのコールのいずれかをカスタマイズするために使用できるAPIを提供します。
EJB 2.n CMPファインダ - Enterprise Beanを戻すEnterprise Beanのホーム・インタフェースで定義される問合せ。JPAQLCall
、EJBQLCall
、JPA/EJB QLをとるコールを含め、任意のTopLink問合せタイプを使用してファインダを実装できます。
ほとんどの場合、特定の問合せ言語で問合せを直接構成できます。可能であれば、適切なコールを使用してDatabaseQueryを構成し、TopLink式を使用して選択基準を指定することをお薦めします。SQLで問合せを直接構成する方法が最も簡単な方法(つまり、簡単な操作またはアンマップ・データに対する操作)であるように思われますが、DatabaseQueryを使用した方法の場合、問合せをドメイン・オブジェクト・モデルに限定し、データソース・スキーマ実装の詳細に依存しなくてすむという大きな利点があります。
問合せには、渡された引数に基づいて暗黙的に作成され、ワン・ステップで実行されるもの(たとえば、セッション問合せ)と、ユーザーが明示的に作成、構成および実行するもの(たとえば、データベース問合せ)があります。
問合せを作成するには:
TopLink基本問合せAPIには、最も一般的に使用される次の問合せのサポートが含まれます。
セッション問合せ
DatabaseQuery問合せ
名前付き問合せ
SQLコール
EJBQLコール
EISインタラクション
コレクション問合せの結果
レポート問合せの結果
TopLink問合せAPIを使用すると、より詳細な次の問合せAPIコールおよび手法を使用することもできます。
リダイレクト問合せ
履歴問合せ
フェッチ・グループ
読取り専用問合せ
インタフェース
継承階層
その他の結合式
EJBファインダ
カーソルとストリームの問合せ結果
詳細な問合せAPIの詳細は、『Oracle® Fusion Middleware Oracle TopLink開発者ガイド』を参照してください。
リダイレクト問合せとは、問合せの実行制御をアプリケーションに委任する名前付き問合せです。リダイレクト問合せを使用すると、問合せの実装をコード内でstaticメソッドとして定義できます。複雑な操作を実行する場合、問合せのリダイレクタをTopLinkの問合せフレームワークと組み合せることができます。
時間に関する問合せを作成するには、TopLinkで問合せに追加するAsOfClause
を指定します。AsOfClause
クラスは、履歴スキーマがタイムスタンプに基づいている場合に使用し、AsOfSCNClause
クラスは、履歴スキーマがデータベース・システムの変更数に基づいている場合に使用します。履歴セッションを取得する際にAsOfClause
を指定することにより、TopLinkですべての問合せに対して同じ句が追加されるようにするか、問合せごとにAsOfClause
を指定できます。
フェッチ・グループは、ReadObjectQueryまたはReadAllQueryとともに使用できます。問合せを実行すると、TopLinkによりフェッチ・グループ内の属性のみが取得されます。除外された属性のいずれかに関するgetterメソッドをコールすると、TopLinkでは、このサブセットから除外されたすべての属性をフェッチする問合せが自動的に実行されます。
データが読取り専用であることがわかっている場合は、問合せを読取り専用として指定することでパフォーマンスを向上できます。これにより、問合せによって返されるオブジェクトが不変であることがTopLinkに通知されます。
オブジェクト・レベルの読取り問合せを読取り専用として構成できます。このような問合せをUnitOfWork
のコンテキストで実行すると、読取り専用の未登録オブジェクトがTopLinkによって返されます。読取り専用オブジェクトは登録や変更の確認をする必要がないため、この方法で読取り専用データを問い合せると、パフォーマンスを向上できます。
インタフェースのディスクリプタを定義して問合せを有効にした場合、TopLinkではインタフェースに対する問合せが次のようにサポートされます。
インタフェースのインプリメンタが1つしかない場合、問合せでは具象クラスのインスタンスが返されます。
インタフェースのインプリメンタが複数ある場合、問合せでは実装するすべてのクラスのインスタンスが返されます。
継承階層の一部であるクラスに対して問合せを行うと、セッションによりディスクリプタがチェックされ、次のようにクラスのタイプが特定されます。
サブクラスを読み取るようにディスクリプタを構成(デフォルト構成)すると、問合せではクラスとそのサブクラスのインスタンスが返されます。
サブクラスを読み取らないようにディスクリプタを構成すると、問合せでは問合せ対象となるクラスのインスタンスのみが返されます。サブクラスのインスタンスは返されません。
サブクラスを外部結合するようにディスクリプタを構成すると、問合せではクラスとそのサブクラスのインスタンスが返されます。
サブクラスを外部結合するようにディスクリプタを構成すると、問合せではクラスとそのサブクラスのインスタンスが返されます。
あるクラスで実行する各問合せに自動的に式を追加するよう、問合せマネージャを設定することができます。たとえば、特定のクラスの有効なインスタンスに対してデータベースをフィルタ処理する式を追加できます。これは、次の目的で使用します。
論理的に削除されたオブジェクトをフィルタ処理する場合
2つの別々のクラスが継承を使用せずに単一の表を共有できるようにする場合
オブジェクトの履歴バージョンをフィルタ処理する場合
TopLink問合せフレームワークを使用するエンティティBeanに対してファインダを作成するには、ファインダの定義、宣言および構成が必要です。事前定義されたファインダの場合、ファインダを明示的に作成する必要はありません。デフォルトのファインダの場合、ファインダのメソッドのみを作成する必要があります。
カーソルとストリームは、大きな結果セットを効率的に扱うことのできる関連メカニズムです。ストリームとはコレクションのビューであり、ファイル、デバイス、Vectorなどです。ストリームを使用すると、コレクションの要素に一度に1つずつ順にアクセスできます。これにより、1つのコレクションの全オブジェクトが同時にストリームに含まれることのないストリーム・クラスの実装が可能になります。
大きな結果セットは、収集して処理する際に、リソースを大量に消費します。パフォーマンスを向上させ、クライアントが返された結果をより確実に制御できるようにするには、カーソルまたはストリームを使用するようTopLink問合せを構成します。カーソルとストリームは、DataReadQuery
およびReadAllQuery
のすべてのサブクラスでサポートされています。
TopLinkの式を使用すると、ドメイン・オブジェクト・モデルに基づいて問合せの検索基準を指定できます。問合せを実行する際、TopLinkではこれらの検索基準を、使用しているプラットフォームに適した問合せ言語に変換します。
TopLinkは、式をサポートする次の2種類のパブリック・クラスを提供します。
Expression
クラスは、単純な定数からブール・ロジックを伴う複雑な句まで、あらゆる式を表します。式の操作、グループ化および統合を行うことができます。
ExpressionBuilder
クラスは、新しい式を構成するためのファクトリです。選択基準は、DatabaseQuery
のメソッドsetSelectionCriteria
を使用してExpression
として指定したり、Expression
を取るファインダに指定できます。
通常、単純な式は次の部分で構成されています。
属性: 永続クラスの問合せキーまたはマップされた属性を表します。
演算子: GreaterThan
、Equal
またはLike
などのブール・ロジックを実装する式メソッドです。
定数または比較: オブジェクトの選択に使用される値を参照します。
名前付き問合せで使用する基本式を作成するには、次のようにします。
「アプリケーション」ウィンドウで、TopLinkマップを選択します。
「構造」ウィンドウでディスクリプタを選択します。
名前付き問合せを選択し、「選択基準」領域で式を編集します。
データベース・トランザクションは、単一操作として成功または失敗した一連の操作(作成、更新または削除)です。失敗したトランザクションは破棄されるかロールバックされ、データベースは元の状態のままにされます。トランザクションには、内部トランザクション(TopLinkによって提供されるもの)または外部トランザクション(アプリケーション・サーバーなどのアプリケーションの外部のソースによって提供されるもの)があります。
TopLinkでは、トランザクションは作業ユニット・オブジェクトに含まれます。作業ユニットをセッションから取得し、そのAPIを使用すると、直接、またはJava Transaction API (JTA)などのJava 2 Enterprise Edition (Java EE)アプリケーション・サーバー・トランザクション・コントローラを使用して、トランザクションを制御できます。
トランザクションがコミットされるたびに、データベースではデータに加えられたすべての変更のログが記録されます。トランザクション内の操作がすべて成功した場合は、データベースが変更されますが、トランザクションの一部が失敗した場合は、ログを使用して変更内容がロールバックされます。
トランザクションは、独自のコンテキスト(論理領域)の中で、他のトランザクションやデータベース操作から独立して実行されます。トランザクション・コンテキストには境界が設定されています。つまり、トランザクション・コンテキストは次のものを含む定義済の構造を持ちます。
トランザクション内の操作が開始される開始ポイント。トランザクションは、このポイントで操作の実行を開始します。
操作が完了し、トランザクションが変更内容をデータベースに正式に反映しようとする、コミット・ポイント。
同じデータに対する同時(並列)トランザクションが相互作用できる度合いは、構成されているトランザクション分離のレベルによって決まります。ANSI/SQLでは、4つのレベルのデータベース・トランザクション分離が定義されています。どのレベルでも、パフォーマンスと次のような望ましくない動作による悪影響の間でトレードオフが発生します。
内容を保証しない読取り: トランザクションが同時トランザクションによって書き込まれた未コミット・データを読み取ります。
非リピータブル・リード: トランザクションがデータを再度読み取り、最初の読取り操作後にコミットされた他のトランザクションによってデータが変更されていることを検出します。
非リピータブル・リード: トランザクションがデータを再度読み取り、最初の読取り操作後にコミットされた他のトランザクションによってデータが変更されていることを検出します。
作業ユニットは、トランザクション内で行われた変更を、その変更がデータベースに正常にコミットされるまで、他のスレッドから分離します。その他のトランザクション・メカニズムとは異なり、作業ユニットはトランザクション内のオブジェクトに対する変更、変更の順序および他のTopLinkのキャッシュを無効にする可能性がある変更を自動的に管理します。作業ユニットは、最小のチェンジ・セットを計算し、参照整合性規則に準拠してデッドロックを回避するようにデータベース・コールを順序付けし、変更されたオブジェクトを共有キャッシュにマージして、これらの問題を管理します。クラスタ化環境では、作業ユニットはコーディネート・キャッシュ内の他のサーバーと変更を同期化することもできます。
通常のトランザクションと同様に、作業ユニット・トランザクションは次のものを提供します。
作業ユニット・トランザクションのコンテキスト - 作業ユニット操作は、書込みがコミット時までデータベースから分離される作業ユニットのコンテキスト内で行われます。作業ユニットは、独自の内部キャッシュ内でオブジェクトのコピーまたはクローンに対して変更を実行し、成功した場合、データベースおよびセッション・キャッシュ内のオブジェクトに変更を適用します。
作業ユニット・トランザクションの境界設定 - TopLinkアプリケーションでは、作業ユニットを使用してトランザクションの境界が設定されます。アプリケーションにコンテナ管理トランザクションを提供するJava EEコンテナが含まれている場合、アプリケーション・サーバーでは、独自のトランザクション・サービスを使用して、トランザクションの境界が設定されます。TopLinkの外部トランザクション・コントローラを指定することで、コンテナのトランザクション・サービスと統合するように、TopLinkを構成できます。
作業ユニット・トランザクションの分離 - 作業ユニットは、データベース・トランザクションの分離と直接の関係はありません。作業ユニットでは問合せがデータベース・トランザクション外部で実行される場合があるため、データベースはこれら外部のデータとその可視性を制御できません。ただし、デフォルトでは、TopLinkは、基礎となるデータベースに構成されたデータベース・トランザクション分離とは無関係のトランザクション分離レベルを提供します。各作業ユニット・インスタンスは、登録されているオブジェクトの独自のコピー(クローン)に対して実行されます。この場合、作業ユニットでは、オブジェクトの変更に対する問合せを1つの作業ユニット内で実行できるAPIにより、読取りコミット操作を行います。変更がデータベースにコミットされるのは、作業ユニットのコミット・メソッドがコールされる場合のみです。