この章では、ドメイン値マップの概要を説明し、Oracle Enterprise Service Busに必要なドメイン値マップに関するXML構造を示します。また、Oracle ESB Controlを使用してドメイン値マップを作成、移入、インポートおよびエクスポートする方法、およびEnterprise Service Busのルーティング・ルール内のトランスフォーメーション設計時にドメイン値マップを使用する方法について説明します。
項目は次のとおりです。
Oracle Enterprise Service Busを使用して統合する複数のアプリケーションでは、同じ情報を表すのに別の値を使用している可能性があります。たとえば、あるアプリケーションでは州を正式名称(Massachusetts)で表す場合があるのに対して、別のアプリケーションでは、州を略称(MA)で表す場合があります。ドメイン値マップを使用すると、アプリケーションの値を別のアプリケーションの値に関連付けることができます。
通常、各ドメイン値マップには、複数のアプリケーション間における特定カテゴリの値マッピングが保持されます。たとえば、あるドメイン値マップは州コードのマッピングを保持し、別のドメイン値マップは単位のマッピングを保持します。
Oracle ESB Controlを使用してドメイン値マップを作成および移入した後は、設計時のXSLTデータ・トランスフォーメーションの開発中に、Oracle JDeveloperのマッパー・ツールでそのドメイン値マップを使用できます。その後、実行時にアプリケーション固有の値に対するルックアップが実行されます。
たとえば、ドメイン値マップを使用してランタイム・ルックアップを実行し、長い州名の入力を2文字の州コード出力に変換するとします。このシナリオでは、州名がOracle Enterprise Service Busに渡されます。Enterprise Service Bus内で、ルーティング・サービスのルーティング・ルールで指定されたトランスフォーメーションによって、データは、ドメイン値マップ・ルックアップを使用して州名から州コードに変換されます。
ドメイン値マップの作成と使用のプロセス全体を、次のリストに要約します。
Oracle ESB Controlを使用して、ドメイン値マップを作成し、Enterprise Service Busを使用して統合されるアプリケーション間にマップする必要がある値を移入します。このプロセスについては、後続の項で説明します。
Oracle JDeveloperを使用して、ルーティング・ルール・トランスフォーメーション内のソースからターゲットへのトランスフォーメーションを定義するXSLファイルを作成します。このプロセスについては、「データ構造トランスフォーメーション用XSLマップ・ファイルの作成」を参照してください。
実行時に、Oracle Enterprise Service Busでは、ドメイン値マップを使用して適切な値がルックアップされ、統合するアプリケーションに対するターゲットが移入されます。
ドメイン値マップは、Oracle ESB Controlの「マップ」ビューを使用して作成(および保存)します。ドメイン値マップを保存すると、ESBリポジトリに保存されるため、Oracle JDeveloperのデータ・マッパーで使用できます。次の各項では、ドメイン値マップの作成(および保存)に使用される様々な方法について説明します。
Oracle ESB Controlの上部にある「マップ」アイコンをクリックします。
Oracle ESB Controlの左側にある「作成」の下矢印をクリックします。
「新規マップを作成します。」と「新規マップをインポートします。」の2つの選択肢が表示されます。
「新規マップを作成します。」をクリックします。
Oracle ESB Controlがリフレッシュされ、図7-1のように表示されます。
デフォルトの「New DVM」をドメイン値マップ・ファイル名に置き換えます。「New DVM」を編集するには、画面右側のペインの「マッピング」領域の上にある名前のフィールドをクリックします。
たとえば、「New DVM」を、州名、略称および短縮コードに対するドメイン値マップを識別するための「StateCodes」に置き換えます。
ドメイン値マップをエクスポートする場合は、指定した名前がエクスポート・ファイル名に使用されます。ドメイン値マップのエクスポートの詳細は、「ドメイン値マップのエクスポート」を参照してください。
「説明」フィールドに、ドメイン値マップの説明を入力します。
たとえば、「Mappings of state names, abbreviations, and short codes」と入力します。
追加の列が必要な場合は、「追加」の下矢印をクリックして、追加する列ごとに「列」を1回ずつクリックします。列を追加し過ぎた場合は、その列を選択して「削除」をクリックします。
各列が1つのドメインを表します。たとえば、ドメイン値マップを使用して、4つのドメイン間に値をマップする場合は、「列」を2回クリックして列を2つ追加します。ドメインとして考慮する項目に制限はありません。必要に応じてドメインを指定します。たとえば、取引パートナ、組織、部門およびアプリケーションなどをドメインにできます。
たとえば、「追加」→「列」の順にクリックして列を1つ追加します。
列名をダブルクリックして、その名前をデフォルト値の「Applicationn」からわかりやすい名前に変更します。各列名は、ドメイン値マップ内で一意であることが必要です。
たとえば、デフォルトの列名を「Long」、「Abbrev」および「Short」に変更します。
追加の行が必要な場合は、「追加」の下矢印をクリックして、追加する行ごとに「行」を1回ずつクリックします。行を追加し過ぎた場合は、その列を選択して「削除」をクリックするか、または行をそのままにします。空の行は、ドメイン値マップの保存時に削除されます。
行をダブルクリックし、ドメイン値マップの値を入力します。
たとえば、「Long」、「Abbrev」および「Short」の下の各列に、「Massachusetts」、「Mass」および「MA」と入力します。
必要な数の行の入力が終了するまで、前述の手順を繰り返します。アプリケーションで必要となるすべての行を入力する必要はありません。ドメイン値マップは、後で編集して行を追加できます。
図7-2に、ドメイン値マップの例を示します。
ドメイン値マップの名前を確認し、「説明」フィールドの上にある「保存」ボタンをクリックします。
「保存」ボタンをクリックした後は、「ドメイン値マップの編集」の説明に従って、ドメイン値マップのコンポーネントを変更できます。
保存したドメイン値マップの名前は、マップ名をダブルクリックすると変更できますが、そのドメイン値マップを参照しているトランスフォーメーション・マップも変更する必要があります。「トランスフォーメーションでのドメイン値マップの使用」を参照してください。
ここで示した手順では、ドメイン値マップの完了時に「保存」をクリックするように記述していますが、「保存」はプロセス内のどのポイントでもクリックできます。
マップをエクスポートする場合は、「ドメイン値マップのエクスポート」を参照してください。
これで、ドメイン値マップをOracle JDeveloperでのトランスフォーメーションの作成時に使用できます。
作成して保存したドメイン値マップは、ファイルにエクスポートできます。この処理が必要となるのは、ドメイン値マップをテスト・システムで作成し、本番システムにインポートできるようにエクスポートする場合などです。
ドメイン値マップをエクスポートする手順は、次のとおりです。
Oracle ESB Controlの「マップ」ビューで、「新規ドメイン値マップの作成」または「既存のドメイン値マップ・ファイルのインポート」の説明に従って、ドメイン値マップを作成またはインポートします。
ドメイン値マップを保存していない場合は、「保存」をクリックします。
「エクスポート」をクリックします。
「OK」をクリックし、オペレーティング・システムのダイアログ・ボックスが開くのを待ちます。このダイアログ・ボックスで、ファイルをローカル・ファイル・システムに保存できます。ファイルを開くか保存するかを尋ねるプロンプトが表示された場合は、「保存」を選択します。
ファイルを保存するダイアログ・ボックスで、StateCodes.xml
などのドメイン値マップのファイルを目的の場所に保存します。
マップ・ファイルのエクスポートおよびファイル・システムへの保存が終了すると、XMLファイルをテキスト・エディタで編集できます。ただし、ファイルが無効にならないように注意して更新してください。ドメイン値マップ・ファイルのサンプルは、例7-1を参照してください。
例7-1 ドメイン値マップ・ファイルのサンプル
<?xml version = '1.0' encoding = 'UTF-8'?> <dvm name="StateCodes" isNew="null"> <description>Mapping of state names, abbreviations, and codes</description> <columns> <column name="Long"/><column name="Abbrev"/><column name="Short"/> </columns> <rows> <row><cell>Massachusetts</cell><cell>Mass</cell><cell>MA</cell></row> <row><cell>California</cell><cell>Calif</cell><cell>CA</cell></row> </rows> </dvm>
この項では、ドメイン値マップのテンプレートとスキーマ定義ファイルの例を示します。
例7-2に、ドメイン値マップのテンプレート(XML)ファイルを示します。このファイルは、ドメイン値マップ・ファイルをテキスト・エディタで新規に作成する場合に使用してください。
例7-2 ドメイン値マップのテンプレート・ファイル
<?xml version="1.0" encoding="UTF-8"?> <dvm name="New DVM" isNew="true"> <description>DVM description</description> <columns> <column name="Domain1"/> <column name="Domain2"/> </columns> <rows> <row> <cell>value1</cell> <cell>value2</cell> </row> </rows> </dvm>
例7-3に、ドメイン値マップのスキーマ定義(XSD)ファイルを示します。インポートされたドメイン値マップXMLファイルはすべて、このスキーマ定義ファイルと照合して検証されます。
例7-3 ドメイン値マップの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"> <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"> <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"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="rows"> <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"> <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"/> <xsd:attribute name="isNew"/> </xsd:complexType> </xsd:element> <xsd:annotation> <xsd:documentation>This schema is used to validate the DVM Document used for creating and updating a domain-value map </xsd:documentation> </xsd:annotation> </xsd:schema>
ローカル・ファイル・システムに既存のドメイン値マップがある場合は、それをESBリポジトリに追加する方法として、Oracle ESB Controlにインポートできます。ESBリポジトリに追加すると、そのドメイン値マップを、ルーティング・ルールでトランスフォーメーションを指定するときに使用できます。
既存のドメイン値マップ・ファイルをインポートする一般的なシナリオは、次のとおりです。
ドメイン値マップをテスト・システムから本番システムに移動する場合
ESB構成全体をテスト・システムから本番システムに移動する必要がある場合は、「別のOracleホームへのESBインスタンスの移動」で説明されているインポート方法を使用することをお薦めします。ドメイン値マップのみをインポートするには、最初に、「ドメイン値マップのエクスポート」の説明に従って、テスト・システムのドメイン値マップをエクスポートします。
ドメイン値マップのベースとして、データベースからエクスポートされたXMLルックアップ・ファイルをインポートする場合
このシナリオは、XSUなどのツールを使用してデータベースからスキーマをエクスポートしていて、エクスポートしたファイルを、ESBドメイン値マップに必要なスキーマを使用するように変換していることを前提としています。「ドメイン値マップのテンプレートおよびXSDファイル」を参照してください。エクスポートされたドメイン値マップの例は、例7-1を参照してください。
既存のドメイン値マップ・ファイルをインポートし、ESBリポジトリに格納する手順は、次のとおりです。
Oracle ESB Controlの上部にある「マップ」をクリックします。
Oracle ESB Controlの左側にある「作成」の下矢印をクリックします。
「新規マップを作成します。」と「新規マップをインポートします。」の2つの選択肢が表示されます。
「新規マップをインポートします。」をクリックします。
「新規マップをインポートします。」ダイアログ・ボックスが開きます。図7-3を参照してください。
「新規マップをインポートします。」ダイアログ・ボックスで、次の手順を実行します。
「インポート」フィールドに、ローカル・ファイル・システム上のインポートするファイルの完全パスを入力します。
必要に応じて、「同じ名前のファイルがある場合は上書き」を選択、または選択を解除します。
名前は、ドメイン値マップがESBリポジトリに格納されるときの主キーになるため、一意であることが必要です。「同じ名前のファイルがある場合は上書き」を選択している場合で、同じ名前のドメイン値マップがすでに存在していて、それを上書きしないときは、次のいずれかの処理を実行できます。
このダイアログ・ボックスを取り消して、ドメイン値マップの名前を変更し、インポート操作を再度開始します。「ドメイン値マップの名前の編集」を参照してください。
「同じ名前のファイルがある場合は上書き」の選択を解除します。
「OK」をクリックします。
Oracle ESB Controlがリフレッシュされ、インポートしたドメイン値マップ・ファイルが表示されます。インポートしたファイルはESBリポジトリに保存されるため、そのドメイン値マップはOracle JDeveloperでのトランスフォーメーションの作成時に使用できるようになります。
現在いくつかの行が含まれているドメイン値マップで作業していて、適切に書式設定されたファイルから追加の行をインポートする場合は、後述のリストの説明に従って実行できます。この処理を実行するときは、インポートされるファイルの行が、現在のドメイン値マップ内の行と競合する可能性があります。
図7-4のOracleアプリケーションの例のように、特定の列で、2つ以上の異なる行に同じ値が含まれている場合は、行が競合していると判断されます。
このような競合が存在する場合は、次のオプションが示されます。
競合する行の上書き
このオプションを選択すると、Oracle ESB Controlに表示されているドメイン値マップ内の競合する行は、インポートされるファイルの行で上書きされます。
競合する行のスキップ
このオプションを選択すると、Oracle ESB Controlに表示されているドメイン値マップ内の競合する行は、インポートされるファイルの行で上書きされません。これらの行は、ドメイン値マップにインポートされません。
競合する行の追加
このオプションを選択すると、インポートされるファイルの行は、ドメイン値マップ内の既存の行と競合している場合でも、ドメイン値マップに追加されます。このオプションを選択するのは、特定の場合で、実行時にドメイン値マップを使用するアプリケーションの知識が十分ある場合のみにしてください。
たとえば、図7-4に示されている複数の行をそのまま保持するのは、ドメイン値マップが、実行時にSAPアプリケーションからOracleアプリケーションに値をマップするために使用される場合のみで、逆のマップの場合には適用されません。Oracleアプリケーションの値が実行時にSAPアプリケーションにマップされる場合、GallonをContainerとGalのどちらにマップするかをESBサーバーで判断することはできないため、エラーが発生します。
行をドメイン値マップにインポートする手順は、次のとおりです。
Oracle ESB Controlの「マップ」ビューで、「新規ドメイン値マップの作成」または「既存のドメイン値マップ・ファイルのインポート」の説明に従って、ドメイン値マップを作成またはインポートします。
「保存」をクリックして、変更内容を保存します。
「インポート」をクリックします。
「既存のマップにインポート」ダイアログ・ボックスが開きます。
「ファイルのインポート」フィールドに、行をインポートするファイルのパスを入力します。
この項で説明した「インポート・オプション」の1つを選択します。
図7-5 Oracle ESB Controlの「マップ」ビュー: 「既存のマップにインポート」ダイアログ
「OK」をクリックします。
Oracle ESB Controlのビューがリフレッシュされ、インポートした行が表示されます。ドメイン値マップはESBリポジトリに保存され、「トランスフォーメーションでのドメイン値マップの使用」で説明するように、Oracle JDeveloperでのトランスフォーメーションの作成時に使用できます。
図7-6 Oracle ESB Controlの「マップ」ビュー: 行のインポート後に更新されたマップ
この項では、ドメイン値マップの編集、および「マップ」ビューのデータ表示の調整に使用できる編集オプションについて説明します。ここで説明するオプションはすべて、ドメイン値マップの作成時に使用できます。
ここでは、次の項目について説明します。
手順は次のとおりです。
ドメイン値マップ名をダブルクリックします。
マップ名を編集します。
保存したドメイン値マップの名前は、マップ名をダブルクリックすると変更できますが、そのドメイン値マップを参照しているトランスフォーメーション・マップも変更する必要があります。「トランスフォーメーションでのドメイン値マップの使用」を参照してください。
手順は次のとおりです。
「追加」の下矢印をクリックします。
ドロップダウン・リストに、行または列の選択肢が表示されます。
行または列をクリックして、必要な表要素を追加します。選択肢を複数回クリックすると、複数の行または列を追加できます。
手順は次のとおりです。
削除する行の番号をクリックします。
その行が青色でハイライト表示されます。
マッピング・ヘッダーの下にある「削除」ボタンをクリックします。
手順は次のとおりです。
削除する列の名前をクリックします。
その列が青色でハイライト表示されます。
マッピング・ヘッダーの下にある「削除」ボタンをクリックします。
手順は次のとおりです。
名前を変更する列の名前をダブルクリックします。
既存列名の最初の文字の前にテキスト・カーソルが表示されます。
列名を編集します。
既存の文字をすべて削除して、新しい名前を入力できます。
「保存」ボタンをクリックして、変更内容を保存します。
次のリストに示すように、選択した列の位置を1度に1つずつ移動できます。このオプションは、ユーザーの好みにあわせて変更できるように提供されており、実行時のドメイン値マップの適用方法には影響を与えません。
手順は次のとおりです。
右に移動する列をクリックします。
図7-7に示すように、列ヘッダーに小さい矢印が表示されます。
選択した列を移動する方向の矢印をクリックします。
すべての列が目的の順序で表示されるまで、手順1と手順2を繰り返します。
ドメイン値マップを作成または編集しているときは、頻繁に保存することをお薦めします。多数の行を手動で追加している場合は特に実行してください。
たとえば、ドメイン値マップを保存し、その後複数の行を追加するとします。ドメイン値マップを最後に保存した後で、多数の行に入力の誤りがあったことに気付いたとします。このような場合は、「リセット」ボタンをクリックすると、ドメイン値マップを最後に保存した状態にリセットできます。この結果、最後に「保存」ボタンをクリックした後に行われたすべての変更が削除されます。
ドメイン値マップのセルに追加する値の幅がデフォルトのセル幅より広い場合は、列のサイズを変更することもできます。手順は次のとおりです。
2つの列ヘッダーの境界にカーソルを移動し、カーソルの形が両方向矢印に変わる位置にカーソルをあわせます。これがサイズ変更カーソルです。
両方向矢印を左クリックします。列の境界に点線が表示されます。
点線を必要に応じて左または右にドラッグし、境界の新しい位置を指示します。
マウスのボタンを放します。
ルーティング・ルールのトランスフォーメーションで使用されなくなったドメイン値マップがあり、それを削除する場合は、次の手順を実行します。
Oracle ESB Controlで「マップ」をクリックします。
ドメイン値マップ・ナビゲータで、削除するドメイン値マップの名前を選択します。
ドメイン値マップ・ナビゲータ内の「削除」ボタンをクリックします。
「マップの削除」ダイアログ・ボックスが開きます。
「はい」をクリックします。
選択したドメイン値マップが、ドメイン値マップ・ナビゲータおよびESBリポジトリから削除されます。
ドメイン値マップをトランスフォーメーションに組み込むには、コンポーネント・パレットの「lookup-dvm
」関数を、ドメイン値マップを使用するソース要素とターゲット要素間の接続にドラッグ・アンド・ドロップします。
注意: Oracle BPEL Process Managerの使用経験がある場合は、 lookup-xml およびlookup-table 関数の知識があると思われます。これらの関数を使用すると、Oracle Enterprise Service Busのlookup-dvm 関数を使用する場合と同様の操作を実行できます。ただし、lookup-xml およびlookup-table 関数は、ドメイン値マップのインフラストラクチャから独立しています。たとえば、lookup-table 関数は、ESBのドメイン値マップで使用できません。 |
Oracle JDeveloperでESBプロジェクトを開きます。
たとえば、「CustomerData」プロジェクトを開くと、「設計」タブにルーティング・サービス・アイコンが表示されます。「CustomerData」プロジェクトのサンプルのスクリーンショットは、図2-2を参照してください。
「設計」タブでルーティング・アイコンを選択し、トランスフォーメーションの「XSL」アイコンをダブルクリックして、データ・マッパー・ウィンドウを表示します。
たとえば、「設計」タブで「CustOut_RS」を選択し、「XSL」アイコンをダブルクリックします。
データ・マッパー・ウィンドウの「ソース」および「ターゲット」ペインで、ツリーを開きます。
ソース要素をターゲット要素にドラッグ・アンド・ドロップします。
たとえば、図7-8に示すように、「State」を「top:state」にドラッグ・アンド・ドロップします。
「コンポーネント・パレット」で、下矢印をクリックして「Advanced Functions」を選択します。
図7-9に示すように、コンポーネント・パレットに「lookup-dvm
」関数がリストされます。
ソース・オブジェクトをターゲット・オブジェクトに接続している線に、「lookup-dvm
」をドラッグ・アンド・ドロップします。
図7-10に示すように、接続している線の上に、lookup-dvm
のアイコンが表示されます。黄色の三角形の警告は、lookup-dvm
関数の定義が完了していないことを示しています。
look-up dvmのアイコンをダブルクリックします。
「関数の編集 – look-up dvm」ダイアログ・ボックスが開きます。
「関数の編集 – look-up dvm」ダイアログ・ボックスの各フィールドに値を指定します。
「sourceValue」の値は、手動または次の方法で入力できます。
「dvmName」フィールドに表示されているソース値を、「下に移動」を2回クリックして「sourceValue」フィールドに移動します。
[Ctrl]を押しながら[Space]を押して、式ビルダーを起動します。上へ移動および下へ移動するキーを押して、リスト内のオブジェクトを配置し、[Enter]を押してその項目を選択します。
「dvmName」フィールドに、Oracle ESB Controlを使用して以前に定義したドメイン値マップ・スキーマの名前を入力します。
「dvmName」フィールドの右にある懐中電灯アイコンをクリックして、ESBリポジトリに格納されているドメイン値マップのリストから名前を選択します。
たとえば、「新規ドメイン値マップの作成」で説明した'StateCodes'
を選択します。
「sourceColumnName」フィールドに、ソース要素の値に関連付けられているドメイン値マップの列の名前を入力します。
「sourceColumnName」フィールドの右にある懐中電灯アイコンをクリックして、選択したドメイン値マップに定義されている列から名前を選択します。
たとえば、'Long'
を選択します。
「targetColumnName」フィールドに、ターゲット要素の値と関連付けられているドメイン値マップの列の名前を入力します。
「targetColumnName」フィールドの右にある懐中電灯アイコンをクリックして、選択したドメイン値マップに定義されている列から名前を選択します。
たとえば、'Short'
を選択します。
オプションのデフォルト値を入力します。
たとえば、""
と入力します。
「OK」をクリックします。
図7-12に示すように、lookup-dvm
関数が組み込まれたデータ・マッパーが「設計」タブに表示されます。
「ファイル」メニューから「すべて保存」をクリックします。
プロジェクトをESBサーバーに登録します。
トランスフォーメーションがESBルーティング・ルールに組み込まれると、そのトランスフォーメーションは実行時に適用されます。たとえば、StatesCodesドメイン値マップがトランスフォーメーションで使用されている場合は、ユーザーが指定した州の値からターゲット・アプリケーションで必要な州コード値へのトランスフォーメーションが、実行時に適用されます。
Oracle ESB Controlの「サービス」ビューの「トラッキング可能フィールド」タブのフィールドを設定すると、トランスフォーメーションの結果を表示できます。トラッキング・データは、図10-1に示すように、Oracle ESB Controlの「インスタンス」ビューの「詳細」タブに表示されます。