この章では、FulfillmentESBプロジェクトの作成方法について説明します。 項目は次のとおりです。
注文が承認されると、SOAOrderBookingプロジェクトでは、FulfillmentESBプロジェクトが起動し、注文の出荷方法が決定されます。 現在可能な出荷方法には、USPSとFedexの2通りがあります。 FulfillmentESBプロジェクトでは、$500未満の注文はUSPSに、$500以上の注文はFedexに送信されます。
USPSの場合、注文はファイル・アダプタを介して送信されます。 注文情報はファイルに書き込まれます。
Fedexの場合、注文はデータベース・アダプタを介して送信されます。 注文情報はデータベースに書き込まれます。
FulfillmentESBプロジェクトでは、注文がJMSアダプタにも送信されます。 このチュートリアルでは、注文はJMSキューに送信されるのみです。 このキューの注文データのコンシューマは存在しません。 ここでは、JMSアダプタを使用する場合に備えて、メッセージをJMSアダプタに送信する方法を示すことのみを目的にしています。
FulfillmentESBプロジェクトはESBプロジェクトです。 完了したプロジェクトは、JDeveloperで次のように表示されます。
FulfillmentESBプロジェクトは、次の要素で構成されています。
OrderFulfillmentルーティング・サービス
Shipmentルーティング・サービス
USPSShipmentファイル・アダプタ
FedexShipmentデータベース・アダプタ
FulfillmentBatch JMSアダプタ
最初に、JDeveloperで新規ESBプロジェクトを作成します。手順は次のとおりです。
「SOADEMO」アプリケーションを右クリックし、「新規プロジェクト」を選択します。
新規ギャラリの「カテゴリ」セクションで、「General」を開き、「Projects」を選択します。 「項目」セクションで、「ESBプロジェクト」を選択します。
図4-2 新規ギャラリ: FulfillmentESBプロジェクト用のESBプロジェクトの選択

「OK」をクリックします。
「ESBプロジェクトの作成」ダイアログで、「プロジェクト名」フィールドに「FulfillmentESB」と入力します。 他のフィールドについては、デフォルトをそのまま使用します。
図4-3 FulfillmentESBプロジェクトに関する「ESBプロジェクトの作成」ダイアログ

「OK」をクリックします。
JDeveloperには、FulfillmentESB.esbファイル用の空白ページが表示されます。 アプリケーション・ナビゲータでは、このファイルは、「FulfillmentESB」→「リソース」の下に表示されます。
ESBプロジェクトの場合、すべてのESBアクティビティは1つのシステムに属します。 JDeveloperでは、アクティビティがDefaultSystemというシステムにデフォルトで配置されます。
ESBプロジェクトの保守を容易にするために、新規システムを作成して、プロジェクト内のESBアクティビティがそのシステムに属すように設定できます。 実行時は、ESB Consoleでプロジェクトを管理するときに、システム内のアクティビティに対してプロパティを構成できます。
システムを作成しない場合、ESB Consoleでは、すべてのアクティビティがDefaultSystemの下に表示されます。
FulfillmentESBプロジェクトの場合は、Fulfillmentというシステムを作成し、FulfillmentESBプロジェクト内のすべてのアクティビティがこのシステムに属すように設定します。 第9章で説明されているOrderBookingESBプロジェクトにも独自のシステムがあります。
空白のFulfillmentESB.esbページで、ページの上部にある「システム/グループの作成」アイコンをクリックします。
図4-5 FulfillmentESB.esbページの上部にある「システム/グループの作成」アイコン
「ESBシステムまたはサービス・グループの作成」ダイアログで、次の操作を実行します。
システム: このオプションを選択します。
名前: 「Fulfillment」と入力します。
説明: 空白のままにするか、簡単な説明を入力します。
図4-6 Fulfillmentシステムに関する「ESBシステムまたはサービス・グループの作成」ダイアログ

「OK」をクリックします。 アプリケーション・ナビゲータで、「Fulfillment.esbsys」ファイルが、「FulfillmentESB」→「リソース」の下に表示されていることを確認します。
OrderFulfillmentルーティング・サービスは、リクエストを次の2つの場所にルーティングします。
Shipment: 別のルーティング・サービスです。
FulfillmentBatch: メッセージをJava Message Service(JMS)に送信します。
OrderFulfillmentルーティング・サービスを作成する手順は、次のとおりです。
次のファイルを、soademo_101310_prod.zipファイルからSOADEMO¥FulfillmentESBディレクトリにコピーします。
OrderBookingPO.xsd
zipファイルでは、このファイルはFulfillmentESBディレクトリにあります。
このファイルは、OrderFulfillmentルーティング・サービスに必要です。
JDeveloperにコンポーネント・パレットが表示されていない場合は、「表示」→「コンポーネント・パレット」の順に選択して表示します。
コンポーネント・パレットのドロップダウンから、「ESBサービス」を選択します。
コンポーネント・パレットから「ルーティング・サービス」アイコンをドラッグして、FulfillmentESBページの任意の場所にドロップします。
「ルーティング・サービスの作成」ダイアログで、次の操作を実行します。
名前: 「OrderFulfillment」と入力します。
システム/グループ: 「Fulfillment」に設定します。 「Fulfillment」に設定されていない場合は、懐中電灯アイコンをクリックして「ESBサービス・グループ・ブラウザ」ダイアログを表示します。 このダイアログで「Fulfillment」を選択し、「OK」をクリックします。
スキーマからWSDLを生成: このオプションを選択します。
スキーマの場所: 「参照」をクリックして、「タイプの選択」ダイアログを表示します。 このダイアログで、「プロジェクトのスキーマ・ファイル」→「OrderBookingPO.xsd」→「PurchaseOrder」の順に選択します。
図4-8 OrderFulfillmentルーティング・サービスに関する「タイプの選択」ダイアログ

「タイプの選択」ダイアログで、「OK」をクリックします。
スキーマ要素: 「PurchaseOrder」を選択します。
操作名: 「execute」と入力します。
ネームスペース: 「http://www.globalcompany.com/ns/Fulfillment」と入力します。
「ルーティング・サービスの作成」ダイアログが次のように表示されていることを確認します。
図4-9 OrderFulfillmentルーティング・サービスに関する「ルーティング・サービスの作成」ダイアログ

「ルーティング・サービスの作成」ダイアログで、「OK」をクリックします。
JDeveloperで、このルーティング・サービス・インスタンスが次のように表示されていることを確認します。
JDeveloperによって、FulfillmentESBディレクトリに次のファイルが作成されています。
Fulfillment_OrderFulfillment.esbsvc: このファイルには、OrderFulfillmentルーティング・サービスが定義されています。 JDeveloperによって、ファイル名の前にシステム名の接頭辞が付加されます。
Fulfillment_OrderFulfillment.wsdl: このWSDLファイルは、OrderFulfillmentルーティング・サービス用です。
Shipmentルーティング・サービスは、リクエストをFedexShipmentデータベース・アダプタまたはUSPSshipmentファイル・アダプタのいずれかにルーティングします。 このShipmentルーティング・サービスに、$500以上の注文はFedexShipmentにルーティングし、$500未満の注文はUSPSshipmentにルーティングするフィルタ・ルールを定義します。
Shipmentルーティング・サービスを作成する手順は、次のとおりです。
コンポーネント・パレットから「ルーティング・サービス」アイコンをドラッグして、FulfillmentESBページの任意の場所にドロップします。
「ルーティング・サービスの作成」ダイアログで、次の操作を実行します。
名前: 「Shipment」と入力します。
システム/グループ: 「Fulfillment」に設定されていることを確認します。 設定されていない場合は、懐中電灯アイコンをクリックして変更します。
スキーマからWSDLを生成: このオプションを選択します。
スキーマの場所: 「参照」をクリックして、「タイプの選択」ダイアログを表示します。 このダイアログで、「プロジェクトのスキーマ・ファイル」→「OrderBookingPO.xsd」→「PurchaseOrder」の順に選択します。
「タイプの選択」ダイアログで、「OK」をクリックします。
スキーマ要素: 「PurchaseOrder」を選択します。
操作名: 「execute」と入力します。
ネームスペース: 「http://www.globalcompany.com/ns/shipment」と入力します。
「ルーティング・サービスの作成」ダイアログが次のように表示されていることを確認します。
図4-12 Shipmentルーティング・サービスに関する「ルーティング・サービスの作成」ダイアログ

「ルーティング・サービスの作成」ダイアログで、「OK」をクリックします。
JDeveloperで、2つのルーティング・サービスが次のように表示されていることを確認します。
図4-13 OrderFulfillmentおよびShipmentルーティング・サービスが表示されたJDeveloper

JDeveloperによって、FulfillmentESBディレクトリに次のファイルが作成されています。
Fulfillment_Shipment.esbsvc: このファイルには、Shipmentルーティング・サービスが定義されています。 JDeveloperによって、ファイル名の前にシステム名の接頭辞が付加されます。
Fulfillment_Shipment.wsdl: このWSDLファイルは、Shipmentルーティング・サービス用です。
USPSShipmentサービスは、Shipmentルーティング・サービスのターゲットの1つです。 Shipmentルーティング・サービスからUSPSShipmentサービスに注文が送信されると、USPSShipmentサービスは、その注文情報をC:¥tempディレクトリのフラット・ファイルに書き込みます。
USPSShipmentサービスを作成する手順は、次のとおりです。
次のファイルを、soademo_101310_prod.zipファイルからFulfillmentESBディレクトリにコピーします。
USPSShipment.xsd
zipファイルでは、このファイルはFulfillmentESBディレクトリにあります。
コンポーネント・パレットで、ドロップダウンから「アダプタ・サービス」を選択します。
コンポーネント・パレットから「ファイル・アダプタ」アイコンをドラッグして、FulfillmentESBページの任意の場所にドロップします。
「ファイル・アダプタ・サービスの作成」ダイアログで、次の操作を実行します。
名前: 「USPSShipment」と入力します。
システム/グループ: 「Fulfillment」に設定されていることを確認します。 設定されていない場合は、懐中電灯アイコンをクリックして変更します。
WSDLファイル: 「アダプタ・サービスのWSDLの構成」アイコン(左側にあるアイコン)をクリックします。アダプタ構成ウィザードが起動します。
このウィザードのようこそページで、「次へ」をクリックします。
ステップ1、サービス名:
サービス名: 「USPSShipment」と入力します。
「次へ」をクリックします。
ステップ2、操作:
操作タイプ: 「Write File」を選択します。
操作名: 「Write」と表示されていることを確認します。
「次へ」をクリックします。
ステップ3、ファイル構成:
発信ファイルのディレクトリ(物理パス): アダプタによるファイルの書込先ディレクトリを入力します。 たとえば、「C:¥temp」と入力できます。
|
注意: このディレクトリは、JDeveloperを実行しているマシンではなく、Oracle Application Serverを実行しているマシン上にあります。 |
ファイル・ネーミング規則(po_%SEQ%.txt): ファイル名の設定方法を指定します。 「shipment_%SEQ%.txt」と入力します。 %SEQ%は、ファイル名が順に番号付けされることを示しています。
メッセージ数の到達: このフィールドは1のままでかまいません。これは、各注文が別々のファイルに書き込まれることを意味します。
「次へ」をクリックします。
ステップ4、メッセージ:
ネイティブ・フォーマット変換は不要(スキーマを不透明(Opaque)にする): このオプションは選択しないでください。
スキーマの場所: 「参照」をクリックします。 「タイプの選択」で、「プロジェクトのスキーマ・ファイル」→「USPSShipment.xsd」→「shipment」の順に選択します。
「タイプの選択」で、「OK」をクリックします。
スキーマ要素: 「shipment」に設定されていることを確認します。
「次へ」をクリックします。
終了ページで、「終了」をクリックします。
ウィザードによって、FulfillmentESBディレクトリに次のファイルが作成されます。
USPSShipment.wsdl: このファイルには、ウィザードで指定した情報が格納されます。
fileAdapterOutboundHeader.wsdl: このファイルには、ファイルに書き込むための汎用情報が格納されます。
「ファイル・アダプタ・サービスの作成」ダイアログが次のように表示されていることを確認します。 JDeveloperによって、「ポート・タイプ」には「Write_ptt」が自動的に表示されます。
図4-19 USPSShipmentファイル・アダプタ・サービスに関する「ファイル・アダプタ・サービスの作成」ダイアログ

「ファイル・アダプタ・サービスの作成」ダイアログで、「OK」をクリックします。
JDeveloperで、2つのルーティング・サービスと1つのファイル・アダプタ・サービスが次のように表示されていることを確認します。
図4-20 OrderFulfillmentおよびShipmentルーティング・サービスとUSPSShipmentファイル・アダプタ・サービスが表示されたJDeveloper

FedexShipmentサービスはデータベース・アダプタです。 Shipmentルーティング・サービスからFedexShipmentアダプタに注文がルーティングされると、FedexShipmentアダプタは、その注文情報をSOADEMOスキーマ内のFEDEXSHIPMENT表に書き込みます。
FedexShipmentアダプタを作成する手順は、次のとおりです。
次のファイルを、soademo_101310_prod.zipファイルからFulfillmentESBディレクトリにコピーします。
FedexShipment_table.xsd
zipファイルでは、このファイルはFulfillmentESBディレクトリにあります。
コンポーネント・パレットで、ドロップダウンから「アダプタ・サービス」を選択します。
コンポーネント・パレットから「データベース・アダプタ」アイコンをドラッグして、FulfillmentESBページの任意の場所にドロップします。
「データベース・アダプタ・サービスの作成」ダイアログで、次の操作を実行します。
名前: 「FedexShipment」と入力します。
システム/グループ: 「Fulfillment」に設定されていることを確認します。 設定されていない場合は、懐中電灯アイコンをクリックして変更します。
WSDLファイル: 「アダプタ・サービスのWSDLの構成」アイコン(左側にあるアイコン)をクリックします。アダプタ構成ウィザードが起動します。
このウィザードのようこそページで、「次へ」をクリックします。
ステップ1、サービス名:
サービス名: 「FedexShipment」と入力します。
「次へ」をクリックします。
ステップ2、サービス接続:
接続: SOADEMOスキーマに対するデータベース接続を選択します。
JNDI名: 「eis/DB/soademo」と入力します。 これは、Oracle Application Serverでコネクション・ファクトリを作成したときに指定したJNDI位置です(第2.6.4項「データベース・アダプタのコネクション・ファクトリの作成」を参照)。
「次へ」をクリックします。
ステップ3、操作タイプ:
「表に対して操作を実行」を選択し、「挿入のみ」を選択します。 SOA Order Bookingアプリケーションで実行する必要があるのは、表の行の挿入のみです。
「次へ」をクリックします。
ステップ4の表の選択ページで、「表のインポート」をクリックします。
この「表のインポート」ダイアログで、「問合せ」をクリックします。
「FEDEXSHIPMENT」を選択し、右矢印ボタンをクリックして「選択済」ボックスに移動します。 FEDEXSHIPMENT表は、データベース・アダプタの書込み先の表です。
「表のインポート」ダイアログで、「OK」をクリックします。 ステップ4の表の選択ページは、次のように表示されます。
「SOADEMO.FEDEXSHIPMENT」表を選択し、「次へ」をクリックします。
ステップ5のリレーションシップ・ページで、「次へ」をクリックします。
終了ページで、「終了」をクリックします。
ウィザードによって、FulfillmentESBディレクトリに次のファイルが作成されます。
DBAdapterOutboundHeader.wsdl: このファイルには、データベースに接続するための汎用情報が格納されます。
FedexShipment.wsdl: このファイルには、ウィザードで指定した情報が格納されます。
src¥*
database¥*
toplink¥*
「データベース・アダプタ・サービスの作成」ダイアログは、次のように表示されます。
図4-27 FedexShipmentデータベース・アダプタ・サービスに関する「データベース・アダプタ・サービスの作成」ダイアログ

「データベース・アダプタ・サービスの作成」ダイアログで、「OK」をクリックします。
JDeveloperで、2つのルーティング・サービス、1つのファイル・アダプタ・サービス、および1つのデータベース・アダプタ・サービスが表示されていることを確認します。
図4-28 OrderFulfillmentおよびShipmentルーティング・サービス、USPSShipmentファイル・アダプタ・サービス、およびFedexShipmentデータベース・アダプタ・サービスが表示されたJDeveloper

OrderFulfillmentルーティング・サービスは、すべての注文をShipmentルーティング・サービスとFulfillmentBatchアダプタにルーティングします。 FulfillmentBatchアダプタは、注文情報をJMSサーバーに送信します。
FulfillmentBatch JMSアダプタを作成する手順は、次のとおりです。
コンポーネント・パレットで、ドロップダウンから「アダプタ・サービス」を選択します。
コンポーネント・パレットから「JMSアダプタ」アイコンをドラッグして、FulfillmentESBページの任意の場所にドロップします。
「JMSアダプタ・サービスの作成」ダイアログで、次の操作を実行します。
名前: 「FulfillmentBatch」と入力します。
システム/グループ: 「Fulfillment」に設定されていることを確認します。 設定されていない場合は、懐中電灯アイコンをクリックして変更します。
WSDLファイル: 「アダプタ・サービスのWSDLの構成」アイコン(左側にあるアイコン)をクリックします。アダプタ構成ウィザードが起動します。
このウィザードのようこそページで、「次へ」をクリックします。
ステップ1、サービス名:
サービス名: 「FulfillmentBatch」と入力します。
「次へ」をクリックします。
ステップ2、JMSプロバイダ:
「Oracle Enterprise Messaging Service (OEMS)」を選択し、ドロップダウンから「Memory/File」を選択します。
「次へ」をクリックします。
ステップ3、サービス接続:
「接続」ドロップダウンから、Oracle Application Serverへの接続を選択します。
「次へ」をクリックします。
ステップ4、操作:
操作タイプ: 「メッセージ発行」を選択します。
操作名: 「sendMessage」と入力します。
「次へ」をクリックします。
ステップ5の発行操作のパラメータ・ページで、「参照」をクリックします。 「接続先の選択」ダイアログが表示されます。 このダイアログで「demoQueue (queue)」を選択し、「OK」をクリックします。
ステップ5の他の値は自動的に表示されます。 これらの値はそのまま使用できます。
「次へ」をクリックします。
ステップ6、メッセージ:
ネイティブ・フォーマット変換は不要(スキーマを不透明(Opaque)にする): このオプションは選択しないでください。
スキーマの場所: 「参照」をクリックして、「タイプの選択」を表示します。 「プロジェクトのスキーマ・ファイル」→「OrderBookingPO.xsd」→「PurchaseOrder」の順に選択します。
図4-35 FulfillmentBatch JMSアダプタ・サービスに関する「タイプの選択」

「タイプの選択」で、「OK」をクリックします。
スキーマ要素: 「PurchaseOrder」を選択します。
「次へ」をクリックします。
終了ページで、「終了」をクリックします。
ウィザードによって、FulfillmentESBディレクトリに次のファイルが作成されています。
jmsAdapterOutboundHeader.wsdl
FulfillmentBatch.wsdl
「JMSアダプタ・サービスの作成」ダイアログは、次のように表示されます。
図4-37 FulfillmentBatch JMSアダプタ・サービスに関する「JMSアダプタ・サービスの作成」ダイアログ

「JMSアダプタ・サービスの作成」ダイアログで、「OK」をクリックします。
JDeveloperで、2つのルーティング・サービス、1つのファイル・アダプタ・サービス、1つのデータベース・アダプタ・サービス、および1つのJMSアダプタ・サービスが表示されていることを確認します。
図4-38 FulfillmentESBプロジェクトの全サービスが表示されたJDeveloper

注文情報をあるサービスから別のサービスにルーティングするには、ルーティング・ルールを設定します。 ルーティング・ルールを使用すると、フィルタおよびトランスフォーメーションを定義できます。 フィルタでは、サービスが注文を処理する条件を定義でき、トランスフォーメーションでは、ターゲット・サービスがデータを適切に処理できるようにデータをマップできます。
FulfillmentESBプロジェクトの場合は、次のサービス間のルーティング・ルールを作成します。
OrderFulfillmentルーティング・サービスは、注文をShipmentとFulfillmentBatchの2つの場所にルーティングします。
OrderFulfillmentとShipmentの間のルーティング・ルールを作成する手順は、次のとおりです。
上部のアイコン・セクションにある「OrderFulfillment」をダブルクリックします。 Fulfillment_OrderFulfillment.esbsvcファイル用のページが表示されます。
図4-39 Fulfillment_OrderFulfillmentルーティング・サービスの定義

「ルーティング・ルール」セクションで、「+」をクリックしてセクションを開きます。
緑色の「+」アイコンをクリックしてルーティング・ルートを追加します。 「ターゲット・サービス操作の参照」ダイアログが表示されます。
緑色の「+」アイコンを表示するには、右にスクロールする必要がある場合があります。
「ターゲット・サービス操作の参照」ダイアログで、「プロジェクトのサービス」→「Fulfillment」→「Shipment」→「execute」の順に選択します。
「ターゲット・サービス操作の参照」ダイアログで、「OK」をクリックします。
ルーティング・ルールの領域は、次のように表示されます。
「ファイル」→「保存」の順に選択して、作業内容を保存します。
このルーティング・ルールには、フィルタおよびトランスフォーメーションはありません。 OrderFulfillmentルーティング・サービスは、すべての注文をShipmentルーティング・サービスにルーティングします。 データが変換されることはありません。
JDeveloperで「FulfillmentESB.esb」タブをクリックします。 OrderFulfillmentからShipmentへの矢印が表示されていることを確認します。
図4-42 OrderFulfillmentからShipmentへのルーティングが表示されたJDeveloper

OrderFulfillmentルーティング・サービスは、注文をShipmentとFulfillmentBatch(JMSアダプタ・サービス)の2つの場所にルーティングします。
OrderFulfillmentからFulfillmentBatchへのルーティング・ルールを作成する手順は、次のとおりです。
上部のアイコン・セクションにある「OrderFulfillment」をダブルクリックします。 Fulfillment_OrderFulfillment.esbsvcファイル用のページが表示されます。
「ルーティング・ルール」セクションで、「+」をクリックしてセクションを開きます。 前述の項(第4.9.1項「OrderFulfillmentとShipmentの間」)で作成したルールが表示されていることを確認します。
緑色の「+」アイコンをクリックして別のルーティング・ルートを追加します。 「+」アイコンを表示するには、右にスクロールする必要がある場合があります。
「ターゲット・サービス操作の参照」ダイアログで、「プロジェクトのサービス」→「Fulfillment」→「FulfillmentBatch」→「sendMessage」の順に選択します。
「ターゲット・サービス操作の参照」ダイアログで、「OK」をクリックします。
ルーティング・ルールの領域には、次の2つのルールが表示されます。
「ファイル」→「保存」の順に選択して、作業内容を保存します。
JDeveloperで「FulfillmentESB.esb」タブをクリックします。 OrderFulfillmentからShipmentへの矢印と、OrderFulfillmentからFulfillmentBatchへの矢印の2つの矢印が表示されていることを確認します。
図4-46 OrderFulfillmentからShipmentおよびJMSアダプタへのルーティングが表示されたJDeveloper

Shipmentルーティング・サービスは、$500未満の注文はUSPSShipmentファイル・アダプタに、$500以上の注文はFedexShipmentデータベース・アダプタにルーティングします。
この項では、USPSShipmentのルーティング・ルールを示します。 このルーティング・ルールでは、フィルタを使用して$500ルールが設定され、トランスフォーメーションを使用して、USPSShipmentに渡される情報が制御されます。 USPSShipmentはファイル・アダプタ・サービスであるため、情報はC:¥tempディレクトリ内のファイルに書き込まれます。
ShipmentからUSPSShipmentへのルーティング・ルールを作成する手順は、次のとおりです。
上部のアイコン・セクションにある「Shipment」をダブルクリックします。 Fulfillment_Shipment.esbsvcファイル用のページが表示されます。
「ルーティング・ルール」セクションで、「+」をクリックしてセクションを開きます。
緑色の「+」アイコンをクリックしてルーティング・ルートを追加します。 「+」アイコンを表示するには、右にスクロールする必要がある場合があります。
「ターゲット・サービス操作の参照」ダイアログで、「プロジェクトのサービス」→「Fulfillment」→「USPSShipment」→「Write」の順に選択します。
「ターゲット・サービス操作の参照」ダイアログで、「OK」をクリックします。
ルーティング・ルールの領域は、次のように表示されます。
「ファイル」→「保存」の順に選択して、作業内容を保存します。
JDeveloperで「FulfillmentESB.esb」タブをクリックします。 ShipmentからUSPSShipmentへの矢印が表示されていることを確認します。
図4-49 ShipmentからUSPSShipmentへのルーティングが表示されたJDeveloper

$500未満の注文のみがUSPSShipmentに送信されるようにフィルタを作成します。
上部のアイコン・セクションにある「Shipment」をダブルクリックして、Fulfillment_Shipment.esbsvcファイル用のページを表示します。
Fulfillment_Shipment.esbsvcファイル用のページで、ルーティング・ルール領域のフィルタ・アイコンをクリックします。 「式ビルダー」ダイアログが表示されます。
「式ビルダー」ダイアログの「WSDLメッセージ」ボックスで、「Purchase Order_request」→「PurchaseOrder」→「inp1:PurchaseOrder」→「inp1:OrderInfo」→「inp1:OrderPrice」の順に選択します。
「コンテンツのプレビュー」ボックスに、パス「/inp1:PurchaseOrder/inp1:OrderInfo/inp1:OrderPrice」が表示されます。
「式に挿入」をクリックします。 パスが、ダイアログの上部の「式」ボックスに表示されます。
「式」ボックスで、パスに「< 500」を追加します。これで、この「式」ボックスは「/inp1:PurchaseOrder/inp1:OrderInfo/inp1:OrderPrice < 500」となります。
「式ビルダー」で、「OK」をクリックします。
「ファイル」→「保存」の順に選択して、作業内容を保存します。
USPSShipmentファイル・アダプタによって適切な情報が適切なフィールドに取得されるように、トランスフォーメーションを作成します。
「ルーティング・ルール」領域のトランスフォーメーション・アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログで、「新規マッパー・ファイルの作成」を選択し、ファイル名として「PurchaseOrder_To_USPSshipment.xsl」と入力します。
「OK」をクリックします。 データ・マッパーが起動します。
ソース(左)側で、「inp1:ShipTo」→「inp1:Name」、および「inp1:ShipTo」→「inp1:Address」の順に開きます。
「inp1:First」をクリックして「imp1:fname」までドラッグします。
「inp1:Last」をクリックして「imp1:lname」までドラッグします。
First/fnameとLast/lnameの各ペアに対して1つずつ、2つの線が表示されていることを確認します。
図4-53 First/fnameおよびLast/lnameに対するトランスフォーメーションが表示されたデータ・マッパー

次のペアを接続するように、各項目をクリックしてドラッグします。
inp1:Streetからimp1:address
inp1:Cityからimp1:city
inp1:Stateからimp1:state
inp1:Zipからimp1:zipcode
inp1:Countryからimp1:country
コンポーネント・パレットのドロップダウンから、「Conversion Functions」を選択します。 次のステップではstring関数が必要となります。
ステップgでリストした各ペアに対して、コンポーネント・パレットからstring関数をドラッグして、それぞれの線の上にドロップします。 ダイアグラムが次のように表示されることを確認します。
「ファイル」→「保存」の順に選択して、作業内容を保存します。
JDeveloperで「Fulfillment_Shipment.esbsvc」タブをクリックします。 「ルーティング・ルール」領域のトランスフォーメーション・セクションに、トランスフォーメーション・ファイルの名前が表示されていることを確認します。
図4-55 フィルタ情報およびトランスフォーメーション・ファイル名が表示されたFulfillment_Shipment.esbsvc

「ファイル」→「保存」の順に選択して、Fulfillment_Shipment.esbsvcを保存します。
「FulfillmentESB.esb」タブをクリックすると、Shipmentルーティング・サービスのフィルタ・アイコンとトランスフォーメーション・アイコンが、OrderFulfillmentルーティング・サービスのアイコンとは異なり、グレー表示されていないことを確認できます。
Shipmentルーティング・サービスは、$500未満の注文はUSPSShipmentファイル・アダプタに、$500以上の注文はFedexShipmentデータベース・アダプタにルーティングします。
この項では、FedexShipmentのルーティング・ルールを示します。 このルーティング・ルールでは、フィルタを使用して$500ルールが設定され、トランスフォーメーションを使用して、FedexShipmentに渡される情報が制御されます。 FedexShipmentはデータベース・アダプタ・サービスであるため、情報はSOADEMOスキーマ内のFEDEXSHIPMENT表に書き込まれます。
ShipmentからFedexShipmentへのルーティング・ルールを作成する手順は、次のとおりです。
「Shipment」をダブルクリックするか、Fulfillment_Shipment.esbsvcのタブ(開いている場合)をクリックします。 Fulfillment_Shipment.esbsvcファイル用のページが表示されます。
「ルーティング・ルール」セクションで、「+」をクリックしてセクションを開きます。
緑色の「+」アイコンをクリックして別のルーティング・ルートを追加します。 「+」アイコンを表示するには、右にスクロールする必要がある場合があります。
「ターゲット・サービス操作の参照」ダイアログで、「プロジェクトのサービス」→「Fulfillment」→「FedexShipment」→「insert」の順に選択します。
「ターゲット・サービス操作の参照」ダイアログで、「OK」をクリックします。
ルーティング・ルールの領域は、次のように表示されます。
「ファイル」→「保存」の順に選択して、Fulfillment_Shipment.esbsvcを保存します。
JDeveloperで「FulfillmentESB.esb」タブをクリックします。 ShipmentからUSPSShipmentへの矢印と、ShipmentからFedexShipmentへの矢印の2つの矢印が表示されていることを確認します。
図4-58 ShipmentからUSPSShipmentおよびFedexShipmentへのルーティングが表示されたJDeveloper

$500以上の注文をFedexShipmentに送信するフィルタを作成します。
「Shipment」をダブルクリックして、Fulfillment_Shipment.esbsvcファイル用のページを表示します。
Fulfillment_Shipment.esbsvcファイル用のページで、ルーティング・ルール領域のFedexShipmentルールに対するフィルタ・アイコンをクリックします。 「式ビルダー」ダイアログが表示されます。
「式ビルダー」ダイアログの「WSDLメッセージ」ボックスで、「Purchase Order_request」→「PurchaseOrder」→「inp1:PurchaseOrder」→「inp1:OrderInfo」→「inp1:OrderPrice」の順に選択します。
「コンテンツのプレビュー」ボックスに、パス「/inp1:PurchaseOrder/inp1:OrderInfo/inp1:OrderPrice」が表示されます。
「式に挿入」をクリックします。 パスが、ダイアログの上部の「式」ボックスに表示されます。
「式」ボックスで、パスに「>= 500」を追加します。これで、この「式」ボックスは「/inp1:PurchaseOrder/inp1:OrderInfo/inp1:OrderPrice >= 500」となります。
「式ビルダー」で、「OK」をクリックします。
「ファイル」→「保存」の順に選択して、作業内容を保存します。
FedexShipmentデータベース・アダプタによって適切な情報が適切なフィールドに取得されるように、トランスフォーメーションを作成します。
「ルーティング・ルール」領域のトランスフォーメーション・アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログで、「新規マッパー・ファイルの作成」を選択し、ファイル名として「PurchaseOrder_To_FedexshipmentCollection.xsl」と入力します。
「OK」をクリックします。 データ・マッパーが起動します。
ソース(左)側で、「inp1:ShipTo」→「inp1:Name」、および「inp1:ShipTo」→「inp1:Address」の順に開きます。
ターゲット(右)側で、「top:FedexshipmentCollection」→「top:Fedexshipment」の順に開きます。
次のペアを接続するように、各項目をクリックしてドラッグします。
inp1:IDからtop:orderid
inp1:Firstからtop:fname
inp1:Lastからtop:lname
inp1:Streetからtop:street
inp1:Cityからtop:city
inp1:Stateからtop:state
inp1:Zipからtop:zipcode
図4-61 ShipmentからFedexShipmentへのトランスフォーメーションが表示されたデータ・マッパー

「ファイル」→「保存」の順に選択して、PurchaseOrder_To_FedexshipmentCollection.xslを保存します。
JDeveloperで「Fulfillment_Shipment.esbsvc」タブをクリックします。 「ルーティング・ルール」領域のトランスフォーメーション・セクションに、トランスフォーメーション・ファイルの名前が表示されていることを確認します。
図4-62 フィルタ情報およびトランスフォーメーション・ファイル名が表示されたFulfillment_Shipment.esbsvc

「ファイル」→「保存」の順に選択して、Fulfillment_Shipment.esbsvcを保存します。
「FulfillmentESB.esb」タブをクリックすると、Shipmentルーティング・サービスのアイコン内にアイコンの行が2つあり、これらのアイコンがグレー表示されていないことを確認できます。
アプリケーション・ナビゲータでFulfillmentESBのファイルを参照し、すべてのファイルが保存されていることを確認します。 イタリック体で表示されているファイルがある場合は、そのファイルを選択して保存します。
アプリケーション・ナビゲータで、「FulfillmentESB」プロジェクトを右クリックし、「ESBに登録」→「SoademoIntegServer」の順に選択します。SoademoIntegServerは、統合サーバーへの接続名です。 登録が完了すると、確認ダイアログが表示されます。
FulfillmentESBプロジェクトで作成したサービスは、ESB Consoleに表示できます。 ESB Consoleを表示するには、ブラウザで次に示すESB ConsoleのURLを入力します。
http://host:port/esb/esb/EsbConsole.html
hostは、Oracle Application Serverを実行しているマシンの名前を、portは、Oracle HTTP ServerまたはOC4JがリスニングしているHTTPポートを指定します。
oc4jadminユーザーでログインします。
サービスは、第4.3項「Fulfillmentという名前のシステムの作成」で作成したシステムの名前である「Fulfillment」の下にグループ化されます。