この章では、異なるドメインで同じエンティティを表すために使用される用語をマップする、ドメイン値マップを作成および使用して、あるドメインの特定のフィールドで使用される値を、他のドメインの同じフィールドで使用される値にマップする方法について説明します。この章では、ドメイン値の参照に使用されるXPath関数についても説明します。
この章では、次の項目について説明します。
異なるドメイン間で情報を送信する場合に、各ドメインで同じエンティティを表すのに異なる用語や処理コードを使用している場合があります。たとえば、あるドメインではメッセージ内で完全な都市名(Boston
)を使用し、別のドメインでは都市を示すコード(BO
)を使用している可能性があります。各ドメインでこれらのデータをいずれかの用語セットに標準化しなくても、ドメイン値マップを使用して、あるドメインで使用されている用語と他のドメインで使用されている用語をマップできます。ドメイン値マップは、実行時にアプリケーションを介して送信されるメッセージ内の実際の値に対して機能します。
通常、各ドメイン値マップでは、1つのフィールドまたはカテゴリのみのマッピングを定義しますが、1つのSOAコンポジットで複数のカテゴリのマッピングが必要になる場合もあります。そのため、1つのSOAコンポジットに複数のドメイン値マップを含めることもできます。たとえば、都市名のマッピングを定義したドメイン値マップと、州名のマッピングを定義したドメイン値マップと、国名のマッピングを定義したドメイン値マップを使用できます。
2つ以上のドメインの間で直接値をマップする方法は、ポイントツーポイント・マッピングと呼ばれます。表47-1に、2つのドメインの間で都市名をポイントツーポイント・マッピングする方法を示します。
表47-1 ポイントツーポイント・マッピング
CityCode | CityName |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
ドメイン値マップの値は静的です。ドメイン値マップの値は、設計時にOracle JDeveloperを使用して指定し、実行時にアプリケーションによってドメイン値マップの値のルックアップが実行されます。Oracle SOAコンポーザを使用して実行時のドメイン値マップを編集する方法の詳細は、第48章「ドメイン値マップでのOracle SOAコンポーザの使用」を参照してください。
Oracle SOA Suiteのドメイン値マップでは、実行時に実行されるドメイン値マップのルックアップのパフォーマンスおよび結果をより詳細に調整できます。たとえば、修飾情報を指定して、マッピングを補助する追加情報を提供します。また、ドメイン値マップでは、1対多マッピングもサポートされています。
修飾子ドメインには、マッピングを明確にするためだけの情報が含まれます。この追加情報が定義されていないと、マッピングが不明確である場合があります。たとえば、Kensington
という都市はCanada
とUSA
の両方にあるため、都市名のマッピングを定義したドメイン値マップにKN
とKensington
のマッピングが複数存在する可能性があります。そのため、このマッピングには、どちらのマッピングを使用するかを示す修飾子(USA
またはCanada
)が必要です。この例を表47-2に示します。
表47-2 修飾子サポートの例
Country(修飾子) | CityCode | CityName |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ドメイン値マップには、複数の修飾子ドメインを含めることができます。たとえば、表47-3では、さらに州名でマッピングを修飾しています。
表47-3 複数の修飾子サポートの例
Country(修飾子) | State(修飾子) | CityCode | CityName |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
修飾子は、マッピングを修飾するときにのみ使用します。そのため、修飾子の値はルックアップできません。
複数の修飾子ドメインが存在する場合は、修飾子の順序を指定して、実行時のルックアップ時にそれらの修飾子ドメインがどのように使用されるかを指定できます。修飾子の順序は、より正確な一致を定義する際に、その修飾子の役割によって上位から下位に変化します。表47-3の場合は、Stateの一致がより正確な一致を示すため、State修飾子をCountry修飾子より上位の順序に指定することが考えられます。
ドメイン値マップは階層ルックアップをサポートします。ルックアップ時に修飾子の値を指定し、正確な一致が検出されなかった場合は、ルックアップ・メカニズムによって上位順序の修飾子が空の引用符(""
)に設定され、より一般的な一致の検出が試行されます。これは、一致が検出されるか、可能なかぎりのルックアップが終了して一致が検出されなくなるまで実行されます。図47-1に、(表47-3の値に基づいた)次のルックアップで階層ルックアップが実行される手順を示します。
State=Arkansas, Country=Canada, CityCode=KN_USA
この例では、State
修飾子の順序は1
で、Country
修飾子の順序は2
です。図47-1に示すように、ルックアップ・メカニズムでは上位順序の修飾子State
に正確なルックアップ値Arkansas
を設定し、下位順序の修飾子Country
にCanada|""
を使用します。
一致が検出されない場合、ルックアップ・メカニズムでは上位順序の修飾子State
に値""
を設定し、次に上位である修飾子Country
に正確な値Canada
を設定します。一致が検出されない場合、ルックアップ・メカニズムでは以前に上位順序の修飾子であったCountry
に値""
を設定します。CityCode
がKN_USA
である一致行が1行検出された場合は、値としてKensington
が返されます。
表47-4に、これらの手順のサマリーを示します。
ドメイン値マップでは、1つの値を複数の値にマップできます。たとえば、支払い条件のドメイン値マップには、表47-5に示すように、支払い条件と、値引率、値引期間、正味掛売り期間などの複数の値とのマッピングを格納できます。
Oracle JDeveloperのSOAコンポジット・アプリケーションで1つ以上のドメイン値マップを作成し、実行時に、そのマップを使用してマップされている値をルックアップできます。ドメイン値マップを作成すると、.dvm
の拡張子が付いたファイルがアプリケーション・ファイル構造に作成されます。
ドメイン値マップは、Oracle JDeveloperの「ドメイン値マップ(DVM)・ファイルの作成」ダイアログを使用して作成および構成します。このダイアログでは、2つのドメインを定義し、それぞれに1つの値を定義します。完了すると、ドメイン値マップ・エディタが表示され、追加のドメインとそれに対応する値を定義することもできます。
ドメイン値マップを作成する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、ドメイン値マップを作成するプロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。
「SOA層」ノードを開き、「トランスフォーメーション」カテゴリを選択します。
「項目」リストで、「ドメイン値マップ(DVM)」を選択し、「OK」をクリックします。
「ドメイン値マップ(DVM)・ファイルの作成」ダイアログが表示されます。
「ファイル名」フィールドに、ドメイン値マップ・ファイルのわかりやすい一意の名前を入力します。ファイル名には、.dvmの拡張子が含まれている必要があります。
「説明」フィールドに、ドメイン値マップの説明を入力します。このフィールドはオプションです。
「ドメイン名」フィールドに、各ドメインの名前を入力します。これらの名前はドメイン値マップの列名で、それぞれのドメインにおけるフィールドを表します。
注意: ドメイン名は、タイプNCName (コロンなしの名前)である必要があります。それは、コロンが付いていない有効なXML要素名です。各ドメイン名はドメイン値マップ内では一意の名前にする必要があります。ドメインは、後でさらに追加できます。 |
「ドメイン値」フィールドに、各ドメインの対応する値を入力します。たとえば、図47-2
に示すように、CityCode
ドメインにBO
を、CityName
ドメインにBostonを入力します。
「OK」をクリックします。
ドメイン値マップ・エディタが表示され、新しいドメイン値マップが表示されます。
図47-3
に示すように、拡張子が.dvmのファイルがプロジェクト・ファイル構造に作成され、「アプリケーション・ナビゲータ」に表示されます。
すべての.dvm
ファイルは、例47-1に示すスキーマ定義(XSD)ファイルに基づいています。
例47-1 ドメイン値マップ・ファイルの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要素名です。
ドメイン値マップにドメインを追加する手順は、次のとおりです。
ドメイン値マップ・エディタでマップ・ファイルを開いていない場合は、「アプリケーション・ナビゲータ」のDVMファイルをダブルクリックします。
「マップ表」で「追加」をクリックし、「ドメインの追加」を選択します。
「ドメインの作成」ダイアログが表示されます。
「名前」フィールドに、列の名前を入力します。
「修飾子」フィールドで、この列を修飾子として設定する場合は「True」を選択します。そうでない場合は「False」を選択します。
「修飾子順」フィールドに、修飾子ドメインの優先度を示す数値を入力します。
このフィールドが有効になるのは、「修飾子」フィールドで「True」を選択した場合のみです。
「OK」をクリックします。
「マップ表」に新しい列が表示されます。
ドメイン値マップにドメインを追加した後は、名前を変更したり、修飾子ドメインであるかどうかや修飾子の順序を変更できます。
ドメインを編集する手順は、次のとおりです。
ドメイン値マップ・エディタで、変更するドメインの名前を選択します。
「ドメイン/値の編集」をクリックします。
「ドメインの編集」ダイアログが表示されます。
ダイアログで任意のフィールドを変更し、「OK」をクリックします。
注意: ドメイン名は、タイプNCName (コロンなしの名前)である必要があります。それは、コロンが付いていない有効なXML要素名です。 |
ドメイン値はドメイン値マップの行に表示され、それぞれのドメインの各行に含まれる値がマップされます。ドメイン値は、ドメイン間のマッピングを完全に定義するために必要なだけ追加できます。
ドメイン値マップにドメイン値を追加する手順は、次のとおりです。
ドメイン値マップ・エディタで、「追加」をクリックし、「ドメイン値の追加」を選択します。
「マップ表」の既存の行の下に新しい行が表示されます。
新しい行に各ドメインの値を入力します。
さらに行を作成するには、前述の手順を繰り返します。変更が終了したら、Oracle JDeveloperツールバーの「すべて保存」をクリックします。
ドメイン値マップを作成した後は、実行時にドメイン値マップのXPath関数を使用して適切な値をルックアップし、アプリケーションにターゲットを移入できます。
dvm:lookupValue
およびdvm:lookupValue1M
のXPath関数は、実行時に単一の値または複数の値についてドメイン値マップをルックアップします。
dvm:lookupValue
関数では、ソース列に指定のソース値を含むドメイン値マップでターゲット列の値をルックアップすることにより、文字列が返されます。
例47-2に、dvm:lookupValue
関数の構文の例を示します。
例47-2 dvm:lookupValue関数の構文
dvm:lookupValue(dvmMetadataURI as string, SourceColumnName as string, SourceValue as string, TargetColumnName as string, DefaultValue as string) as string
例47-3に、dvm:lookupValue
関数の使用方法の例を示します。
例47-4に、dvm:lookupValue
関数の構文の別の例を示します。
例47-4 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
例47-5に、dvm:lookupValue
関数の使用方法の別の例を示します。
引数
dvmMetadataURI
- ドメイン値マップのURI。
SourceColumnName
- ソース列名。
SourceValue
- ソース値(XSLTトランスフォーメーションのソース文書にバインドされるXPath式)。
targetColumnName
- ターゲット列名。
DefaultValue
- 値が見つからない場合は、デフォルト値が返されます。
QualifierSourceColumn
: 修飾子列の名前。
QualifierSourceValue
: 修飾子の値。
dvm:lookupValue1M
関数では、ソース列の値がソース値と等しいドメイン値マップの複数のターゲット列の値を格納する、XML文書フラグメントが返されます。例47-6に詳細を示します。
例47-6 dvm:lookupValue1M関数の構文
dvm:lookupValue1M(dvmMetadataURI as string, SourceColumnName as string, SourceValue as string,(TargetColumnName as string)?)as nodeset
引数
dvmMetadataURI
- ドメイン値マップのURI。
SourceColumnName
- ソース列名。
SourceValue
- ソース値(XSLTトランスフォーメーションのソース文書にバインドされるXPath式)。
TargetColumnName
- ターゲット列名。1つ以上の列名を指定する必要があります。疑問符記号(?
)は複数のターゲット列名を指定できることを示します。
例47-7に、dvm:lookupValue1M
関数の使用方法の例を示します。
例47-7 dvm:lookupValue1M関数の使用方法
dvm:lookupValue1M ('cityMap.dvm','CityCode','BO','CityName', 'CityNickName')
例47-8にその結果を示します。
ドメイン値マップ関数は、BPELプロセス・サービス・コンポーネントまたはメディエータ・サービス・コンポーネントによるトランスフォーメーションに使用できます。トランスフォーメーションの実行には、XSLファイルを作成してXMLスキーマ間でデータを変換するときに表示されるXSLTマッパーを使用します。
XSLTマッパーの詳細は、第40章「XSLTマッパーを使用したトランスフォーメーションの作成」を参照してください。
トランスフォーメーションでlookupValue1M関数を使用する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、XSLファイルをダブルクリックしてXSLTマッパーを開きます。
XSLTマッパーで、「ソース」および「ターゲット」ペインのツリーを開きます。
「コンポーネント・パレット」で、下矢印をクリックして「拡張」を選択します。
図47-7に示すように、「DVM Functions」を選択します。
ソースとターゲットの接続線にlookupValue1Mをドラッグ・アンド・ドロップします。
接続線上に「dvm:lookupValue1M」アイコンが表示されます。
「lookupValue1M」アイコンをダブルクリックします。
図47-8に示すように、「関数の編集 - lookupValue1M」ダイアログが表示されます。
「関数の編集 – lookupValue1M」ダイアログの次のフィールドに値を指定します。
「dvmLocation」フィールドで、ドメイン値マップ・ファイルのロケーションURIを入力するか、「dvmLocation」フィールドの右側にある「参照」をクリックして、ドメイン値マップ・ファイルを選択します。MDS(メタデータ・サービス)およびMDSの共有ロケーションからもすでにデプロイされたドメイン値マップを選択できます。これを実行するには、「リソース・パレット」を選択します。
「sourceColumnName」フィールドに、ソース要素の値に関連付けられているドメイン値マップの列名を入力するか、「参照」をクリックして、以前に選択したドメイン値マップに定義されている列から列名を選択します。
「sourceValue」フィールドでは、値を入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを使用できます。上矢印キーおよび下矢印キーを押して、リスト内のオブジェクトを配置し、[Enter]キーを押してその項目を選択します。
「targetColumnName」フィールドに、ターゲット要素の値に関連付けられているドメイン値マップの列名を入力するか、「参照」をクリックして、以前に選択したドメイン値マップに定義されている列から列名を選択します。
「追加」をクリックして別の列をターゲット列として追加し、列の名前を入力します。
図47-9に、移入後の「関数の編集 - lookupValue1M」ダイアログを示します。
「OK」をクリックします。
XSLTマッパーが、「lookupValue1M」関数アイコンとともに表示されます。
「ファイル」メニューから「すべて保存」を選択します。
デプロイ済のドメイン値マップを選択する方法の詳細は、第43.7.3項「Oracle JDeveloperでの複数のSOAコンポジット・アプリケーション間の共有データのデプロイ方法および使用方法」を参照してください。
「式ビルダー」ダイアログでは、ドメイン値マップ関数を使用してXpath式を作成できます。「式ビルダー」ダイアログには、Oracle Mediatorサービス・コンポーネントのフィルタ式または値の割当て機能からアクセスできます。
値の割当て機能の詳細は、第20.3.2.10項「値の割当て方法」を参照してください。
「式ビルダー」ダイアログでlookupValue関数を使用する手順は、次のとおりです。
「関数」リストから「DVM Functions」を選択します。
dvm:lookupValue関数をダブルクリックして、「式」フィールドに追加します。
lookupValue関数の様々な引数を指定します。例:
dvm:lookupValue('citymap.dvm','CityCodes',$in.Customer/inp1:Customer/Address/Ci ty,'CityNames','NotFound')
図47-10にも示すように、この式では、都市コードと等価の都市名のドメイン値マップがルックアップされます。都市コードの値は実行時に指定された値によって異なります。
この項では、SOAコンポジットでドメイン値マップを使用する場合のチュートリアルを紹介します。このユースケースは、ドメイン値マップの階層ルックアップ機能を示します。階層ルックアップのユースケースは次の手順で構成されます。
ReadOrdersという名前のアダプタ・サービスにより、ファイルがディレクトリから取得されます。
ReadOrdersアダプタ・サービスがファイル・データをProcessOrdersというメディエータに送信します。
次にProcessOrdersメディエータはメッセージをアダプタ参照で必要となる構造に変換します。トランスフォーメーション中、メディエータは、UnitsOfMeasureドメイン値マップのCommonドメインの対応値をルックアップします。
ProcessOrdersメディエータは、WriteOrdersという外部参照にメッセージを送信します。
WriteOrders参照は、指定された出力ディレクトリにメッセージを書き込みます。
この項で説明するサンプル・ファイルをダウンロードするには、Oracle SOA Suiteサンプル・ページ
を参照してください。
この項では、SOAコンポジット・アプリケーションを作成、構築およびデプロイするための設計時タスクを説明します。これらのタスクは、表示されている順番で実行する必要があります。
Oracle JDeveloperのアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。
Oracle JDeveloperで「ファイル」をクリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。
「新規ギャラリ」で「一般」ノードを開き、「アプリケーション」カテゴリを選択します。
「項目」リストで「SOAアプリケーション」を選択し、「OK」をクリックします。
SOAアプリケーションの作成ウィザードが表示されます。
「アプリケーション名」フィールドにHierarchical
と入力し、「次へ」をクリックします。
「プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにHierarchicalValue
と入力し、「次へ」をクリックします。
「SOA設定の構成」ページが表示されます。
「コンポジット・テンプレート」リストで「空のコンポジット」を選択し、「終了」をクリックします。
Oracle JDeveloperの「アプリケーション・ナビゲータ」には新規のアプリケーションやプロジェクトが移入され、SOAコンポジット・エディタには空白のコンポジットがあります。
「ファイル」メニューから「すべて保存」を選択します。
ユースケース用のアプリケーションおよびプロジェクトを作成した後は、ドメイン値マップを作成します。
ドメイン値マップを作成する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、「HierarchicalValue」プロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」ダイアログで「SOA層」ノードを開き、「トランスフォーメーション」カテゴリを選択します。
「項目」リストで、「ドメイン値マップ(DVM)」を選択し、「OK」をクリックします。
「ドメイン値マップ(DVM)・ファイルの作成」ダイアログが表示されます。
「ファイル名」フィールドに、UnitsOfMeasure.dvm
と入力します。
「ドメイン名」フィールドに、Siebel
とCommon
を入力します。
Siebelドメインに対応する「ドメイン値」
フィールドに、Ea
と入力します。
Commonドメインに対応する「ドメイン値」
フィールドに、Each
と入力します。
「OK」をクリックします。
ドメイン値マップ・エディタが表示されます。
「追加」をクリックし、次に「列の追加」を選択します。
DVM列の作成ダイアログが表示されます。
「名前」フィールドに、TradingPartner
と入力します。
「修飾子」リストから「True」を選択します。
「QualifierOrder」フィールドに1
を入力し、「OK」をクリックします。
ステップ9からステップ12を繰り返して、StandardCode
という名前で修飾子の順序の値が2
の修飾子をもう1つ作成します。
「追加」をクリックし、「ドメイン値の追加」を選択します。
この手順を繰り返し、さらに2行追加します。
ドメイン値マップ表に新たに追加した行に、表47-6に示す情報を入力します。
表47-6 ドメイン値マップ表の各行の情報
Siebel | Common | TradingPartner | StandardCode |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
図47-11に示すように、ドメイン値マップ・エディタが表示されます。
「ファイル」メニューから「すべて保存」を選択して、ドメイン値マップ・エディタを閉じます。
ドメイン値マップを作成した後は、ディレクトリからXMLファイルを読み取るReadOrdersという名前のファイル・アダプタ・サービスを作成します。
注意: Oracle Mediatorは、Oracle Real Application Clusters (Oracle RAC)の計画的停止に対して実行する際、同じファイルを2回処理する可能性があります。これは、ファイル・アダプタがXAに準拠していないアダプタであるためです。したがって、グローバル・トランザクションに組み入れると、各ファイルを1回のみ処理するXAインタフェース仕様に逸脱する可能性があります。 |
ファイル・アダプタ・サービスを作成する手順は、次のとおりです。
「コンポーネント・パレット」から「SOA」を選択します。
「ファイル・アダプタ」を選択し、「公開されたサービス」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが開いた場合は、「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドにReadOrders
と入力し、「次へ」をクリックします。
「操作」ページが表示されます。
「操作タイプ」フィールドで「Read File」を選択し、「次へ」をクリックします。
「ファイル・ディレクトリ」ページが表示されます。
「着信ファイル用のディレクトリ(物理パス)」フィールドに、ファイルの読取り先のディレクトリを入力します。
「次へ」をクリックします。
「ファイルのフィルタ処理」ページが表示されます。
「インクルード・ファイルの名前パターン」フィールドに*.xml
と入力し、「次へ」をクリックします。
「ファイル・ポーリング」ページが表示されます。
「ポーリング頻度」フィールドの値を10秒に変更し、「次へ」をクリックします。
「メッセージ」ページが表示されます。
「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。
「スキーマ・ファイルのインポート」をクリックします。
「スキーマ・ファイルのインポート」ダイアログが表示されます。
「検索」をクリックして、Samplesフォルダに存在するOrder.xsd
ファイルを選択します。
「OK」をクリックします。
「タイプ・エクスプローラ」→「インポートしたスキーマ」→「Order.xsd」の順にナビゲーション・ツリーを開きます。
「listOfOrder」を選択して、「OK」をクリックします。
「次へ」をクリックします。
「終了」ページが表示されます。
「終了」をクリックします。
「ファイル」メニューから「すべて保存」をクリックします。
図47-12に、SOAコンポジット・エディタのReadOrdersサービスを示します。
ProcessOrdersという名前のメディエータを作成する手順は、次のとおりです。
「コンポーネント・パレット」から「メディエータ」アイコンをドラッグし、SOAコンポジット・エディタの「コンポーネント」セクションにドロップします。
「メディエータの作成」ダイアログが表示されます。
「名前」フィールドに、ProcessOrders
と入力します。
「テンプレート」リストから、「インタフェースを後で定義」を選択します。
「OK」をクリックします。
ProcessOrdersという名前のメディエータが作成されます。
図47-13に示すように、SOAコンポジット・エディタで、「ReadOrders」サービスと「ProcessOrders」Oracle Mediatorを接続します。
この操作により、ファイルを入力ディレクトリから読み込む間に、ProcessOrdersメディエータを起動するファイル・アダプタ・サービスが指定されます。
「ファイル」メニューから「すべて保存」を選択します。
ファイル・アダプタ参照を作成する手順は、次のとおりです。
「コンポーネント・パレット」から「SOA」を選択します。
「ファイル・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
「アダプタ構成ウィザード」の「ようこそ」ページが表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドに、WriteCommonOrder
と入力します。
「次へ」をクリックします。
「操作」ページが表示されます。
「操作タイプ」フィールドで、「Write File」を選択します。
「次へ」をクリックします。
「ファイル構成」ページが表示されます。
「発信ファイルのディレクトリ(物理パス)」フィールドに、ファイルを書き込むディレクトリの名前を入力します。
「ファイル命名規則」フィールドにcommon_order_%SEQ%.xml
と入力して、「次へ」をクリックします。
「メッセージ」ページが表示されます。
「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。
「タイプ・エクスプローラ」→「プロジェクトのスキーマ・ファイル」→「Order.xsd」の順に移動し、「listOfOrder」を選択します。
「OK」をクリックします。
「次へ」をクリックします。
「終了」ページが表示されます。
「終了」をクリックします。
図47-14に、SOAコンポジット・エディタのWriteCommonOrder参照を示します。
「ファイル」メニューから「すべて保存」を選択します。
メッセージが経由するReadOrdersアダプタ・サービスから外部参照へのパスを指定する必要があります。
ルーティング・ルールを指定する手順は、次のとおりです。
図47-15に示すように、「ProcessOrders」Oracle Mediatorを「WriteCommonOrder」参照に接続します。
図47-15 ProcessOrdersメディエータからWriteCommonOrder参照への接続
「ProcessOrders」Oracle Mediatorをダブルクリックします。
「次を使用して変換」フィールドの右側にあるアイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、「OK」をクリックします。
XSLTマッパーに、「listOfOrder_To_listOfOrder.xsl」ファイルが表示されます。
「imp1:listOfOrder」ソース要素を「imp1:listOfOrder」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「自動マップ中」オプションから、「祖先名を考慮した要素の一致」の選択を解除します。
「OK」をクリックします。
図47-16に示すように、「listOfOrder_To_listOfOrder.xsl」ファイルが表示されます。
図47-16 imp1:listOfOrderからimp1:listOfOrderへのトランスフォーメーション
「コンポーネント・パレット」で、「拡張」を選択します。
「DVM Functions」をクリックします。
図47-17に示すように、lookupValueをunitsOfMeasure要素の接続線にドラッグ・アンド・ドロップします。
図47-17 imp1:listOfOrderからimp1:listOfOrder.xslへのlookupValue関数の追加
「lookupvalue」アイコンをダブルクリックします。
「関数の編集 - lookupValue」ダイアログが表示されます。
「dvmLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。
「UnitsofMeasure.dvm」を選択して、「OK」をクリックします。
「sourceColumnName」フィールドの右側にある「検索」をクリックします。
DVM列の選択ダイアログが表示されます。
「Siebel」を選択して、「OK」をクリックします。
「sourceValue」列に、次の値を入力します。
/imp1:listOfOrder/imp1:order/imp1:baseData/imp1:unitOfMeasure
「targetColumnName」フィールドの右側にある「検索」をクリックします。
DVM列の選択ダイアログが表示されます。
「Common」を選択して、「OK」をクリックします。
「defaultValue」フィールドに"No_Value_Found"
と入力します。
「追加」をクリックします。
「qualifierColumnName」行が追加されます。
「qualifierColumnName」フィールドに"StandardCode"
と入力します。
「追加」をクリックします。
「qualifierValue」行が追加されます。
「qualifierValue」フィールドに、次の値を入力します。
/imp1:listOfOrder/imp1:order/imp1:baseData/imp1:standard
「追加」をクリックして、別の「qualifierColumnName」行を挿入します。
「qualifierColumnName」フィールドに"TradingPartner"
と入力します。
「追加」をクリックして、別の「qualifierValue」行を挿入します。
「qualifierValue」フィールドに、次の値を入力します。
/imp1:listOfOrder/imp1:order/imp1:baseData/imp1:tp
図47-18に示すように、「関数の編集 - lookupValue」ダイアログが表示されます。
図47-18 「関数の編集 - lookupValue関数」ダイアログ: 階層ルックアップ・ユースケース
「OK」をクリックします。
図47-19に示すように、トランスフォーメーションが表示されます。
図47-19 imp1:listOfOrderからimp1:listOfOrderへのトランスフォーメーションの完了
「ファイル」メニューから「すべて保存」を選択して、上部にある「listOfOrder_To_listOfOrder.xsl」ファイルを閉じます。
SOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続が必要です。アプリケーション・サーバー接続の作成方法の詳細は、第43.7.1.1項「アプリケーション・サーバー接続の作成」を参照してください。
次の手順で、HierarchicalValueコンポジット・アプリケーションをアプリケーション・サーバーにデプロイします。
アプリケーション・デプロイメント・プロファイルの作成
アプリケーション・サーバーへのアプリケーションのデプロイ
これらの手順の詳細は、第43.7.1項「Oracle JDeveloperでの単一の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インフラストラクチャをインストールしたホストです。
これらの手順の詳細は、第43.7.1項「Oracle JDeveloperでの単一の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のアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。
Oracle JDeveloperで「ファイル」をクリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。
「新規ギャラリ」で「一般」ノードを開き、「アプリケーション」カテゴリを選択します。
「項目」リストで「SOAアプリケーション」を選択し、「OK」をクリックします。
SOAアプリケーションの作成ウィザードが表示されます。
「アプリケーション名」フィールドにMultivalue
と入力し、「次へ」をクリックします。
「プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにMultivalue
と入力し、「次へ」をクリックします。
「SOA設定の構成」ページが表示されます。
「コンポジット・テンプレート」リストから「空のコンポジット」を選択し、「終了」をクリックします。
Oracle JDeveloperの「アプリケーション・ナビゲータ」には新規のアプリケーションやプロジェクトが移入され、SOAコンポジット・エディタには空白のコンポジットがあります。
「ファイル」メニューから「すべて保存」を選択します。
ユースケース用のアプリケーションおよびプロジェクトを作成した後は、ドメイン値マップを作成します。
ドメイン値マップを作成する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、「Multivalue」プロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」ダイアログで「SOA層」ノードを開き、「トランスフォーメーション」カテゴリを選択します。
「項目」リストで、「ドメイン値マップ(DVM)」を選択し、「OK」をクリックします。
「ドメイン値マップ(DVM)・ファイルの作成」ダイアログが表示されます。
「ファイル名」フィールドに、multivalue.dvm
と入力します。
「ドメイン名」フィールドに、Longname
、Shortname
、Language
およびCapital
を入力します。
Longnameドメインに対応する「ドメイン値」
フィールドに、Karnataka
と入力します。
Shortnameドメインに対応する「ドメイン値」
フィールドに、KA
と入力します。
Languageドメインに対応する「ドメイン値」
フィールドに、Kannada
と入力します。
Capitalドメインに対応する「ドメイン値」
フィールドに、Bangalore
と入力します。
「OK」をクリックします。
ドメイン値マップ・エディタが表示されます。
「追加」をクリックし、次に「行の追加」を選択します。
この手順を繰り返し、さらに2行追加します。
ドメイン値マップ表に新たに追加した行に、表47-7に示す情報を入力します。
表47-7 ドメイン値マップ表の各行の情報
Longname | Shortname | Language | Capital |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
図47-20に示すように、ドメイン値マップ・エディタが表示されます。
「ファイル」メニューから「すべて保存」を選択して、ドメイン値マップ・エディタを閉じます。
ドメイン値マップを作成した後は、ディレクトリからXMLファイルを読み取るreadFileという名前のファイル・アダプタ・サービスを作成します。
注意: メディエータは、Oracle RACの計画的停止に対して実行する際、同じファイルを2回処理する可能性があります。これは、ファイル・アダプタがXAに準拠していないアダプタであるためです。したがって、グローバル・トランザクションに組み入れると、各ファイルを1回のみ処理するXAインタフェース仕様に逸脱する可能性があります。 |
ファイル・アダプタ・サービスを作成する手順は、次のとおりです。
「コンポーネント・パレット」から「SOA」を選択します。
「ファイル・アダプタ」を選択し、「公開されたサービス」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが開いた場合は、「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドにreadFile
と入力し、「次へ」をクリックします。
「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」をクリックし、「次へ」をクリックします。
「操作」ページが表示されます。
「操作タイプ」フィールドで「Read File」を選択し、「次へ」をクリックします。
「ファイル・ディレクトリ」ページが表示されます。
「着信ファイル用のディレクトリ(物理パス)」フィールドに、ファイルの読取り先のディレクトリを入力します。
「次へ」をクリックします。
「ファイルのフィルタ処理」ページが表示されます。
「インクルード・ファイルの名前パターン」フィールドに*.xml
と入力し、「次へ」をクリックします。
「ファイル・ポーリング」ページが表示されます。
「ポーリング頻度」フィールドの値を1秒に変更し、「次へ」をクリックします。
「メッセージ」ページが表示されます。
「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。
「スキーマ・ファイルのインポート」をクリックします。
「スキーマ・ファイルのインポート」ダイアログが表示されます。
「検索」をクリックして、Samplesフォルダに存在するinput.xsdファイルを選択します。
「OK」をクリックします。
「タイプ・エクスプローラ」→「インポートしたスキーマ」→「input.xsd」の順にナビゲーション・ツリーを開きます。
「Root-Element」を選択して、「OK」をクリックします。
「次へ」をクリックします。
「終了」ページが表示されます。
「終了」をクリックします。
「ファイル」メニューから「すべて保存」を選択します。
図47-21に、SOAコンポジット・エディタのreadFileサービスを示します。
LookupMultiplevaluesMediatorメディエータを作成する手順は、次のとおりです。
「コンポーネント・パレット」から「メディエータ」アイコンをドラッグし、SOAコンポジット・エディタの「コンポーネント」セクションにドロップします。
「メディエータの作成」ダイアログが表示されます。
「名前」フィールドに、LookupMultiplevaluesMediator
と入力します。
「テンプレート」リストから、「インタフェースを後で定義」を選択します。
「OK」をクリックします。
LookupMultiplevaluesMediatorという名前のOracle Mediatorが作成されます。
図47-22に示すように、SOAコンポジット・エディタで、「readFile」サービスと「LookupMultiplevaluesMediator」Oracle Mediatorを接続します。
この操作により、ファイルを入力ディレクトリから読み込む間に、LookupMultiplevaluesMediator Oracle Mediatorを起動するファイル・アダプタ・サービスが指定されます。
図47-22 readFileサービスからLookupMultiplevaluesMediatorメディエータへの接続
「ファイル」メニューから「すべて保存」を選択します。
ファイル・アダプタ参照を作成する手順は、次のとおりです。
「コンポーネント・パレット」から「SOA」を選択します。
「ファイル・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
「アダプタ構成ウィザード」の「ようこそ」ページが表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドにwriteFile
と入力し、「次へ」をクリックします。
「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」をクリックし、「次へ」をクリックします。
「操作」ページが表示されます。
「次へ」をクリックします。
「操作」ページが表示されます。
「操作タイプ」フィールドで、「Write File」を選択します。
「次へ」をクリックします。
「ファイル構成」ページが表示されます。
「発信ファイルのディレクトリ(物理パス)」フィールドに、ファイルを書き込むディレクトリの名前を入力します。
「ファイル命名規則」フィールドにmultivalue_%SEQ%.xml
と入力して、「次へ」をクリックします。
「メッセージ」ページが表示されます。
「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。
「タイプ・エクスプローラ」→「プロジェクトのスキーマ・ファイル」→「output.xsd」の順に移動し、「Root-Element」を選択します。
「OK」をクリックします。
「次へ」をクリックします。
「終了」ページが表示されます。
「終了」をクリックします。
図47-23に、SOAコンポジット・エディタのwriteFile参照を示します。
「ファイル」メニューから「すべて保存」を選択します。
メッセージが経由するreadFileアダプタ・サービスから外部参照へのパスを指定する必要があります。
ルーティング・ルールを指定する手順は、次のとおりです。
図47-24に示すように、「LookupMultiplevaluesMediator」メディエータを「writeFile」参照に接続します。
図47-24 LookupMultiplevaluesMediatorメディエータからwriteFile参照への接続
「LookupMultiplevaluesMediator」メディエータをダブルクリックします。
「次を使用して変換」フィールドの右側にあるアイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、「OK」をクリックします。
XSLTマッパーに、「Input_To_Output_with_multiple_values_lookup.xsl」ファイルが表示されます。
「imp1:Root-Element」ソース要素を「ns2:Root-Element」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「自動マップ中」オプション・リストから、「祖先名を考慮した要素の一致」の選択を解除します。
「OK」をクリックします。
図47-25に示すように、XSLTマッパーに「Input_To_Output_with_multiple_values_lookup.xsl」ファイルが表示されます。
図47-25 imp1:Root-Elementからns2:Root-Elementへのトランスフォーメーション
「コンポーネント・パレット」で、「拡張」を選択します。
「DVM Functions」をクリックします。
図47-26に示すように、lookupValue1Mを中央のパネルにドラッグ・アンド・ドロップします。
図47-26 imp1:Root-Elementからns2:Root-ElementへのlookupValue関数の追加
「lookupvalue1M」アイコンをダブルクリックします。
「関数の編集 - lookupValue1M」ダイアログが表示されます。
「dvmLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。
「multivalue.dvm」を選択して、「OK」をクリックします。
「sourceColumnName」フィールドの右側にある「検索」をクリックします。
DVM列の選択ダイアログが表示されます。
「Longname」を選択して、「OK」をクリックします。
「sourceValue」列に、次の値を入力します。
/imp1:Root-Element/imp1:Details/imp1:Longname
「targetColumnName」フィールドの右側にある「検索」をクリックします。
DVM列の選択ダイアログが表示されます。
「Shortname」を選択して、「OK」をクリックします。
「追加」をクリックします。
「targetColumnName」行が追加されます。
「targetColumnName」フィールドに、"Language"
と入力します。
「追加」をクリックして、別の「targetColumnName」行を挿入します。
「targetColumnName」フィールドに、"Capital"
と入力します。
図47-27に示すように、「関数の編集 - lookupValue」ダイアログが表示されます。
図47-27 「関数の編集 - lookupValue関数」ダイアログ: 複数の値ルックアップ・ユースケース
「OK」をクリックします。
図47-28に示すように、トランスフォーメーションが表示されます。
図47-28 imp1:Root-Elementからns2:Root-Elementへのトランスフォーメーションの完了
「ファイル」メニューから「すべて保存」を選択して、「Input_To_Output_with_multiple_values_lookup.xsl」ファイルを閉じます。
SOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続が必要です。アプリケーション・サーバー接続の作成方法の詳細は、第43.7.1.1項「アプリケーション・サーバー接続の作成」を参照してください。
次の手順で、Multivalueコンポジット・アプリケーションをアプリケーション・サーバーにデプロイします。
アプリケーション・デプロイメント・プロファイルの作成
アプリケーション・サーバーへのアプリケーションのデプロイ
これらの手順の詳細は、第43.7.1項「Oracle JDeveloperでの単一の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をクリックします。「フローのトレース」ページが表示されます。