この章では、EISディスクリプタを使用するために構成する必要のある様々なコンポーネントについて説明します。
この章の内容は次のとおりです。
複数のディスクリプタ・タイプに共通のディスクリプタのオプションを構成する方法の詳細は、第119章「ディスクリプタの構成」を参照してください。
表76-1は、EISディスクリプタに構成可能なデフォルトのオプションを示します。
表76-1は、EISディスクリプタに構成可能なデフォルトのオプションを示します。
表76-1 EISディスクリプタの構成可能オプション
脚注1 EISルート・ディスクリプタのみ(76.6項「EISディスクリプタのタイプ(ルートまたはコンポジット)の構成」を参照)。
詳細は、第74章「EISディスクリプタの概要」を参照してください。
TopLink Workbenchでは、EISディスクリプタに記述したクラスと、EISプロジェクトに関連付けられているいずれか1つのスキーマに含まれる単純型または複合型とが、スキーマ・コンテキストを使用して関連付けられます(5.6.4項「XMLスキーマ参照の構成方法」を参照)。これにより、そのコンテキストでのマッピングに使用できる適切な属性がTopLink Workbenchに表示されます。
EISルート・ディスクリプタのスキーマ・コンテキストを構成する必要があるのは、TopLink WorkbenchまたはOracle JDeveloper TopLinkエディタを使用する場合にかぎります(76.6項「EISディスクリプタのタイプ(ルートまたはコンポジット)の構成」を参照)。
EISディスクリプタをこのプロジェクトのスキーマに含まれる単純型または複合型に関連付けるには、次の手順を実行します。
「参照」をクリックして、このディスクリプタに関連付けるスキーマ要素を選択します。詳細は、76.2.1.1項「スキーマ・コンテキストの選択」を参照してください。
EISディスクリプタの場合、TopLinkランタイムでは、ディスクリプタに構成したマッピングに基づいてスキーマ・コンテキストが判別されるため、スキーマ・コンテキストは不要です。あらためて構成する必要はありません。
EISルート・ディスクリプタ(75.2.1.1項「EISルート・ディスクリプタ」を参照)に記述したクラスに関連付けられているデータ・ソースのデータ・タイプをTopLinkランタイムに認識させるには、ディスクリプタにデフォルトのルート要素を構成する必要があります。コンポジット・リレーションシップ・マッピングにのみ使用されるディスクリプタの場合、デフォルトのルート要素は不要です。
注意: この属性を構成するためにプロジェクトのスキーマから要素を選択するわけですが、その際、要素のデータ・タイプ(単純型または複合型)を同時に選択していることになります。 |
詳細は、16.2.12項「デフォルトのルート要素」を参照してください。
TopLink Workbenchを使用してEISプロジェクトを作成する場合は、XMLレコードを使用する必要があります。したがって、EISディスクリプタに記述したクラスのインスタンスを永続化する際にどの要素から開始するかをTopLink Workbenchが認識できるように、デフォルトのルート要素を構成しておく必要があります。
ディスクリプタのデフォルトのルート要素としてスキーマ要素を指定するには、次の手順を実行します。
「デフォルトのルート要素」オプションを使用して、このディスクリプタに対してルート要素を選択します。
「参照」をクリックして、ルート要素として指定するスキーマ要素を選択します。詳細は、76.3.1.1項「ルート要素の選択」を参照してください。
EISディスクリプタのレコード形式により、EISディスクリプタのEISマッピングでマップ先とされるEISレコード・タイプが判別されます。
TopLink Workbenchを使用してEISプロジェクトを作成する場合は、TopLinkによってすべてのEISディスクリプタにXMLレコード形式が構成されます。
Javaを使用してEISプロジェクトを作成する場合は、表76-2に示すとおり、サポートされる任意のレコード・タイプをEISディスクリプタに構成できます。
表76-2 EISレコード形式
EISDescriptorメソッド | EISレコード・タイプ |
---|---|
|
このディスクリプタが所有するすべてのEISマッピングでは、EISマップ済レコードへのマップが行われます。 |
|
このディスクリプタが所有するすべてのEISマッピングでは、EIS索引付きレコードへのマップが行われます。 |
|
このディスクリプタが所有するすべてのEISマッピングでは、EIS XMLレコードへのマップが行われます。 XMLレコード形式を使用する場合は、EISプロジェクト内の1つ以上のXMLスキーマを指定する必要があります(5.6.3項「XMLスキーマのインポート方法」を参照)。TopLinkランタイムは、1つ以上のXMLスキーマに基づいてXMLデータ変換を行います。EISプロジェクトでは、TopLink WorkbenchはデプロイXMLのスキーマを直接参照しませんが、そのかわりに、特定のスキーマと一致するように構成されたマッピングをエクスポートします。 TopLinkでサポートされるXMLネームスペースの詳細は、15.2.7項「XMLネームスペース」を参照してください。 |
詳細は、77.2.1項「EISレコード・タイプ」を参照してください。
TopLinkを使用して、基本的な永続性操作(挿入、更新、削除、オブジェクトの読取り、すべて読取り、または存在チェック)ごとに1つのインタラクションを定義できます。これにより、EISマップ・オブジェクトに問い合せてそれを変更する際に、TopLinkランタイムではデフォルトのEISインタラクションのかわりに適切なEISインタラクションが使用されます。
ルート・ディスクリプタとして定義したEISディスクリプタにのみ、基本的な永続性操作に対するカスタムのEISインタラクションを構成できます(76.6項「EISディスクリプタのタイプ(ルートまたはコンポジット)の構成」を参照)。
CMPプロジェクトの場合は、問合せリストはejb-jar.xml
ファイルに格納されます。問合せは、このファイル内で定義してからTopLink Workbenchに読み取ることも、「問合せ」タブで定義してからこのファイルに書き込むこともできます。詳細は、19.7.1項「TopLink Workbenchを使用したejb-jar.xmlファイルへの書込み方法」および19.7.2項「TopLink Workbenchを使用したejb-jar.xmlファイルからの読取り方法」を参照してください。
TopLink Workbenchを使用すると、インタラクションごとに1つの問合せを定義したXMLInteraction
オブジェクトを作成できます(76.5.1項「TopLink Workbenchを使用した基本的な永続性操作用のカスタムEISインタラクションの構成方法」を参照)。
Javaを使用する場合は、任意のタイプのEISインタラクションを作成できます。一部のEISプロジェクトでは、1つの問合せで複数のインタラクションを使用する方法が一般的です。たとえば、あるインタラクションでリクエストをエンキューし、別のインタラクションでそのリクエストに対するレスポンスをデキューします。1つの問合せへの複数のインタラクションの設定はTopLink Workbenchではサポートされないため、Javaで修正メソッドを使用してインタラクションを作成し構成する必要があります(76.5.2項「Javaを使用した基本的な永続性操作用のカスタムEISインタラクションの構成方法」を参照)。
注意: 1対1および1対多のEISマッピングでは、ターゲット・オブジェクトの取得に使用される選択インタラクションを指定しておくことも必要です。ターゲット・オブジェクトの読取りインタラクション(デフォルト)を使用することも、または必要に応じて別の選択インタラクションを指定することもできます。詳細は、78.4項「選択インタラクションの構成」を参照してください。 |
基本的な永続性操作用のカスタムEISインタラクションを構成するには、次の手順を実行します。
ナビゲータで、EISプロジェクトのEISルート・ディスクリプタを選択します。
エディタで「問合せ」タブをクリックします。「問合せ」タブが表示されます。
リスト(「挿入」、「更新」、「削除」、「オブジェクトの読取り」、「すべて読取り」または「存在」)から適切なインタラクション・タイプをクリックし、次の表を参照して各フィールドにデータを入力します。
フィールド | 説明 |
---|---|
インタラクションのタイプ | TopLink Workbenchを使用する場合は、「XMLインタラクション」のみを使用できます。このフィールドは変更できません。 |
ファンクション名 | このタイプのコール(「オブジェクトの読取り」または「すべて読取り」)がEISに対して起動するEISファンクションの名前。 |
入力レコード名 | 入力レコードの作成時に、JCAアダプタに渡される名前。 |
入力ルート要素名 | 入力DOMに使用されるルート要素名。 |
入力引数 | 引数レコードのインタラクション・フィールドまたはXPathノードにマップされる問合せ引数名。
たとえば、XMLレコードを使用している場合、このオプションを使用して入力引数 |
出力引数 | ディスクリプタのマッピングに使用されるレコード内の正しいノードにマップされる、結果のレコード・フィールドまたはXPathノード。
たとえば、XMLレコードを使用している場合、このオプションを使用して出力 対話でディスクリプタのマッピングと一致するXML結果が返される場合、出力引数は必要ありません。 |
入力結果のパス | EISインタラクションが、XMLレコードにネストされるインタラクション引数を予期する場合に、このオプションを使用します。
たとえば、引数を最初にルート要素 |
出力結果のパス | このオプションは、ネステッド構造内のオブジェクトにマップされたXMLデータがEISインタラクションの結果レコードに含まれる場合に使用します。
たとえば、最初に結果をルート要素 |
プロパティ | EISプラットフォームが必要とするプロパティ。たとえば、プロパティ名operation (AQPlatform.QUEUE_OPERATION から)およびプロパティ値enqueue (AQPlatform.ENQUEUE から)。 |
Javaを使用すると、TopLinkでサポートされる任意のタイプのEISインタラクションを作成できます(109.8項「EISインタラクションの使用」を参照)。
一部のEISプロジェクトでは、1つの問合せで複数のインタラクションを使用する方法が一般的です。たとえば、あるインタラクションでリクエストをエンキューし、別のインタラクションでそのリクエストに対するレスポンスをデキューするなどです。1つの問合せへの複数のインタラクションの設定はTopLink Workbenchではサポートされないため、例76-2のように、Javaで修正メソッドを使用してインタラクションを作成し構成する必要があります。
例76-2 AQプラットフォーム用のXMLインタラクションの作成
public static void addXMLInteractions(ClassDescriptor descriptor) { // find order interaction XMLInteraction request = new XMLInteraction(); request.setProperty(AQPlatform.QUEUE_OPERATION, AQPlatform.ENQUEUE); request.setProperty(AQPlatform.QUEUE, "ORDER_INBOUND_QUEUE"); request.setProperty(AQPlatform.SCHEMA, "AQUSER"); request.setInputRootElementName("READ_ORDER"); request.addArgument("@id"); XMLInteraction response = new XMLInteraction(); response.setProperty(AQPlatform.QUEUE_OPERATION, AQPlatform.DEQUEUE); response.setProperty(AQPlatform.QUEUE, "ORDER_OUTBOUND_QUEUE"); response.setProperty(AQPlatform.SCHEMA, "AQUSER"); ReadObjectQuery query = new ReadObjectQuery(); query.addCall(request); query.addCall(response); descriptor.getQueryManager().setReadObjectQuery(query); // place order interaction XMLInteraction insert = new XMLInteraction(); insert.setProperty(AQPlatform.QUEUE_OPERATION, AQPlatform.ENQUEUE); insert.setProperty(AQPlatform.QUEUE, "ORDER_INBOUND_QUEUE"); insert.setProperty(AQPlatform.SCHEMA, "AQUSER"); insert.setInputRootElementName("INSERT_ORDER"); descriptor.getQueryManager().setInsertCall(insert); }
EISディスクリプタは、ルート(75.2.2.1項「EISルート・ディスクリプタ」を参照)またはコンポジット(75.2.2.2項「EISコンポジット・ディスクリプタ」を参照)として定義できます。
EISディスクリプタをルートとして設定する場合は、EISディスクリプタの参照クラスが親クラスであること、つまり、その参照クラスが他のクラスからコンポジット・オブジェクト・マッピングまたはコンポジット・コレクション・マッピングを使用して参照されることがないことを、TopLinkランタイムに通知します。EISルート・ディスクリプタを使用すると、サポートされるすべてのマッピングを構成でき、そのディスクリプタを、EISインタラクションを使用して構成できます(109.8項「EISインタラクションの使用」を参照)。ただし、コンポジット・オブジェクト・マッピングまたはコンポジット・コレクション・マッピングを使用してEISルート・ディスクリプタを構成する場合は、定義する参照ディスクリプタはEISコンポジット・ディスクリプタである必要があります。これ以外のEISルート・ディスクリプタにすることはできません。
EISディスクリプタをコンポジット(デフォルト)として設定する場合は、EISディスクリプタの参照クラスがコンポジット・オブジェクト・マッピングまたはコンポジット・コレクション・マッピングによって参照されることを、TopLinkランタイムに通知します(第81章「EISコンポジット・オブジェクト・マッピングの構成」および第82章「EISコンポジット・コレクション・マッピングの構成」を参照)。EISコンポジット・ディスクリプタを使用すると、サポートされるすべてのマッピングを構成できますが、EISインタラクションを使用して構成することはできません。
コンポジットとして定義されたディスクリプタ(119.20項「子(ブランチまたはリーフ)クラス・ディスクリプタに関する継承の構成」を参照)で継承を構成できますが、その場合は継承ツリー内のすべてのディスクリプタがコンポジットである必要があります。集約ディスクリプタとクラス・ディスクリプタは、同じ継承ツリーに置くことはできません。詳細は、16.3.4項「集約およびコンポジット・ディスクリプタと継承」を参照してください。
また、TopLink Workbenchを使用してコンポジットとして構成したディスクリプタには、EJB情報を構成できません(119.18項「EJB CMPおよびBMP情報によるディスクリプタの構成」を参照)。
詳細は、次を参照してください。
EISディスクリプタをルートまたはコンポジットとして構成するには、次の手順を実行します。
ナビゲータで、EISコンポジット・ディスクリプタを選択します。
マッピング・ツールバーの「ルート」または「コンポジット」ディスクリプタ・ボタンをクリックします。
または、ディスクリプタを選択してメニューから「選択」→「ディスクリプタ・タイプ」→「ルート」または「コンポジット」を選択するか、ナビゲータでディスクリプタを右クリックしてコンテキスト・メニューから「ディスクリプタ・タイプ」→「ルート」または「コンポジット」と選択することもできます。
JavaでEISディスクリプタをルートまたはコンポジットとして構成するには、ディスクリプタ修正メソッドを作成して(119.35項「修正メソッドの構成」を参照)、次のEISDescriptor
メソッドを使用します。
EISディスクリプタをルート・ディスクリプタとして設定するには、EISDescriptor
メソッドdescriptorIsNormal
を使用します。
EISディスクリプタをコンポジット(非ルート)・ディスクリプタとして設定するには、EISDescriptor
メソッドdescriptorIsAggregate
を使用します。