この章では、ルーティング・サービスおよびルーティング・ルールについて説明します。
項目は次のとおりです。
ルーティング・サービスは、Enterprise Service Bus全体にわたって(開始から終了まで)メッセージを移動するための主要なコンポーネントです。Oracle JDeveloperには、ルーティング・サービスの作成を支援するツールが用意されています。
ルーティング・サービスを定義する主な構成要素は、次のとおりです。
WSDLファイル
ターゲット・サービスおよび操作
トランスフォーメーション定義
フィルタ式
実行タイプ(同期または非同期)
ルーティング・サービスがメッセージを受け入れる送信元ESBシステム
WSDLは、他のサービス(Enterprise Service Bus内部または外部)がルーティング・サービスを呼び出す方法を指定します。WSDL以外の項目は、ルーティング・ルールと呼ばれ、ターゲット・サービスにメッセージを送信する前に、ルーティング・サービスが各メッセージを送信する宛先、メッセージの送信方法、およびメッセージ構造に対する変更(ある場合)を判断します。
Oracle JDeveloperには、ルーティング・サービス用WSDLの作成やルーティング・ルールの定義を支援するツールが用意されています。
次の各項では、概念およびルーティング・サービスとルーティング・ルールの指定方法の概要について説明します。「ルーティング・サービスの作成および変更」には、これらのタスクを実行する手順が記載されています。
ルーティング・サービスを作成するには、ESBルーティング・サービスをコンポーネント・パレットから「設計」タブにドラッグ・アンド・ドロップします。図5-1に示すように、「設計」タブ内で右クリックし、「ESBサービスの作成」→「ルーティング・サービス」の順に選択してルーティング・サービスを作成することもできます。
ルーティング・サービスを作成すると、図5-2に示すようなダイアログ・ボックスが開きます。
図5-2に示すように、ルーティング・サービス用WSDLの作成には主に2つの方法があります。
既存のWSDLファイルと、そのWSDLに定義されているポート・タイプの1つを指定する方法
このオプションでは、既存のWSDLファイル(ローカル・ファイル・システムのファイルまたはOracle JDeveloper接続を介したファイル)を使用してルーティング・サービスを定義できます。指定したWSDLが解析され、ポート・タイプの選択肢がリストに表示されます。
既存のWSDLをそのルーティング・サービス用に編集する場合は、WSDLエディタ(Oracle JDeveloperなど)を使用して該当するWSDLを編集してから、このダイアログ・ボックスにWSDLを指定します。
スキーマ・ファイル(XSD)からWSDLを生成する方法
このオプションでは、既存のXSDファイルまたはネイティブ・ファイル・フォーマット(カンマ区切り(CSV)ファイル、固定長ファイル、Document Type Definition(DTD)ファイル、COBOLコピーブック・ファイルなど)のファイルを使用して、ルーティング・サービスを定義できます。
リクエスト、レスポンスおよびフォルト・メッセージ・スキーマには、同じスキーマ・ファイルまたは異なるスキーマ・ファイルを指定できます。これらのファイルは、Oracle JDeveloperによってWSDLの入力、出力およびフォルト要素に変換されます。最低でもリクエスト・メッセージのスキーマを指定する必要があります。また、レスポンスを指定しないと、フォルト・メッセージ・スキーマは指定できません。
さらに、操作とネームスペースを指定します。操作はWSDLファイルの操作要素に変換され、指定したネームスペースはWSDLファイルにTNSネームスペースとして定義されます。
操作要素には、操作に対する入力の定義方法が記述されます。
注意: フォルトが複数のWSDLはサポートされません。 |
「ルーティング・サービスの作成」ダイアログ・ボックスでの指定が完了すると、図5-1に示すように、「設計」タブにアイコンが追加されます。ルーティング・サービスの名前はアイコンの上部に表示されます。ルーティング・サービス操作の名前はその下に表示されます。疑問符付きの黄色い三角形は、このルーティング・サービスにルーティング・ルールが指定されていないことを意味します。ルーティング・サービスのアイコンをダブルクリックすると、図5-3に示すように「ルーティング・サービス」プロパティ・シートが表示されます。
サービスのWSDLファイルは、操作を追加または削除することで変更できます。Oracle JDeveloperには、WSDLファイルの変更に使用できるWSDLエディタが用意されています。WSDLエディタを開くには、「アプリケーション・ナビゲータ」でWSDLファイルをダブルクリックします。ファイルの変更後、図5-3のように「WSDLからの操作のリフレッシュ」アイコンを使用して、ルーティング・サービスをWSDLの変更内容と同期化できます。
注意: WSDLファイルには、操作の追加または削除以外の変更を行わないでください。たとえば、メッセージのスキーマ・タイプを変更すると、古いスキーマを予期しているルーティング・ルールでのトランスフォーメーションに失敗します。 |
「WSDLからの操作のリフレッシュ」アイコンをクリックすると、図5-4に示すような「WSDLのリフレッシュ」ダイアログが表示されます。
「WSDLファイル」フィールドの右にある「既存のWSDLを検索します。」アイコンをクリックし、WSDLファイルを選択します。図5-5に示すように、「WSDLのリフレッシュ」ダイアログが更新されます。
図5-6に示す「ルーティング・サービス」プロパティ・シートの「プロパティ」パネルを使用して、ルーティング・サービスのプロパティを追加および変更できます。たとえば、ルーティング・ルールの優先度を指定できます。優先度により、ルーティング・ルールに関するメッセージの処理順序が決まります。ルーティング・ルールのpriority
プロパティには、次の方法でアクセスできます。
OperationName.priority
例: ReadCustomerData.priority
優先度値は0から9までです。優先度9のメッセージは、デキュー時に最優先されます。デフォルトの優先度は4に設定されます。
ルーティング・サービスのプロパティを指定する手順は、次のとおりです。
「プロパティ」の横にある+記号をクリックしてパネルを開きます。
右上の大きい緑色のプラス記号(+)をクリックします。
プロパティ名と値を指定できるように新規の1行が追加されます。
「名前」列でプロパティ名を指定します。
「値」フィールドでプロパティの値を指定します。
変更内容を保存します。
図5-7に、ルーティング・ルールの優先度の指定方法を示します。
ルーティング・サービスを作成し、そのルーティング・サービスからメッセージが送信されるターゲットを1つ以上作成した後は、そのターゲットに対するルーティング・ルールを指定できます。ルーティング・ルールは、設計時にOracle JDeveloperを使用して、または実行時にOracle ESB Controlを使用して指定できます。ルーティング・ルールを指定するインタフェースは、両方のインタフェースで類似しています。この項では、Oracle JDeveloperのスクリーン・キャプチャを使用します。
Oracle JDeveloperを使用してルーティング・ルールの指定ページにアクセスするには、ルーティング・ルールを指定するルーティング・サービスに対応する「設計」タブでアイコンをダブルクリックします。図5-8に示すように、プロパティ・ページには「ルーティング・ルール」ラベルが付いたセクションも含めて複数のセクションがあります。
図5-8に示すように、ルーティング・サービス操作の一番右側にある緑の+アイコンをクリックすると、ルーティング・ルールが作成され、サービス・ブラウザが起動します。ここで、この新しいルールに対してターゲット・サービスと操作を選択できます。「ルーティング・ルール」の左側にある小さい+アイコンをクリックすると、図5-9に示すようなフィールドが表示されます。
ルーティング・サービスの定義時に指定した操作には、その横に緑の矢印が表示されます。緑の矢印は、リクエスト・メッセージ・スキーマのみがルーティング・サービスに指定されたことを意味します。リクエスト、リプライおよびフォルトのメッセージ・スキーマが指定された場合は、図5-9に示すように3つの矢印が表示されます。フォルト・メッセージ・スキーマが未指定の場合、赤い矢印は表示されません。
図5-10に、「ルーティング・ルール」パネルのアイコンを示します。
次の各項では、ルーティング・ルールのオプションの概要について説明します。
注意: トランスフォーメーションを指定するには、その前に各ルーティング・ルールのターゲット・サービスおよび操作を指定する必要があります。サービス・ブラウザは新規ルールの作成時に起動されるため、ターゲットなしでルールが表示されるのは、ターゲット・サービスが削除された場合のみです。 |
ルーティング・サービスが受信したメッセージ・インスタンスの送信先サービス。これはターゲット・サービスと呼ばれます。
ターゲット・サービスが受信したメッセージ・インスタンスに対して実行される操作。
その後、フィルタ式を指定する場合は、各メッセージ・インスタンスのペイロードに基づいて、特定のメッセージ・インスタンスが特定のターゲット・サービスに送信されないようにできます。
各ルーティング・ルールには、ターゲット・サービスとターゲット操作を1つのみ指定できます。したがって、特定のターゲット・サービスに対して複数のターゲット操作を指定する場合は、各ターゲット・サービス操作に1つのルーティング・ルールを指定する必要があります。
たとえば、データ・アダプタ・サービスをターゲット・サービスとして指定し、メッセージ・ペイロードに従って、メッセージ・インスタンスに適用する操作が次のいずれかになるようにすると仮定します。
挿入
更新
削除
そのためには、3つのルーティング・ルール(操作ごとに1つのルール)を作成します。その後、フィルタ式を指定するときに、メッセージ・ペイロードに基づいて各メッセージ・インスタンスに適用するターゲット・サービスおよび操作を指定できます。
ターゲット操作フィールドの右の歯車アイコン(図5-9を参照)をクリックすると、「ターゲット・サービス操作の参照」ダイアログ・ボックス(図5-11を参照)が表示されます。
ESBプロジェクトを登録すると、「プロジェクトのサービス」および「ESBサーバー接続のサービス:」の下にサービスがリストされます。ターゲット・サービスを選択するときは、いずれも同じであるため、その一方を使用してターゲット・サービスおよび操作に移動できます。
プロジェクトのサービス
このブランチには、ローカルなOracle JDeveloperプロジェクトの全ESBシステムと、各ESBシステムのターゲット・サービスおよび操作がリストされます。図5-11では、たとえば、DefaultSystemというESBシステムからターゲット・サービスおよび操作を選択できます。
ESBサーバー接続のサービス:
このブランチには、ESBサーバー接続で定義されている全ESBシステムと、各ESBシステムのターゲット・サービスおよび操作がリストされます。「ESBサーバーへのESBプロジェクトおよびサービスの登録」を参照してください。
たとえば、ローカルのOracle JDeveloperプロジェクトでターゲット・サービスおよび操作を選択する場合は、「プロジェクトのサービス」の下の該当するESBシステムを開き、目的のサービスを開いて必要な操作を選択します。
ルーティング・ルールにターゲット・サービスを指定する手順は、「ルーティング・ルールの指定」を参照してください。
フィルタ式ルーティング・ルールを使用すると、ペイロードに基づいてESBサーバーでメッセージをフィルタリングできます。特定のメッセージ・インスタンスに対して式フィルタがTrueに評価されると、そのメッセージはルーティング・ルールに指定されているターゲット・サービスとターゲット操作の組合せには送信されません。
たとえば、本部からの新製品発売通知を3店舗(ニューヨーク、ヒューストン、サンフランシスコ)に送信すると仮定します。ただし、ニューヨーク店には、携帯型の製品系列に関する通知のみを送信します。
そのためには、メッセージをターゲット店舗に送信するサービスと操作の各組合せについてルーティング・ルールを定義します。さらに、ニューヨーク店にメッセージを送信するルーティング・ルールには、フィルタ式を指定します。
フィルタ式フィールドの右のアイコン(図5-9を参照)をクリックすると、「式ビルダー」ウィンドウ(図5-12を参照)が表示されます。
「式ビルダー」ウィンドウには、フィルタ式の設計を支援するコンポーネントやコントロールが含まれています。つまり、「式」フィールドに値を追加するには、「WSDLメッセージ」ナビゲーション・ツリーまたは「関数」パレットで、必要な値をダブルクリックします。WSDLメッセージ要素、関数および手動で入力したテキストの組合せを使用して、このウィンドウで、特定のルーティング・ルールに対してメッセージ・ペイロードをフィルタリングする式を作成します。
次に、「式ビルダー」ウィンドウの各フィールドについて説明します。
「式」フィールド
このフィールドにはフィルタ式を入力します。フィルタ式は、手動または「WSDLメッセージ」ナビゲーション・ツリーおよび「関数」パレットを使用して入力します。
このフィールドの右上部に表示されている各アイコンを使用して、式の検証、最後の編集の取消し、最後の編集の再実行、または「式」フィールド全体の消去を実行できます。
「WSDLメッセージ」ナビゲーション・ツリー
このフィールドには、ルーティング・サービスに対して定義されているメッセージのWSDLが表示されます。ナビゲーション・ツリーから要素を選択すると、その要素が「コンテンツのプレビュー」フィールドに表示され、要素の説明が「説明」フィールドに表示されます。たとえば、図5-19は、要素を選択して「式に挿入」をクリックしたときの「式ビルダー」ウィンドウの表示を示しています。
「関数」パレット
このリストを使用すると、様々な関数を選択して式に挿入できます。図5-13に示すように、関数を選択すると、その関数が「式」フィールドに追加されたときに、どのように表示されるかを示すプレビューが「コンテンツのプレビュー」フィールドに表示され、その関数の説明が「説明」フィールドに表示されます。
コンテンツのプレビュー
このフィールドには、「WSDLメッセージ」または「関数」パレットで選択した値が「式」フィールドに挿入されたときの表示状態が示されます。
説明
このフィールドには、「WSDLメッセージ」または「関数」パレットで選択した値の説明が表示されます。
フィルタ式の作成手順は、「ペイロードに基づいてメッセージをフィルタリングする式の使用」を参照してください。
トランスフォーメーション・マップを使用すると、データをXMLスキーマ間で変換できます。これによって、異なるスキーマを使用するアプリケーション間でのデータ交換が可能になります。
たとえば、インバウンド・アダプタ・サービスがファイル・システムからカンマ区切りファイルを受け取ると仮定します。ルーティング・サービスは、そのメッセージを受け取り、トランスフォーメーションを使用して、そのファイル構造をアウトバウンド・データベース・アダプタ・サービスが必要としている表構造に変換します。
ルーティング・サービス・プロパティ・ページの「ルーティング・ルール」パネルで、トランスフォーメーション・マップ・フィールドの右にあるトランスフォーメーション・マップ・アイコンをクリックすると、「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。このダイアログで、既存のマッパー・ファイル(xsl)を選択するか、データ・マッパー・ツールを使用して必要なトランスフォーメーションを実行する新規xslファイルを作成します。データ・マッパー・ツールの詳細は、第6章「XSLTデータ・マッパーおよびトランスフォーメーション」を参照してください。
ターゲット・サービスがメッセージを受け取るESBシステム(送信元)を指定できます。オプションは、任意のシステム、ローカル・システムのみ、またはターゲット・サービスが定義されているシステム以外のシステムです。「メッセージを受け入れる送信元ESBシステムの指定」を参照してください。
ルーティング・ルールではメッセージ・インスタンスを同期実行するか、非同期実行するかを選択できます。同期メッセージでは、即時にレスポンスが提供されます。非同期メッセージは、サービスでのクライアント・リクエストの処理に時間を要する可能性がある環境に便利です。また、非同期サービスは、同期サービスより信頼性の高い耐障害性に優れた拡張性のあるアーキテクチャを提供します。「同期または非同期実行の指定」を参照してください。
ルーティング・サービスのルーティング・ルールは、ルールを昇順または降順に順序付けることで、優先度を選択できます。優先度によって、メッセージを処理する際にルールが適用される順序が決まります。「ルーティング・ルールの優先度の指定」を参照してください。
ルーティング・サービスはOracle JDeveloperを使用して作成しますが、ルーティング・ルールはOracle JDeveloperまたはOracle ESB Controlを使用して作成および変更できます。
ここでは、次の項目について説明します。
ルーティング・サービスを作成するには、Oracle JDeveloperで「ルーティング・サービスの作成」ダイアログ・ボックスの指定を完了する必要があります。このダイアログ・ボックスにアクセスするには、次のいずれかの方法を使用します。
次の手順に従って「設計」タブを使用して図式的にアクセスする方法
「アプリケーション・ナビゲータ」で、ルーティング・サービスを作成するESBプロジェクトに移動し、「リソース」フォルダを開き、project-name.esbをダブルクリックします。ここでproject-nameは、ルーティング・サービスを追加するプロジェクトの名前です。
プロジェクトの「設計」タブが表示されます。
コンポーネント・パレットで下矢印をクリックし、ESBサービスを選択します(選択されていない場合)。
「ルーティング・サービス」を「設計」タブにドラッグ・アンド・ドロップします。
「ルーティング・サービスの作成」ダイアログ・ボックスが表示されます。
次の手順に従ってダイアログ・ボックスのみを使用する方法
ダイアログ・ボックスのみを使用してルーティング・サービスを作成する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、ルーティング・サービスを作成するESBプロジェクトを右クリックし、「新規」をクリックします。
「新規ギャラリ」ダイアログ・ボックスが表示されます。
「カテゴリ」パネルで、「Business Tier」を開き、「Web Services」をクリックします。
「項目」パネルで、「ESBルーティング・サービス」をクリックし、「OK」をクリックします。
「ルーティング・サービスの作成」ダイアログ・ボックスが表示されます。
「ルーティング・サービスの作成」ダイアログ・ボックスでは、次の各項に示すように、3種類の方法でルーティング・サービス用WSDLを指定できます。次の各項では、使用方法に応じて「ルーティング・サービスの作成」ダイアログ・ボックスの指定を完了する手順について説明します。
この方法では、ルーティング・サービス用に既存のWSDLを指定します。ファイルを指定すると、ファイルが解析されて定義済のスキーマ要素が判断され、ドロップダウン・リストの選択肢に表示されます。
「ルーティング・サービス」ダイアログ・ボックスが表示されていない場合は、「ルーティング・サービスの作成および変更」の手順に従ってダイアログ・ボックスを開きます。
「名前」フィールドに、ルーティング・サービスの名前を入力します。
指定する名前は、ルーティング・サービスを作成するプロジェクトの有効範囲内で一意であることが必要です。空白は使用できません。
「システム/グループ」フィールドの「参照」をクリックして「ESBサービス・グループ・ブラウザ」ダイアログ・ボックスを開き、ルーティング・サービスを追加するシステム(必要に応じてサービス・グループ)を選択し、「OK」をクリックします。
作成しているルーティング・サービスを格納するシステムまたはサービス・グループを新規作成するには、「ESBサービス・グループ・ブラウザ」ダイアログ・ボックスの上部の「新規作成」をクリックします。新規ESBシステムまたはサービス・グループの作成方法は、「ESBシステムおよびサービス・グループの作成」を参照してください。
「説明」フィールドに、必要に応じてルーティング・サービスの説明を入力します。このフィールドはオプションです。
「スキーマからWSDLを生成」を選択します。
このオプションには、「リクエスト」、「リプライ」および「フォルト」タブがあります。
「リクエスト」タブで「参照」をクリックし、「スキーマの場所」にアクセスします。
図5-14に示すように、「タイプ・チューザ」ダイアログ・ボックスが開き、WSDLを生成するために選択可能なスキーマ・ファイル(XSDファイル)が表示されます。「プロジェクトのスキーマ・ファイル」、「プロジェクトのWSDLファイル」および「ESB」のツリーを開き、スキーマを検索します。このルーティング・サービスで処理するメッセージ・インスタンスのXSDファイルのルート要素に移動します。要素を選択して「OK」をクリックします。
注意: ローカル・ファイル・システムのスキーマXSDファイルを使用する場合は、XSDファイルおよびそのファイルによってインポートされるXSDファイルすべてがJDeveloperのプロジェクト・ディレクトリに存在していることを確認してください。 |
スキーマXSDファイルまたはWSDLファイルは、「タイプ・チューザ」ダイアログ・ボックスの右上部に表示される「スキーマ・ファイルのインポート」または「WSDLのインポート」アイコンをクリックしてプロジェクトにインポートできます。ESBプロジェクトへのスキーマのインポートについては、「プロジェクトへのファイルのインポート」を参照してください。
「リクエスト」タブの「スキーマ要素」フィールドで、このルーティング・サービスで処理するメッセージのルート要素を選択します(選択されていない場合)。
「リプライ」タブに情報を入力する場合は、このタブに対して「リクエスト」タブの手順を繰り返します。
「フォルト」タブに情報を入力する場合は、このタブに対して「リクエスト」タブの手順を繰り返します。
「操作名」フィールドに、操作名を入力します。空白は使用できません。
例: executeQuery
「ネームスペース」フィールドに、ネームスペースを入力するか、現在の値をそのまま使用します。
例: http://oracle.com/esb/namespaces/DefaultSystem
「OK」をクリックします。
ルーティング・サービスが作成され、ESBプロジェクトの「設計」タブにアイコンが追加されます。
Oracle JDeveloperには、サンプル・ファイルおよびファイル構造について指定した詳細情報に基づいて、様々なファイル形式(CSVファイル、固定長ファイル、DTD、COBOLコピーブックなど)によるXSD表現の作成を支援するウィザードがあります。その後、そのXSDファイルからルーティング・サービス用WSDLを生成するようにOracle JDeveloperに指示できます。
この方法を使用するには、「ルーティング・サービスの作成」ダイアログ・ボックスで、次の手順に従ってください。
「ルーティング・サービス」ダイアログ・ボックスが表示されていない場合は、「ルーティング・サービスの作成および変更」の手順に従ってダイアログ・ボックスを開きます。
「サービス名」フィールドに、ルーティング・サービスの名前を入力します。
指定する名前は、ルーティング・サービスを作成するプロジェクトの有効範囲内で一意であることが必要です。空白は使用できません。
「システム/グループ」フィールドの「参照」をクリックして「ESBサービス・グループ・ブラウザ」ダイアログ・ボックスを開き、ルーティング・サービスを追加するシステム(必要に応じてサービス・グループ)を選択し、「OK」をクリックします。
「ESBサービス・グループ・ブラウザ」ダイアログ・ボックスの使用方法を確認するには、「ヘルプ」をクリックします。
「説明」フィールドに、必要に応じてルーティング・サービスの説明を入力します。このフィールドはオプションです。
「スキーマからWSDLを生成」を選択します。
このオプションには、「リクエスト」、「リプライ」および「フォルト」タブがあります。
「リクエスト」タブで、「ネイティブ・フォーマットのスキーマの定義」をクリックします。
ネイティブ・フォーマット・ファイル・ビルダー・ウィザードが開きます。
ウィザードの各ステップに従います。
ウィザードのページについて支援が必要な場合は、「ヘルプ」をクリックします。
「リクエスト」タブの「スキーマ要素」フィールドで、このルーティング・サービスで処理するメッセージのルート要素を選択します。
「リプライ」タブ
「フォルト」タブ
「操作名」
操作名に空白は使用できません。
「ネームスペース」
「OK」をクリックします。
ルーティング・サービスが作成され、ESBプロジェクトの「設計」タブにアイコンが追加されます。
この方法を使用してルーティング・サービス用WSDLを指定する場合は、既存のWSDLがローカル・ファイル・システムに存在している必要があります。ファイルを指定すると、ファイルが解析されて定義済のポート・タイプが判断され、ドロップダウン・リストの選択肢に表示されます。
この方法を使用するには、「ルーティング・サービスの作成」ダイアログ・ボックスで、次の手順に従ってください。
「ルーティング・サービス」ダイアログ・ボックスが表示されていない場合は、「ルーティング・サービスの作成および変更」の手順に従ってダイアログ・ボックスを開きます。
「サービス名」フィールドに、ルーティング・サービスの名前を入力します。
指定する名前は、ルーティング・サービスを作成するプロジェクトの有効範囲内で一意であることが必要です。空白は使用できません。
「システム/グループ」フィールドの「参照」をクリックして「ESBサービス・グループ・ブラウザ」ダイアログ・ボックスを開き、ルーティング・サービスを追加するシステム(必要に応じてサービス・グループ)を選択し、「OK」をクリックします。
「ESBサービス・グループ・ブラウザ」ダイアログ・ボックスの使用方法を確認するには、「ヘルプ」をクリックします。
「説明」フィールドに、必要に応じてルーティング・サービスの説明を入力します。このフィールドはオプションです。
「既存のWSDLの選択」を選択します。
「WSDLの位置」フィールドの右にあるアイコンをクリックします。
「オープン」ダイアログ・ボックスが表示されます。
「オープン」ダイアログ・ボックスで、既存のWSDLファイルに移動して「OK」をクリックします。(このダイアログ・ボックスについて支援が必要な場合は、「ヘルプ」をクリックしてください。)
「ポート・タイプ」フィールドで、下矢印をクリックし、ルーティング・サービスのポート・タイプを選択します。
「OK」をクリックします。
ルーティング・サービスの作成プロセスを完了すると、サービスを表すアイコンがプロジェクトの「設計」タブに表示されます。たとえば、図5-1を参照してください。「アプリケーション・ナビゲータ」では、プロジェクトの「リソース」フォルダに、拡張子がesbsvc
およびwsdl
のファイルが作成されます。esbsvc
ファイルは、ESBサービスの定義ファイルです。WSDLファイルは、このインスタンス・フローの入出力メッセージ、サポートされているクライアント・インタフェースと操作、およびその他の機能を定義します。
WSDLを指定してルーティング・サービスを定義した後は、ルーティング・サービスで処理されたメッセージに対して、次の宛先に届ける条件を判断するルールを指定できます。ルーティング・ルールは、Oracle JDeveloperのプロパティ・シートまたはOracle ESB Controlのプロパティ・シートを使用して定義できます。
Oracle JDeveloperの「ルーティング・ルール」プロパティ・シートにアクセスするには、次のいずれかの方法を使用します。Oracle ESB Controlの「ルーティング・ルール」プロパティ・シートへのアクセス方法は、「ルーティング・ルールの表示」を参照してください。
アプリケーション・ナビゲータからアクセスする方法
「アプリケーション・ナビゲータ」で、ESBプロジェクトを開き、次に「リソース」フォルダを開きます。
「リソース」フォルダで、ルーティング・ルールを指定するルーティング・サービスの名前をダブルクリックします。
プラス記号(+)をクリックして「ルーティング・ルール」情報を開きます。
「設計」タブからアクセスする方法
ルーティング・ルールを指定するルーティング・サービスを示すアイコンをダブルクリックします。
プラス記号(+)をクリックして「ルーティング・ルール」情報を開きます。
図5-8に示すように、「ルーティング・ルール」プロパティ・シートが表示されます。
図5-16に、「ルーティング・ルール」プロパティ・シートのアイコンを示します。
次の各項では、使用可能な各ルーティング・ルールとルールの指定方法について説明します。
ターゲット操作は、ルーティング・サービスを使用する上で指定する必要がある唯一のルーティング・ルールです。このルーティング・ルールは、メッセージを送信する必要がある次のサービス(ターゲット・サービスと呼ばれます)と、そのメッセージがターゲット・サービスに届いたときにメッセージに対して実行する操作をルーティング・サービスに指示します。
各ルーティング・サービスには、ターゲット・サービスとターゲット操作の複数の組合せを指定できます。また、リクエスト/リプライ・メッセージ・フローでは、リプライ・メッセージを別のターゲットに転送したり、メッセージ・フォルトが発生した場合のターゲット・サービスを指定できます。フォルトは、リクエスト側に送信可能な特別なリプライであることに注意してください。
ルーティング・ルールには、次のターゲット操作を指定できます。
1方向構成に対するターゲット操作の指定
ソース・サービスにリプライを戻すターゲット操作の指定
ソース・サービス以外にリプライを転送するターゲット操作の指定
フォルト・メッセージに対するターゲット操作の指定
注意: フォルトが複数のWSDLはサポートされません。 |
ターゲット・サービスおよび操作を指定する手順は、次のとおりです。
ルーティング・ルール情報を開いていない場合は、「ルーティング・ルールの指定」の説明に従ってルーティング・ルール情報を開きます。
緑の大きいプラス(+)ボタンをクリックします。
「ターゲット・サービス操作の参照」ダイアログ・ボックスが表示されます。ターゲット・サービスおよび操作については、「ターゲット・サービスおよび操作の概要」を参照してください。
「ターゲット・サービス操作の参照」ダイアログで、次の手順を実行します。
別のターゲット・サービスとターゲット操作の組合せを追加する場合は、手順2と3を繰り返します。必要な場合は、同一のターゲット・サービスと別の操作の組合せを指定できます。
Oracle JDeveloperには、データをXMLスキーマ間で変換するためのxsl
ファイルを作成できるXSLTデータ・マッパー・ツールが用意されています。このツールを使用することで、異なるスキーマを使用するアプリケーション間でのデータ交換が可能になります。たとえば、供給元発注の受信スキーマを請求の送信スキーマにマップできます。xslファイルを定義した後は、そのファイルを複数のルーティング・ルール仕様で再利用できます。
「データ・マッパーを使用したXSLマップの作成」を参照してください。
ペイロードに基づいてメッセージをフィルタリングする式を指定できます。たとえば、その顧客の郵便番号に基づいて、顧客記録のメッセージを異なるオフィスにルーティングできます。
フィルタ式を指定する手順は、次のとおりです。
ルーティング・ルール情報を開いていない場合は、「ルーティング・ルールの指定」の説明に従ってルーティング・ルール情報を開きます。
「フィルタ式の追加」アイコン(図5-16を参照)をクリックします。
「式ビルダー」が表示されます。
フィルタ式を指定して「OK」をクリックします。
式ビルダーの使用方法については、手順に続く説明を参照してください。
「式ビルダー」が開くと、図5-13のように表示されます。Oracle JDeveloperによってルーティング・サービス用WSDLが解析され、「WSDLメッセージ」ボックスにメッセージ定義が表示されます。
フィルタ式を作成する手順は、次のとおりです。
「WSDLメッセージ」ボックスで、メッセージ定義を開き、式の基礎を形成するメッセージ要素を選択します。
「コンテンツのプレビュー」ボックスには、選択したWSDLメッセージ要素のXPath式が表示されます。図5-18に例を示します。
「式に挿入」をクリックします。
図5-19に示すように、「式」ボックスに式が表示されます。
「関数」ボックスで、WSDLメッセージ・ペイロードに適用する関数を選択します。
関数は、「関数」ボックスの下矢印をクリックすると表示されるカテゴリ別にリストされます。たとえば、下矢印をクリックして「Logical Functions」を選択すると、図5-20に示すように、リストが表示されます。「Logical Functions」リストで関数を選択すると、その関数の説明が説明ボックスに表示されます。
「式に挿入」をクリックします。
選択した関数のXPath式が「式」ボックスに挿入されます。式を完成するために式を手動で編集する必要がある場合は、図5-21に示すように、行の最後に赤い波線が表示されます。
式を完成します。この例では、図5-22に示すように、5の値を入力します。
緑のチェック・マークをクリックして式を検証します。
式が無効であるか、変更を必要とする場合は、手動または式を編集するアイコン(図5-23を参照)を使用して式を編集します。
「OK」をクリックします。
式が「ルーティング・ルール」プロパティ・シートに追加されます。
式ビルダーで生成されたXPath式に加え、Oracle Enterprise Service Busでは、拡張構文を作成するためのネームスペース定義が自動的に提供されます。「設計」タブで、ルーティング・サービスのフィルタ・アイコン(空でないもの)にカーソルを置くと、拡張構文が表示されます。
フィルタ式を変更または削除するには、「フィルタ式の追加」アイコンをダブルクリックし、式ビルダーの「式」パネルで式を変更または削除します。
「式ビルダー」ダイアログ・ボックスでは、ユーザー定義の拡張関数を使用することもできます。ユーザー定義の拡張関数を使用する手順は、次のとおりです。
javax.xml.xpath.XPathFunction
インタフェースを実装する関数を記述します。次の例にサンプル関数を示します。
public class ExtnFunc implements XPathFunction { public Object evaluate(List args) throws XPathFunctionException { return "helloworld"; } }
ORACLE_HOME
/integration/esb/config
フォルダにあるextn_xpath_functions_config.xml
ファイルを変更し、ユーザー定義の拡張関数の詳細を追加します。
次の例にサンプルextn_xpath_functions_config.xml
を示します。
<?xml version="1.0" encoding="UTF-8"?> <!-- ===================================================================== --> <!-- XPath extension functions available to ESB 10.1.3 --> <!-- ===================================================================== --> <esb-xpath-functions xmlns="http://xmlns.oracle.com/soa/config/esb" version="10.1.3.1"> <!-- function id="function id which will be used in xpath" arity="1"> <classname>your class name including package</classname> <namespace-uri> your namespace </namespace-uri> </function --> </esb-xpath-functions>
「式ビルダー」ダイアログ・ボックスでは、ユーザー定義の拡張関数を次のように使用して式を作成できます。
NamespaceName:ExtensionFunctionName
NameSpace
は、extn_xpath_functions_config.xml
ファイルに定義されているネームスペースを指します。ExtensionFunctionName
は拡張関数です。次に例を示します。
{ns1:MyExtensionFunction= 'US'};
ルーティング・サービスがメッセージを受け入れる送信元ESBシステムを指定する手順は、次のとおりです。
ルーティング・ルールのプロパティを開いていない場合は、「ルーティング・ルールの指定」の説明に従ってルーティング・ルールのプロパティを開きます。
次のオプションから1つを選択します。
任意のシステム
このオプションは、ルーティング・サービスが作成されたシステムを含め、あらゆるESBシステムから送信されたメッセージを受け取るように指定する場合に選択します。
ローカル・システム
このオプションは、ルーティング・サービスが作成されたシステムと同じESBシステムから送信されたメッセージのみを受け取るように指定する場合に選択します。
他のシステム
このオプションは、ルーティング・サービスが作成されたシステム以外のESBシステムから送信されたメッセージのみを受け取るように指定する場合に選択します。
同期実行では、非同期実行とは異なり、リクエストに対して即時にレスポンスが提供されます。非同期実行は、サービスでのリクエストの処理に時間を要する可能性がある環境に便利です。また、非同期サービスは、同期サービスより信頼性の高い耐障害性に優れた拡張性のあるアーキテクチャを提供します。
ルーティング・サービスがターゲット・サービスを同期実行で呼び出すか、非同期実行で呼び出すかを指定する手順は、次のとおりです。
ルーティング・ルールのプロパティを開いていない場合は、「ルーティング・ルールの指定」の説明に従ってルーティング・ルールのプロパティを開きます。
プラス(+)ボタンをクリックしてルーティング・ルール情報を開きます。
プロパティ・シートの右側に「実行」オプションが表示されます。
適切なボタンを使用して実行方法(同期または非同期)を指定します。プロパティ・シートの図については、図5-17を参照してください。
ルールを昇順に配置することで最優先ルールが一番上に表示され、ルーティング・サービスに定義されている複数のルーティング・ルールの優先度を選択できます。
ルールの左にある「+」をクリックしてルールを選択した後、ルーティング・ルールの右上部にある上または下向きの三角形をクリックし、選択したルールを正しい優先順位に移動できます。プロパティ・シートの図については、図5-17を参照してください。
Oracle Enterprise Service Busでは、ヘッダー・ベースのトランスフォーメーションとフィルタリング(ルーティング)を制限付きでサポートしています。
ここでは、次の項目について説明します。
ESBでは、各ヘッダーを次のように呼びます。
リクエスト・ヘッダーはサービスへの入力となり、アウトバウンド・ヘッダーとして出力されます。
フィルタリングおよびトランスフォーメーションには、リクエスト・ヘッダーを使用できます。トランスフォーメーションが指定されていない場合、ヘッダーは現状のままでコピー(単純に通過)されます。
インバウンド・レスポンス・ヘッダーはアウトバウンド・ルーティング・サービスへの入力となり、レスポンス・ヘッダーとして出力されます。
トランスフォーメーションにはレスポンス・ヘッダーを使用できます。トランスフォーメーションが指定されていない場合、ヘッダーは現状のままでコピー(単純に通過)されます。
アダプタのインバウンドおよびアウトバウンド・ヘッダーWSDLファイルについては、『Oracle Application Server Adapters for Files, FTP, DatabasesおよびEnterprise Messagingユーザーズ・ガイド』を参照してください。
次の各ヘッダーに対するESBヘッダー・ベースのトランスフォーメーションは、XSLT拡張関数を使用することでサポートされます。
リクエスト・ヘッダーの読取り:
String getRequestHeader(String xpathExpression,
String namespaceDecl)
アウトバウンド・ヘッダーの書込み:
void setOutboundHeader(String xpathExpression,
String value,
String namespaceDecl)
ルーティング・サービスへのインバウンド・レスポンス・ヘッダーの読取り:
String getInboundResponseHeader(String xpathExpression,
String namespaceDecl)
レスポンス・ヘッダーの書込み:
void setResponseHeader(String xpathExpression,
String value,
String namespaceDecl)
前述のXSLT関数宣言の構文には、次の説明が適用されます。
xpathExpression
: ヘッダーに取得または設定するXPath式
value
: xpathExpression
に設定する値
namespaceDecl
: 'prefix=namespace;'
形式のネームスペース宣言
ネームスペース宣言の最後のセミコロン(;
)に注意してください。
XSLT拡張関数のネームスペースは、http://www.oracle.com/XSL/Transform/java/oracle.tip.esb.server.headers.ESBHeaderFunctions
です。
ヘッダー・ベースのトランスフォーメーションを設定する手順は、次のとおりです。
データ・トランスフォーメーションがない場合は、XSLTデータ・マッパー・ツールを使用してデータ・トランスフォーメーションを作成します。
データ・マップの「<ターゲット>」を右クリックし、メニューから「変数の追加」を選択し、「変数の作成」ダイアログ(図5-26を参照)を表示します。
「変数の作成」ダイアログで、各変数に対して次のフィールドを指定します。
ローカル名:
変数の名前を入力します。
XPath式:
ヘッダー・トランスフォーメーション関数の1つを使用して式を入力します。
ヘッダー・ベースのトランスフォーメーション関数を表示するには、フィールドに「ehdr:
」と入力して[Ctrl]を押しながら[Space]キーを押します。式に追加する関数をダブルクリックし、必要なパラメータを追加して関数を完成します。
アタプタのXPath式を入力している場合は、例5-1に示すように、パラメータの値についてアタプタ・ヘッダー・スキーマ定義のソースを確認する必要があります。Oracle JCAアダプタ・ヘッダーは個別のWSDLファイルに定義されます。アダプタのインバウンドおよびアウトバウンド・ヘッダーWSDLファイルについては、『Oracle Application Server Adapters for Files, FTP, DatabasesおよびEnterprise Messagingユーザーズ・ガイド』を参照してください。
例5-1に、アダプタ・スキーマ・ファイルの例を示します。
例5-1 fileAdapterInboundHeader.wsdlのサンプル
<definitions name="fileAdapter" targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/file/" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/file/" xmlns="http://schemas.xmlsoap.org/wsdl/" > <types> <schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/file/" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:FILEAPP="http://xmlns.oracle.com/pcbpel/adapter/file/"> <element name="InboundFileHeaderType"> <complexType> <sequence> <element name="fileName" type="string"/> <element name="directory" type="string"/> </sequence> </complexType> </element> </schema> </types> <!-- Header Message --> <message name="InboundHeader_msg"> <part element="tns:InboundFileHeaderType" name="inboundHeader"/> </message> </definitions>
例5-1では、XPath式の対応するgetRequestHeader
コールは次のようになります。
ehdr:getRequestHeader('/fhdr:InboundFileHeaderType/fhdr:fileName', 'fhdr=http://xmlns.oracle.com/pcbpel/adapter/file/;')
アウトバウンド・ファイル・アダプタにfileName
を書き込む場合は、変数を作成する際、XPath式に次のように指定します。ここでINFILENAME
は、getRequestHeader
コールに対応する変数名です。
ehdr:setOutboundHeader('/fhdr:OutboundFileHeaderType/fhdr:fileName', $INFILENAME, 'fhdr=http://xmlns.oracle.com/pcbpel/adapter/file/;')
注意: ヘッダー設定関数を使用するときは、ターゲット・サービスが想定している順に値を設定する必要があります。例5-1の場合は、最初に fileName を設定し、次にdirectory 要素を設定する必要があります。 |
メッセージは、フィルタリングを使用してメッセージ・ヘッダーに従ってルーティングできます。ESBヘッダー・ベースのフィルタリングでは、XPath拡張関数によってリクエスト・ヘッダーおよびインバウンド・レスポンス・ヘッダーがサポートされます。
リクエスト・ヘッダーの読取り:
String getRequestHeader(String xpathExpression)
ルーティング・サービスへのインバウンド・レスポンス・ヘッダーの読取り:
String getInboundResponseHeader(String xpathExpression)
前述のXPath関数宣言の構文には、次の説明が適用されます。
xpathExpression
: ヘッダーに取得するXPath式
式ビルダーでのフィルタ式の構文は、次のとおりです。
{filterExpression};{namespaceDeclaration}
XSLT拡張関数のネームスペースは、http://www.oracle.com/XSL/Transform/java/oracle.tip.esb.server.headers.ESBHeaderFunctions
です。
ヘッダー・ベースのフィルタリング(ルーティング)を設定する手順は、次のとおりです。
ルーティング・サービスから式ビルダー・ツールを起動します。
「関数」の下の「Header Functions」を選択し、XPath拡張関数を表示します。
該当する関数を選択し、「式に挿入」をクリックします。
パラメータの値についてアダプタ・スキーマ・ファイルのソースを確認し、関数を正しい構文に編集します。アダプタのインバウンドおよびアウトバウンド・ヘッダーWSDLファイルについては、『Oracle Application Server Adapters for Files, FTP, DatabasesおよびEnterprise Messagingユーザーズ・ガイド』を参照してください。
式を作成する場合は、テキスト・エディタで式を編集し、完成した式を式ビルダーに貼り付ける方法が簡単です。
たとえば、fileName
がpayload.xml
かどうか確認する場合は、例5-1に示すように、fileAdapterInboundHeader.wsdl
ファイルで値を確認してから、次のように式ビルダーに指定します。
{ehdr:getRequestHeader('/fhdr:InboundFileHeaderType/fhdr:fileName') = 'payload.xml'}; { namespace fhdr=http://xmlns.oracle.com/pcbpel/adapter/file/ namespace ehdr=http://www.oracle.com/XSL/Transform/java/oracle.tip.esb.server.headers.ESBHeaderFunctions}
関連項目: ヘッダー・ベースのフィルタリングのサンプルは、Oracle Technology Networkサイト( http://www.oracle.com/technology/products/integration/esb/index.html )の「Oracle Enterprise Service Bus」ページで入手できます。 |
ESBヘッダー・トランスフォーメーションおよびルーティングを使用する場合は、次の制限があります。
set
X
Header
関数は、次のタイプのXPath式のみをサポートします。
絶対パス(/Customer/Address/Zip
など)。
索引(/Customer/Address[2]/Zip
など)。Address[1]
がターゲット文書に作成されていない場合は作成されます。
マルチ・ヘッダーはサポートされません。
SOAPとヘッダーを使用する場合は、SOAP
Header
要素がheader
として設定されます。XPath式はHeader
要素で開始する必要があります(/
env:Header
/Message/Priority
など)。
GUIツールのサポートが制限されます。
属性の設定はサポートされません。
既存のルーティング・サービスを編集する手順は、次のとおりです。
「アプリケーション・ナビゲータ」または「設計」タブで、ルーティング・サービスをダブルクリックします。
ルーティング・サービス情報を変更します。サービスの名前は変更できないことに注意してください。
変更内容を保存します。