この章の内容は次のとおりです。
異なるドメイン間で情報を送信する場合に、各ドメインで同じエンティティを表すのに異なる用語や処理コードを使用している場合があります。たとえば、あるドメインではメッセージ内で完全な都市名(Boston
)を使用し、別のドメインでは都市を示すコード(BO
)を使用している可能性があります。各ドメインでこれらのデータをいずれかの用語セットに標準化しなくても、ドメイン値マップを使用して、あるドメインで使用されている用語と他のドメインで使用されている用語をマップできます。ドメイン値マップは、実行時にアプリケーションを介して送信されるメッセージ内の実際の値に対して機能します。
通常、各ドメイン値マップでは、1つのフィールドまたはカテゴリのみのマッピングを定義しますが、1つのSOAコンポジットで複数のカテゴリのマッピングが必要になる場合もあります。そのため、1つのSOAコンポジットに複数のドメイン値マップを含めることもできます。たとえば、都市名のマッピングを定義したドメイン値マップと、州名のマッピングを定義したドメイン値マップと、国名のマッピングを定義したドメイン値マップを使用できます。
2つ以上のドメインの間で直接値をマップする方法は、ポイントツーポイント・マッピングと呼ばれます。表44-1 に、2つのドメインの間で都市名をポイントツーポイント・マッピングする方法を示します。
表44-1 ポイントツーポイント・マッピング
CityCode | CityName |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
ドメイン値マップの値は静的です。ドメイン値マップの値は、設計時にOracle JDeveloperを使用して指定し、実行時にアプリケーションによってドメイン値マップの値のルックアップが実行されます。Oracle SOAコンポーザを使用して実行時のドメイン値マップを編集する方法の詳細は、「ドメイン値マップでのOracle SOAコンポーザの使用」を参照してください。
注意:
アプリケーション間の各値を動的に統合するために、Oracle SOA Suiteの相互参照機能を使用できます。相互参照の詳細は、「相互参照の使用」を参照してください。
Oracle SOA Suiteのドメイン値マップでは、実行時に実行されるドメイン値マップのルックアップのパフォーマンスおよび結果をより詳細に調整できます。たとえば、修飾情報を指定して、マッピングを補助する追加情報を提供します。また、ドメイン値マップでは、1対多マッピングもサポートされています。
修飾子ドメインには、マッピングを明確にするためだけの情報が含まれます。この追加情報が定義されていないと、マッピングが不明確である場合があります。たとえば、Kensington
という都市はCanada
とUSA
の両方にあるため、都市名のマッピングを定義したドメイン値マップにKN
とKensington
のマッピングが複数存在する可能性があります。そのため、このマッピングには、どちらのマッピングを使用するかを示す修飾子(USA
またはCanada
)が必要です。この例を表44-2 に示します。
表44-2 修飾子サポートの例
Country (修飾子) | CityCode | CityName |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ドメイン値マップには、複数の修飾子ドメインを含めることができます。たとえば、表44-3 では、さらに州名でマッピングを修飾しています。
表44-3 複数の修飾子サポートの例
Country (修飾子) | State (修飾子) | CityCode | CityName |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
修飾子は、マッピングを修飾するときにのみ使用します。そのため、修飾子の値はルックアップできません。
複数の修飾子ドメインが存在する場合は、修飾子の順序を指定して、実行時のルックアップ時にそれらの修飾子ドメインがどのように使用されるかを指定できます。修飾子の順序は、より正確な一致を定義する際に、その修飾子の役割によって上位から下位に変化します。表44-3 の場合は、Stateの一致がより正確な一致を示すため、State修飾子をCountry修飾子より上位の順序に指定することが考えられます。
ドメイン値マップは階層ルックアップをサポートします。ルックアップ時に修飾子の値を指定し、正確な一致が検出されなかった場合は、ルックアップ・メカニズムによって上位順序の修飾子が空の引用符(""
)に設定され、より一般的な一致の検出が試行されます。これは、一致が検出されるか、可能なかぎりのルックアップが終了して一致が検出されなくなるまで実行されます。図44-1 に、(表44-3 の値に基づいた)次のルックアップで階層ルックアップが実行される手順を示します。
State=Arkansas, Country=Canada, CityCode=KN_USA
この例では、State
修飾子の順序は1
で、Country
修飾子の順序は2
です。図44-1 に示すように、ルックアップ・メカニズムでは上位順序の修飾子State
に正確なルックアップ値Arkansas
を設定し、下位順序の修飾子Country
にCanada|""
を使用します。
一致が検出されない場合、ルックアップ・メカニズムでは上位順序の修飾子State
に値""
を設定し、次に上位である修飾子Country
に正確な値Canada
を設定します。一致が検出されない場合、ルックアップ・メカニズムでは以前に上位順序の修飾子であったCountry
に値""
を設定します。CityCode
がKN_USA
である一致行が1行検出された場合は、値としてKensington
が返されます。
表44-4 に、これらの手順の要約を示します。
表44-4 ドメイン値マップ・ルックアップ結果
状態 | 国 | 短い値 | ルックアップ結果 |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
ドメイン値マップでは、1つの値を複数の値にマップできます。たとえば、支払い条件のドメイン値マップには、表44-5 に示すように、支払い条件と、値引率、値引期間、正味掛売り期間などの複数の値とのマッピングを格納できます。
表44-5 1対多マッピング・サポート
支払条件 | 値引率 | 値引期間 | 正味掛売り期間 |
---|---|---|---|
GoldCustomerPaymentTerm |
|
|
|
SilverCustomerPaymentTerm |
|
|
|
RegularPaymentTerm |
|
|
|
Oracle JDeveloperのSOAコンポジット・アプリケーションで1つ以上のドメイン値マップを作成し、実行時に、そのマップを使用してマップされている値をルックアップできます。ドメイン値マップを作成すると、.dvm
の拡張子が付いたファイルがアプリケーション・ファイル構造に作成されます。
ドメイン値マップは、Oracle JDeveloperの「ドメイン値マップ(DVM)・ファイルの作成」ダイアログを使用して作成および構成します。このダイアログでは、それぞれ1つの値を持つ2つのドメインを定義します。完了すると、ドメイン値マップ・エディタが表示され、追加のドメインおよび対応する値を定義できます。
ドメイン値マップを作成する手順は、次のとおりです。
図44-3 に示すように、拡張子が.dvm
のファイルがプロジェクト・ファイル構造に作成され、「アプリケーション」ウィンドウに表示されます。
すべての.dvm
ファイルは、次の例に示すスキーマ定義(XSD)ファイルに基づいています。
<?xml version="1.0" encoding="UTF-8" ?> <!-- Copyright (c) 2006, Oracle. All rights reserved. --> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xmlns.oracle.com/dvm" xmlns:tns="http://xmlns.oracle.com/dvm" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xsd:element name="dvm"> <xsd:annotation> <xsd:documentation>The Top Level Element </xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:sequence> <xsd:element name="description" minOccurs="0" type="xsd:string"> <xsd:annotation> <xsd:documentation>The DVM Description. This is optional </xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="columns"> <xsd:annotation> <xsd:documentation>This element holds DVM's column List. </xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:sequence> <xsd:element name="column" minOccurs="2" maxOccurs="unbounded"> <xsd:annotation> <xsd:documentation>This represents a DVM Column </xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:attribute name="name" use="required" type="xsd:string"/> <xsd:attribute name="qualifier" default="false" type="xsd:boolean" use="optional"/> <xsd:attribute name="order" use="optional" type="xsd:positiveInteger"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="rows" minOccurs="0"> <xsd:annotation> <xsd:documentation>This represents all the DVM Rows. </xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:sequence> <xsd:element name="row" minOccurs="1" maxOccurs="unbounded"> <xsd:annotation> <xsd:documentation> Each DVM row of values </xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:sequence> <xsd:element name="cell" minOccurs="2" maxOccurs="unbounded" type="xsd:string"> <xsd:annotation> <xsd:documentation>This is the value for this row and for each column in the same order as defined in Columns. </xsd:documentation> </xsd:annotation> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="name" use="required" type="xsd:string"/> </xsd:complexType> </xsd:element> <xsd:annotation> <xsd:documentation>This Schema is used to validate the DVM Document got for creation and update of a DVM. </xsd:documentation> </xsd:annotation> </xsd:schema>
ドメイン値マップのフレームワークを作成した後は、ドメイン値マップ・エディタを使用して、ドメインとそれに対応するドメイン値をマップに追加できます。
マップへの追加ドメインを定義でき、それらはドメイン値マップに列として表されます。また、それぞれの新規ドメインに含まれる値を実行時のルックアップに含めるのか、それともマッピングを修飾するためだけに使用するのかを指定できます。ドメイン(列)名は、タイプNCName (コロンなしの名前)である必要があります。それは、コロンが付いていない有効なXML要素名です。
ドメイン値マップにドメインを追加するには:
ドメイン値はドメイン値マップの行に表示され、それぞれのドメインの各行に含まれる値がマップされます。ドメイン間のマッピングを完全に定義するために必要な数のドメイン値を追加できます。
ドメイン値マップにドメイン値を追加するには:
ドメイン値マップを作成した後は、実行時にドメイン値マップのXPath関数を使用して適切な値をルックアップし、アプリケーションにターゲットを移入できます。
dvm:lookupValue
およびdvm:lookupValue1M
のXPath関数は、実行時に単一の値または複数の値についてドメイン値マップをルックアップします。
dvm:lookupValue
関数では、ソース列に指定のソース値を含むドメイン値マップでターゲット列の値をルックアップすることにより、文字列が返されます。
次のコードは、dvm:lookupValue
関数の構文の例を示しています。
dvm:lookupValue(dvmMetadataURI as string, SourceColumnName as string, SourceValue as string, TargetColumnName as string, DefaultValue as string) as string
次のコードは、dvm:lookupValue
関数の使用方法の例を示しています。
dvm:lookupValue('cityMap.dvm','CityCodes','BO', 'CityNames', 'CouldNotBeFound')
次のコードは、dvm:lookupValue
関数の構文の別の例を示しています。
dvm:lookupValue(dvmMetadataURI as string, SourceColumnName as string, SourceValue as string, TargetColumnName as string, DefaultValue as string, (QualifierSourceColumn as string, QualifierSourceValue as string)*) as string
次のコードは、dvm:lookupValue
関数の使用方法の別の例を示しています。
dvm:lookupValue ('cityMap.dvm','CityCodes','BO','CityNames', 'CouldNotBeFound', 'State', 'Massachusetts')
引数
dvmMetadataURI
- ドメイン値マップのURI。
SourceColumnName
- ソース列名。
SourceValue
- ソース値(XSLTトランスフォーメーションのソース文書にバインドされるXPath式)。
targetColumnName
- ターゲット列名。
DefaultValue
- 値が見つからない場合は、デフォルト値が返されます。
QualifierSourceColumn
: 修飾子列の名前。
QualifierSourceValue
: 修飾子の値。
dvm:lookupValue1M
関数では、ソース列の値がソース値と等しいドメイン値マップの複数のターゲット列の値を格納する、XML文書フラグメントが返されます。次の例に詳細を示します。
dvm:lookupValue1M(dvmMetadataURI as string, SourceColumnName as string, SourceValue as string,(TargetColumnName as string)?)as nodeset
引数
dvmMetadataURI
- ドメイン値マップのURI。
SourceColumnName
- ソース列名。
SourceValue
- ソース値(XSLTトランスフォーメーションのソース文書にバインドされるXPath式)。
TargetColumnName
- ターゲット列名。1つ以上の列名を指定する必要があります。疑問符記号(?
)は複数のターゲット列名を指定できることを示します。
次の例は、dvm:lookupValue1M
関数の使用方法の例を示しています。
dvm:lookupValue1M ('cityMap.dvm','CityCode','BO','CityName', 'CityNickName')
次の例に、結果を示します。
<CityName>Boston</CityName> <CityNickName>BeanTown</CityNickName>
ドメイン値マップ関数は、BPELプロセス・サービス・コンポーネントまたはメディエータ・サービス・コンポーネントによるトランスフォーメーションに使用できます。トランスフォーメーションの実行には、XSLファイルを作成してXMLスキーマ間でデータを変換するときに表示されるXSLTマッパーを使用します。
XSLTマッパーの詳細は、「XSLTマップ・エディタを使用したトランスフォーメーションの作成」を参照してください。
トランスフォーメーションでlookupValue1M関数を使用する手順は、次のとおりです。
「アプリケーション」ウィンドウで、「XSLファイル」をダブルクリックして、XSLTマッパーを開きます。
XSLTマッパーで、「ソース」および「ターゲット」ペインのツリーを開きます。
「コンポーネント」ウィンドウで下矢印をクリックして、「詳細」を選択します。
図44-7 に示すように、「DVM関数」を選択します。
ソースとターゲットの接続線にlookupValue1Mをドラッグ・アンド・ドロップします。
接続線上に「dvm:lookupValue1M」アイコンが表示されます。
「lookupValue1M」アイコンをダブルクリックします。
図44-8 に示すように、「関数の編集 - lookupValue1M」ダイアログが表示されます。
「関数の編集 – lookupValue1M」ダイアログの次のフィールドに値を指定します。
「dvmLocation」フィールドで、ドメイン値マップ・ファイルのロケーションURIを入力するか、「dvmLocation」フィールドの右側にある「参照」をクリックして、ドメイン値マップ・ファイルを選択します。MDS(メタデータ・サービス)およびMDSの共有ロケーションからもすでにデプロイされたドメイン値マップを選択できます。これを実行するには、「リソース・パレット」を選択します。
「sourceColumnName」フィールドに、ソース要素の値に関連付けられているドメイン値マップの列名を入力するか、「参照」をクリックして、以前に選択したドメイン値マップに定義されている列から列名を選択します。
「sourceValue」フィールドでは、値を入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを使用できます。上矢印キーおよび下矢印キーを押して、リスト内のオブジェクトを配置し、[Enter]キーを押してその項目を選択します。
「targetColumnName」フィールドに、ターゲット要素の値に関連付けられているドメイン値マップの列名を入力するか、「参照」をクリックして、以前に選択したドメイン値マップに定義されている列から列名を選択します。
「追加」をクリックして別の列をターゲット列として追加し、列の名前を入力します。
図44-9 に、移入後の「関数の編集 - lookupValue1M」ダイアログを示します。
「OK」をクリックします。
XSLTマッパーが、「lookupValue1M」関数アイコンとともに表示されます。
「ファイル」メニューで、「すべて保存」を選択します。
デプロイ済のドメイン値マップを選択する方法の詳細は、「での複数のSOAコンポジット・アプリケーション間の共有データのデプロイ方法および使用方法」を参照してください。
「式ビルダー」ダイアログでは、ドメイン値マップ関数を使用してXpath式を作成できます。「式ビルダー」ダイアログには、Oracle Mediatorサービス・コンポーネントのフィルタ式または値の割当て機能からアクセスできます。
値の割当て機能の詳細は、「値の割当て方法」を参照してください。
「式ビルダー」ダイアログでlookupValue関数を使用する手順は、次のとおりです。
この項では、SOAコンポジットでドメイン値マップを使用する場合のチュートリアルを紹介します。このユースケースは、ドメイン値マップの階層ルックアップ機能を示します。階層ルックアップのユースケースは次の手順で構成されます。
この項で説明するサンプル・ファイルをダウンロードするには、Oracle SOA Suiteサンプル・ページ
を参照してください。
この項では、SOAコンポジット・アプリケーションを作成、構築およびデプロイするための設計時タスクを説明します。これらのタスクは、表示されている順番で実行する必要があります。
Oracle JDeveloperのアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。
ユースケース用のアプリケーションおよびプロジェクトを作成した後は、ドメイン値マップを作成します。
ドメイン値マップを作成する手順は、次のとおりです。
ドメイン値マップを作成した後は、ディレクトリからXMLファイルを読み取るReadOrdersという名前のファイル・アダプタ・サービスを作成します。
注意:
Oracle Mediatorは、Oracle Real Application Clusters (Oracle RAC)の計画的停止に対して実行する際、同じファイルを2回処理する可能性があります。これは、ファイル・アダプタがXAに準拠していないアダプタであるためです。したがって、グローバル・トランザクションに組み入れると、各ファイルを1回のみ処理するXAインタフェース仕様に逸脱する可能性があります。
ファイル・アダプタ・サービスを作成する手順は、次のとおりです。
メッセージが経由するReadOrdersアダプタ・サービスから外部参照へのパスを指定する必要があります。
ルーティング・ルールを指定する手順は、次のとおりです。
SOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続が必要です。アプリケーション・サーバー接続の作成方法の詳細は、「アプリケーション・サーバー接続の作成」を参照してください。
次の手順で、HierarchicalValueコンポジット・アプリケーションをアプリケーション・サーバーにデプロイします。
アプリケーション・デプロイメント・プロファイルの作成
アプリケーション・サーバーへのアプリケーションのデプロイ
これらの手順の詳細は、「単一のSOAコンポジットのデプロイ方法」を参照してください。
デプロイしたHierarchicalValueアプリケーションは、入力XMLファイルであるsampleorder.xml
を入力フォルダにコピーすることで実行できます。このファイルはsamples
フォルダにあります。正常終了した場合、common_order_1.xml
という名前のファイルが、指定された出力ディレクトリに作成されます。
実行中のインスタンスの監視には、次のURLにあるOracle Enterprise Manager Fusion Middleware Controlを使用できます。
http://hostname:port/em
ここで、hostname
は、Oracle SOA Suiteインフラストラクチャをインストールしたホストです。
これらの手順の詳細は、「単一のSOAコンポジットのデプロイ方法」を参照してください。
この項では、ルックアップ用の複数の値を持つドメイン値マップを作成する方法のチュートリアルを紹介します。このユースケースは、複数の値をルックアップするために、2つのエンドポイント間でドメイン値マップ・ルックアップを使用する統合シナリオを示します。たとえば、インバウンド値が州の場合、アウトバウンド値は州の略称、言語および首都になります。複数の値ルックアップのユースケースは次の手順で構成されます。
readFileという名前のアダプタ・サービスにより、ファイルがディレクトリから取得されます。
readFileアダプタ・サービスがファイル・データをLookupMultiplevaluesMediatorというOracle Mediatorに送信します。
次にLookupMultiplevaluesMediator Oracle Mediatorはメッセージをアダプタ参照で必要となる構造に変換します。トランスフォーメーション中、Oracle MediatorはLongnameおよびShortnameドメインの等価値に対するmultivalueドメイン値マップをルックアップします。
LookupMultiplevaluesMediator Oracle Mediatorは、writeFileという外部参照にメッセージを送信します。
writeFile参照は、指定された出力ディレクトリにメッセージを書き込みます。
この項で説明するサンプル・ファイルをダウンロードするには、Oracle SOA Suiteサンプル・ページ
を参照してください。
この項では、SOAコンポジット・アプリケーションを作成、構築およびデプロイするための設計時タスクを説明します。これらのタスクは、表示されている順番で実行します。
Oracle JDeveloperのアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。
ユースケース用のアプリケーションおよびプロジェクトを作成した後は、ドメイン値マップを作成します。
ドメイン値マップを作成する手順は、次のとおりです。
ドメイン値マップを作成した後は、ディレクトリからXMLファイルを読み取るreadFileという名前のファイル・アダプタ・サービスを作成します。
注意:
メディエータは、Oracle RACの計画的停止に対して実行する際、同じファイルを2回処理する可能性があります。これは、ファイル・アダプタがXAに準拠していないアダプタであるためです。したがって、グローバル・トランザクションに組み入れると、各ファイルを1回のみ処理するXAインタフェース仕様に逸脱する可能性があります。
ファイル・アダプタ・サービスを作成する手順は、次のとおりです。
LookupMultiplevaluesMediatorメディエータを作成する手順は、次のとおりです。
メッセージが経由するreadFileアダプタ・サービスから外部参照へのパスを指定する必要があります。
ルーティング・ルールを指定する手順は、次のとおりです。
SOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続が必要です。アプリケーション・サーバー接続の作成方法の詳細は、「アプリケーション・サーバー接続の作成」を参照してください。
次の手順で、Multivalueコンポジット・アプリケーションをアプリケーション・サーバーにデプロイします。
アプリケーション・デプロイメント・プロファイルの作成
アプリケーション・サーバーへのアプリケーションのデプロイ
これらの手順の詳細は、「単一のSOAコンポジットのデプロイ方法」を参照してください。
デプロイしたMultivalueアプリケーションは、入力XMLファイルであるsampleinput.xml
を入力フォルダにコピーすることで実行できます。このファイルはsamples
フォルダにあります。正常終了した場合、multivalue_1.xml
という名前のファイルが、指定された出力ディレクトリに作成されます。
実行中のインスタンスの監視には、次のURLにあるOracle Enterprise Manager Fusion Middleware Controlを使用できます。
http://hostname:port/em
ここで、hostname
は、Oracle SOA Suiteインフラストラクチャをインストールしたホストです。
Oracle Enterprise Manager Fusion Middleware ControlでMultivalueをクリックすると、プロジェクト・ダッシュボードが表示されます。
詳細な実行証跡を表示するには、インスタンス列のインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
DVMを初めて呼び出して使用するときに、DVMはMDSからキャッシュにロードされます。以後、DVMはキャッシュから取り出されるので、ルックアップが高速になります。
DVMに多数のレコードが含まれている場合は、サーバーの起動時にDVMをキャッシュにあらかじめロードしておけば、初回使用時にもDVMがすぐに使用可能になります。
サーバー起動時のDVMキャッシュの事前ロードを選択するには、Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザ内で、MBeanプロパティLoadDVMsAtStartupを使用します。LoadDVMsAtStartupをtrueに設定すると、サーバーの起動時にすべてのDVMがキャッシュにロードされます。LoadDVMsAtStartupのデフォルト値はfalseです。
サーバーの起動時にDVMキャッシュの事前ロードを行う手順は、次のとおりです。
「true」
を選択します。