ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Service Busでのサービスの開発
12c (12.2.1)
E69914-01
  目次へ移動
目次

前
次
 

10 分割-結合によるサービスのパフォーマンスの向上

この章では、分割-結合の概要とその作成方法について説明し、さらに静的分割-結合と動的分割-結合のシナリオについても説明します。分割-結合とは、高度な仲介機能であり、1つのリクエスト内の個々のメッセージを同時に処理できるため、サービスのパフォーマンスの向上に役立ちます。

この章の内容は次のとおりです。

10.1 分割-結合の概要

分割-結合とは、メッセージのフローと処理を管理するためにService Busで使用できる仲介パターンです。分割-結合を使用すると、標準の順次処理とは対照的に、注文などのサービス・ペイロードを、複数のサービスに同時に送信される個々のメッセージに分割できます。これにより、サービスのパフォーマンスが大幅に向上します。分割-結合では、入力メッセージ・ペイロードをサブメッセージに分け(分割)、それらのサブメッセージを宛先に同時にルーティングして、レスポンスを1つの戻りメッセージに集約(結合)することで、このタスクを実現します。ペイロードを分割し、レスポンスを集約するこのプロセスを分割-結合パターンと呼びます。

分割-結合は、高速システムから低速システムの応答側のサービスに向けてペイロードを配信するシナリオで、全体的なレスポンス時間を最適化する場合に特に役立ちます。分割-結合を使用しない場合、通常、ペイロードの個々のメッセージは受信者によって順次解決されますが、応答側のシステムが低速な場合は時間がかかります。分割-結合を使用すると、複数のメッセージが同時に処理されるため、応答側のシステムの負担が減り、レスポンス時間が大幅に向上します。分割-結合を使用しない場合、全体的なレスポンス時間は、メッセージごとのレスポンス時間の合計になります。分割-結合を使用する場合、全体的なレスポンス時間は、個々のメッセージの最長レスポンス時間とシステムのわずかなオーバーヘッドの合計とほぼ同じになります。

分割-結合は、JDeveloperの分割-結合定義エディタで作成および設計します。その後、その分割-結合とそれに関連付けられたリソースをエクスポートしたり、テストおよび本番用にそれらのリソースをOracle Service Busコンソールにインポートできます。分割-結合はJDeveloperでは.flowファイルに保存され、常にWSDL操作に基づきます。分割-結合は、プロキシ・サービス、パイプラインまたは別の分割-結合から呼び出すことができます。分割-結合は、プロキシ・サービス、ビジネス・サービス、パイプラインまたは別の分割-結合を呼び出すことができます。

分割-結合には2種類のパターンがあります。1つは静的分割-結合で、既知の数のリクエストを処理し、もう1つは動的分割-結合で、可変数のリクエストを処理します。これらのパターンについては、以降の項で説明します。

注意:

分割-結合では、同じService Bus構成内の別の分割-結合を呼び出すことができるため、複雑な分割-結合機能を複数の分割-結合に分けることで、サービス設計がさらに柔軟になります。これにより、分割-結合機能のコンポーネント化と再利用が可能になります。分割-結合間にデータのマーシャリングやアンマーシャリングはないので、パフォーマンスは保持できます。

循環的な分割-結合参照を作成しないようにします。Service Busでは循環的な参照があるかどうかはチェックされません。

10.1.1 静的分割-結合

静的分割-結合では、分割-結合の構成に従って、ペイロードを固定数の新しいブランチに分割することで、Service Busメッセージ・フローのメイン実行スレッドから分岐します。設計時に、呼び出すサービスの数と種類を決定します。たとえば、顧客が、インターネット・サービス、TVサービス、電話サービスという3つの独立したサービスを含むケーブル・パッケージの注文を行う場合です。静的な使用例では、3つのリクエストすべてを、分割したパラレル・ブランチで実行できるため、標準的な順次実行と比較して実行時間のパフォーマンスが改善されます。

10.1.1.1 静的分割-結合 - サンプル・シナリオ

次のシナリオは、ある電話会社で、顧客からの通信サービス・パッケージの注文を処理するときに、静的分割-結合を使用する場合を示していします。この例では、顧客はDSLサービスとボイス・サービスを一度に申し込むことになります。電話会社は、ペイロードの各リクエストを単独で順に実行するのではなく、静的分割-結合を使用してメッセージを並行して実行できます。

開発者には、この特定のサービス・パッケージの受信サービス・リクエストが必ず2つ(DSLとボイス)になることがわかっているため、この場合、静的分割-結合が理想的なパターンといえます。リクエストを並列ブランチに分割することにより、リクエストを同時に処理できるようになるため、ペイロードを処理する際の全体的なレスポンス時間が向上します。すべてのメッセージの処理が完了すると、生成されたレスポンスが実行スレッドの1つの返信に集約されます。

図10-1は、2つの既知のサービス・リクエスト(DSLのアクティブ化と電話のアクティブ化)を分割し、各リクエストを並行処理して、レスポンスを1つの返信に結合する静的分割-結合を示しています。

図10-1 静的分割-結合: 既知の数のサービス・リクエスト

「図10-1 静的分割-結合: 既知の数のサービス・リクエスト」の説明が続きます
「図10-1 静的分割-結合: 既知の数のサービス・リクエスト」の説明

10.1.2 動的分割-結合

動的分割-結合では、受信ペイロードの内容に基づいて新しいブランチを動的に作成することで、Service Busパイプラインのメイン実行スレッドから分岐します。作成されるメッセージ・リクエストの数は変更できます。動的分割-結合では、条件ロジックを使用して、作成するブランチの数を決定します。すべてのリクエストが同時に処理され、各レスポンスが1つの返信に集約されます。たとえば、個別の発注数が変化する注文を小売業者が一括して行う場合です。動的な使用例では、一括注文を解析して発注ごとに分離したメッセージ・リクエストを作成できます。静的な使用例と同様に、これらのメッセージは並行に実行できるため、パフォーマンスが改善されます。

10.1.2.1 動的分割-結合 - サンプル・シナリオ

次のシナリオは、ある会社で、従業員の事務用品を自動的に注文するときに動的分割-結合を使用する場合を示しています。注文が従業員による送信に基づいて毎週自動的に行われる場合、各週の注文で発生する個々の注文数を知る方法はありません。この会社では、各注文を個別に行うのではなく、動的分割-結合を使用して、注文を同時に行うことができます。

毎週送信される注文数がわからないため、この場合、動的分割-結合が理想的なパターンといえます。動的分割-結合では、すべての注文をループ処理し、並行に実行します。処理する注文数を制限することもできます。すべての注文の処理が完了すると、生成された注文レスポンスが実行スレッドの1つの返信に集約されます。

図10-2は、15件の注文を分割し、それらの注文を同時に処理して、レスポンスを1つの返信に結合する動的分割-結合を示しています。

図10-2 動的分割-結合: 未知の数のサービス・リクエスト

「図10-2 動的分割-結合: 未知の数のサービス・リクエスト」の説明が続きます
「図10-2 動的分割-結合: 未知の数のサービス・リクエスト」の説明

10.1.3 分割-結合の操作

分割-結合の「コンポーネント」ウィンドウは、分割-結合を構成するために使用できるすべての操作を示します。操作は、通信、フロー制御および割当てのカテゴリに分かれます。

10.1.3.1 分割-結合の通信操作

通信操作では、分割結合と外部サービスとの相互運用方法を定義します。使用可能な操作は、表10-1を参照してください。

表10-1 分割-結合の通信操作

操作 説明

サービスの呼出し

この操作は、WSDLベースの非トランスポート型ビジネス・サービス、WSDLベース・プロキシ・サービスまたは分割-結合を呼び出します。「サービスの呼出し方法」を参照してください。

返信

この操作は、Oracle Service Busメッセージ・フローにレスポンスまたはフォルトを返します。「返信の構成方法」を参照してください。

10.1.3.2 分割-結合のフロー制御操作

フロー制御操作では、受信メッセージが分割-結合内を流れる方法を定義します。

表10-2 分割-結合のフロー制御操作

操作 説明

For Each

この操作は、スコープ内で構成されているロジックを指定回数だけ実行します。「リクエストの数に応じた反復方法」を参照してください。

条件操作

条件操作では、trueまたはfalseに評価する条件を定義し、各条件に対して定義された動作を実行できます。次の任意の条件を定義できます。

  • 「If」: 条件がtrueに評価されると、if-else操作の関連するIfブランチが実行されます。Else-if操作は、条件付きノードでも現れます。if-else操作の関連するElse Ifブランチは、最初のIf条件がfalseに評価されたが2番目の条件がtrueに評価されると実行されます。「If-Else条件付きロジックの定義方法」を参照してください。

  • 「While」: 条件がfalseに評価されるまで、関連する操作が繰り返されます。各ループが始まる前に、条件が評価されます。「Falseに評価されるまでの操作の繰返し方法」を参照してください。

  • 「次の条件が満たされるまで繰返し」: 条件がtrueに評価されるまで、関連する操作が繰り返されます。各ループが終了した後で、条件が評価されます。「Trueに評価されるまでの操作の繰返し方法」を参照してください。

パラレル

この操作によって、固定数の構成済パラレル・ブランチが作成されるため、固定数のメッセージ・リクエストを処理する静的分割-結合を定義できます。パラレルには、1つまたは複数のスコープ・ブランチがあります。「固定数のリクエストの並行処理方法」を参照してください。

エラーの生成

この操作は、分割-結合の通常の処理を停止させるエラーを生成します。エラー・ハンドラを使用せずにエラーが処理されると、分割-結合が終了し、Oracle Service Busのメッセージ・フローにフォルトが送信されます。「エラーの生成方法」を参照してください。

エラーの再生成

この操作では、エラー・ハンドラのcatchまたはcatch allによって捕捉されたエラーを再生成できます。エラーの再生成操作の名前および説明を構成できます。「エラーの再生成方法」を参照してください。

スコープ

この操作は、それに含まれる操作の動きに影響を与えるコンテキストを作成します。スコープ内に定義されているローカル変数およびエラー・ハンドラは、このコンテキストに制限されます。スコープ操作の構成プロパティはありません。「コンテナ・ノードの作成方法」を参照してください。

待機

この操作では、分割-結合フローに一時停止を挿入して、他の依存ジョブの完了を少しの間待機できるようにします。指定した期間に到達すると、分割-結合の実行が再開されます。「処理での一時停止の挿入方法」を参照してください。

10.1.3.3 分割-結合の割当て操作

割当て操作では、変数の初期化や更新など、処理するメッセージ内のデータを操作できます。割当てノードでは、割当て、コピー、削除、挿入、Javaコールアウト、ログおよび置換の操作を実行できます。

表10-3 分割-結合の割当て操作

操作 説明

割当て

この操作では、XQuery式の結果を変数に割り当てることができます。「変数への値の割当て方法」を参照してください。

コピー

この操作では、XPath式で指定された情報を、ソース・ドキュメントから、宛先ドキュメントにコピーできます。「ソース・ドキュメントから宛先ドキュメントへの値のコピー方法」を参照してください。

削除

この操作では、XPath式によって指定された一連のノードを削除できます。「一連のノードの削除方法」を参照してください。

挿入

この操作では、XPath式で選択したノードを基準として特定された場所にXQuery式の結果を挿入できます。「XQuery式の結果の挿入方法」を参照してください。

Javaコールアウト

この操作では、検証、トランスフォーメーション、ロギングなどのJavaで処理するカスタム・アクションのための分割-結合から静的Javaメソッドを呼び出すことができます。「分割-結合でのJavaメソッドの呼出し方法」を参照してください。

ログ

この操作では、管理者が適切なアクションを行うことができるように、指定された重大度でデータを記録します。「分割-結合データのログの記録方法」を参照してください。

置換

この操作では、XPath式で指定されたノードまたはノードのコンテンツを置き換えることができます。「ノードおよびそのコンテンツの置換方法」を参照してください。

10.1.4 SOAPヘッダー内のコンテンツでの分割-結合の使用

分割-結合を使用して、SOAPヘッダーにメッセージ・コンテンツを格納するサービスのパフォーマンスを強化できます。デフォルトでは、分割-結合はSOAPヘッダーを伝播しません。ただし、これに対処するため、プロキシ・サービスがSOAPヘッダーを分割-結合に渡すことができるようにし、分割-結合が呼出しまたはレスポンスとしてSOAPヘッダーをプロキシおよびビジネス・サービスに渡すことができるように、WSDLファイルを変更できます。

この機能を有効にするには、分割-結合WSDLファイルと、分割-結合によって呼び出されるプロキシ・サービスやビジネス・サービスのWSDLファイルで、単一のリクエスト・メッセージまたはレスポンス・メッセージに本文部分とヘッダー部分を宣言する必要があります。メッセージ部分をWSDLファイルに宣言すると、分割-結合でリクエスト/レスポンス・メッセージ変数にSOAPヘッダー・コンテンツを利用できます。

次に、WSDLファイルでのメッセージとバインディング定義の例を示します。

メッセージ

<wsdl:message name="retrieveCustomerOverviewByIdRequestMessage">
    <wsdl:part name="retrieveCustomerOverviewByIdRequest"
     element="co:retrieveCustomerOverviewByIdRequest"/>
    <wsdl:part name="serviceContext" element="sc:serviceContext"/>
</wsdl:message>

バインド

<wsdl:input>
<soap:body use="literal" parts="retrieveCustomerOverviewByIdRequest"/>
    <soap:header message="tns:retrieveCustomerOverviewByIdRequestMessage"
     part="serviceContext" use="literal"/>
</wsdl:input>

10.1.5 トランザクション・サポート

分割-結合ではトランザクションの伝播がサポートされます。多数の分割-結合操作には、トランザクション・サポートを制御する特定のサービス品質(QoS)値を設定するオプションがあります。分割-結合操作で「必ず1回」というQoS値を設定すると、トランザクションが存在する場合に操作がトランザクションのコンテキストで必ず実行されます。

個々の操作にQoS値を設定すると、単一の分割-結合操作において、トランザクションのコンテキストで複数の操作を実行し、その他の操作をトランザクション外で実行する柔軟性が得られます。QoSが「必ず1回」に設定された操作はトランザクションで実行されます。QoSが「ベスト・エフォート」に設定された操作はトランザクションのコンテキストでは実行されません。

分割-結合では、例外時のトランザクション・ロールバックが処理されません。トランザクションの例外とロールバックの処理は、分割-結合と呼ばれるサービス・コンポーネントが担当します。

次の分割-結合操作では、トランザクションの伝播がサポートされます。

  • サービスの呼出し

  • 割当て

  • 削除

  • 挿入

  • Javaコールアウト

  • 置換

10.1.6 分割-結合のセキュリティ

分割-結合では、セキュリティ・ポリシーは施行されず(つまり、ポリシーを含むWSDLファイルを備えた分割-結合は作成できない)、WSDLポリシーを含むWSDLベースのビジネス・サービスを分割-結合からコールすることはできません。

分割-結合を使用するときにセキュリティを確実に施行するには、プロキシ・サービスを使用して次のようにセキュリティの施行を処理します。

  • 分割-結合を呼び出すインバウンド・プロキシを使用し、ポリシーを施行します。

  • 分割-結合でポリシーを含むWSDLビジネス・サービスを呼び出す必要がある場合は、分割-結合でローカル・プロキシ(セキュリティ・ポリシーなしの構成)をコールし、必要なポリシーを含むビジネス・サービスをそのローカル・プロキシで呼び出すようにします。

10.1.7 分割-結合のリソース・タイプと環境変数

任意のスクリプトまたはカスタム・コードで分割-結合を参照する場合は、次の値を使用してください。

  • typeId: FLOW

  • ワーク・マネージャの環境値のタイプ: ワーク・マネージャ

    ワーク・マネージャは、ディスパッチ・ポリシーの別称であることに注意してください。

10.2 サービス・レベル合意のアラート・ルール

サービス・レベル合意(SLA)のアラート・ルールでは、アラートの生成条件が定義されます。これらの条件は、通常、Service Busアプリケーションまたは特定のサービス・コンポーネントの全体的なヘルスのインジケータになります。分割-結合に対するSLAアラート・ルールの定義の詳細は、『Oracle Service Busの管理』のサービス・レベル合意のアラート・ルールの作成に関する項を参照してください。

10.3 JDeveloperでの分割-結合の操作

分割-結合は、JDeveloperでのみ作成および構成できます。JDeveloperにはグラフィカルなモデリング・エディタが用意されており、キャンバスに操作をドラッグし、「プロパティ」ウィンドウでそれらのプロパティを構成することで、簡単に分割-結合をモデル化できます。

10.3.1 JDeveloperでの分割-結合の作成方法

分割-結合は、JDeveloperで作成および構成します。Oracle Service BusコンソールでService Busプロジェクトを開発する場合、JDeveloperで作成した分割-結合をコンソールにインポートできます。分割-結合は.flowファイルで定義され、これはJDeveloperで分割-結合を作成するときに生成されます。このファイルには、プロキシ・サービス、ビジネス・サービス、または外部のWSDLリソースへの参照を含めることができます。分割-結合が依存するリソースは、分割-結合をアクティブ化する前に、サーバー上に存在する必要があります。

JDeveloperで分割-結合を作成するには:

  1. Oracle JDeveloperで、分割-結合の追加先のアプリケーションおよびプロジェクトを開くか作成します。
  2. アプリケーション・ナビゲータで、プロジェクトを右クリックして、「新規」をポイントし、「分割-結合」を選択します。

    「分割-結合サービスの作成」ウィザードが表示されます。

  3. 「サービスの作成」ページで、分割-結合の名前を入力し、必要に応じて場所と説明を入力します。

    命名要件については、「Service Busコンポーネントのネーミング・ガイドライン」を参照してください。分割-結合名に、先頭および末尾の空白と、/ \ * : " < > ? |の文字は使用しないでください。

  4. 必要に応じて、分割-結合の簡単な説明を入力するか、ファイルの場所を変更します。

    デフォルトでは、ファイルはプロジェクト・フォルダに保存されます。

  5. 「次」をクリックします。
  6. 「型」ページで、次のいずれかを行います。
    • 既存のWSDLファイルを使用するには、「WSDL」フィールドの右側の「既存のWSDLを検索します。」をクリックし、使用するWSDLファイルを検索してそのファイルを選択します。

    • 新しいWSDLファイルを作成するには、「WSDL」フィールドの右側の「スキーマからWSDLを生成します。」をクリックします。詳細は、『Oracle SOA SuiteでのSOAアプリケーションの開発』のWSDLファイルの生成に関する項を参照してください。

  7. 該当フィールドに対して表示されるオプションのリストから、使用するWSDLバインドと操作を選択します。
  8. この分割-結合からプロキシ・サービスを生成するには、プロキシ・サービスとして公開を選択して、次の情報を入力します。
    • プロキシ名: プロキシ・サービスの一意の名前。前述の命名要件を参照してください。

    • プロキシの場所: プロキシ・サービス・ファイルを格納する場所のパス。デフォルトはプロジェクト・フォルダです。

    • プロキシ・トランスポート: プロキシ・サービスに使用するトランスポートのタイプを選択します。詳細は、「JCAアダプタ、トランスポートおよびバインドの操作」を参照してください。

  9. 「終了」をクリックします。

    基本の分割-結合が作成され、分割-結合定義エディタの「設計」ビューにダイアグラムとして表示されます。デフォルトでは、これは開始ノード、受信ノードおよび返信ノードで構成されます(分割-結合がリクエスト/レスポンスのWSDLファイルに基づいている場合)。開始ノードには、WSDL操作からイントロスペクトされる変数が含まれています。受信ノードは、着信リクエスト・メッセージを受信するために使用されます。返信ノードは、レスポンス・メッセージを送信するために使用されます。

10.3.2 JDeveloperでのWSDLドキュメントからの分割-結合の生成方法

すでにService Busアプリケーション内に存在するWSDLドキュメントを使用して、分割-結合を生成できます。アプリケーションにWSDLドキュメントが存在しない場合は、これをインポートして次の手順を実行します。

JDeveloperでWSDLドキュメントから分割-結合を生成するには:

  1. アプリケーション・ナビゲータで、既存のWSDLドキュメントを右クリックして、「Service Bus」をポイントし、「分割結合の生成」を選択します。
  2. 「JDeveloperでの分割-結合の作成方法」の説明に従い、サービスに名前を付けて構成します。

10.3.3 「コンポーネント」ウィンドウと「プロパティ」ウィンドウの表示方法

分割-結合に追加する操作を「コンポーネント」ウィンドウから選択するため、分割-結合を構成するには、このウィンドウがJDeveloperで表示される必要があります。各操作は、JDeveloperの「プロパティ」ウィンドウを使用して構成するため、このウィンドウも表示される必要があります。

10.3.3.1 「コンポーネント」ウィンドウの表示

「コンポーネント」ウィンドウを表示するには

  • 「コンポーネント」ウィンドウが「JDeveloper」ウィンドウに表示されない場合は、「ウィンドウ」「コンポーネント」を選択します。

    「コンポーネント」ウィンドウが「JDeveloper」ウィンドウの右側に表示されます。

10.3.3.2 「プロパティ」ウィンドウの表示

「プロパティ」ウィンドウを表示するには

  • 「プロパティ」ウィンドウが「JDeveloper」ウィンドウに表示されない場合は、「ウィンドウ」「プロパティ」を選択します。

    「プロパティ」ウィンドウが「JDeveloper」ウィンドウの右側に表示されます。このウィンドウは、読みやすくなるように、別の場所(分割-結合定義エディタの下など)に移動できます。

10.3.4 開始ノードの構成方法

開始ノードは、新しい分割-結合を作成すると、自動的に生成されます。これは、その他のすべてのノードを実行するための出発点です。開始ノードで構成する要素はその名前のみです。

開始ノード名を変更するには:

開始ノードのラベルの名前を変更するには、ノードの名前をクリックします。表示されたフィールドに、ノードの一意の識別文字列を入力します。入力した名前が、分割-結合エディタでノードの下に表示されます。

10.3.5 外部サービスの表示方法

開始ノードに示されている外部サービスは、分割-結合のコンテキストの外部で呼び出されるサービスです。これらは、サービスの呼出しノードで指定されていますが、容易に使用できるようにリストされています。

外部サービスを表示するには:

外部サービスを表示するには、開始ノードの左矢印ボタンをクリックします。開始ノードの左側に「外部サービス」ボックスが表示されます。外部サービスの上にマウスを置くと、サービス・リソースの完全パスが表示されます。

10.3.6 グローバル変数とローカル変数の構成方法

開始ノードの変数には、分割-結合のノードによってグローバルに参照されるデータが格納されます。デフォルトでは、分割-結合が最初に作成されるときに、すべての開始ノードに、リクエストおよびレスポンスの両方の変数が割り当てられます。開始ノードから、新しいグローバル変数を作成するか、または既存のグローバル変数を編集することができます。

スコープの変数には、ローカルで(つまりデータの添付先のノードでのみ)参照されるデータが格納されます。スコープから、新しいローカル変数を作成したり、既存のローカル変数を編集できます。

グローバル変数とローカル変数の詳細は、「コンテナ・ノードの作成方法」を参照してください。

10.3.6.1 グローバル変数とローカル変数の定義

グローバル変数とローカル変数を定義するには:

  1. 分割-結合定義エディタで、次のいずれかを実行します。
    • グローバル変数を作成するには、開始ノードを右クリックして、「変数の作成」を選択します。

    • ローカル変数を作成するには、変数の追加先のスコープを右クリックして、「変数の作成」を選択します。

    「変数エイリアスの作成」ダイアログが表示されます。

  2. 変数の名前を入力します。
  3. 変数の型(組込み、XMLスキーマまたはWSDLメッセージ)を選択します。
  4. 選択した変数の型の横にある「参照」をクリックして、型選択ダイアログから型を選択します。
  5. 「OK」をクリックします。

    「変数」ボックスの変数リストに新しい変数が表示されます。

10.3.6.2 グローバル変数とローカル変数の編集

グローバル変数とローカル変数を編集するには:

  1. 編集する変数がエディタに表示されない場合は、その変数を含む開始ノードまたはスコープの左下にある矢印ボタンをクリックします。

    「変数」ボックスが表示されます。

  2. 編集する変数を右クリックして、「変数の編集」を選択します。

    「変数エイリアスの編集」ダイアログが表示されます。

  3. 次のいずれかの操作を実行します。
    • 変数の名前を変更します。

    • 変数の型(組込み、XMLスキーマまたはWSDLメッセージ)を選択します。

    • 選択した変数の型の横にある「参照」をクリックして、型選択ダイアログから型を選択します。

  4. 「OK」をクリックします。

10.3.7 受信操作の構成方法

新しい分割-結合を作成するたびに、受信操作が自動的に生成されます。受信操作は、着信リクエスト・データを変数に入れ、後のノードでコンテンツを使用できるようにします。受信操作を構成するには、受信操作で初期化する受信メッセージ変数と、必要に応じて操作の新しい名前および説明を指定できます。デフォルトの変数requestは、受信操作に対して自動で定義されます。

受信操作を構成するには:

  1. 「プロパティ」ウィンドウが「JDeveloper」ウィンドウに表示されない場合は、「ウィンドウ」「プロパティ」を選択します。
  2. 分割-結合定義エディタで受信操作を選択します。
  3. 受信メッセージ変数を指定するには、「プロパティ」ウィンドウの「受信」タブをクリックして、次のいずれかを実行します。
    • 既存の変数を選択するには、「リクエスト変数」フィールドの使用可能なオプションのリストから変数名を選択します。

    • 新しい変数を作成するには、「リクエスト変数」フィールドの横の「変数の作成」をクリックします。「変数の作成」ダイアログで、変数の名前を入力して、「OK」をクリックします。

  4. 受信操作の名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  5. 「説明」フィールドに、重要と思われるノートを入力します。
  6. JDeveloperのツールバーで、「保存」をクリックします。

10.4 JDeveloperでの通信操作の追加

通信操作では、分割結合と外部サービスとの相互運用方法を定義します。これには、サービスの呼出し操作と返信操作があります。

10.4.1 サービスの呼出し方法

サービスの呼出し操作を使用して、外部、WSDLベースのビジネス・サービス、WSDLベースのプロキシ・サービス、WSDLベースのパイプラインおよび分割-結合を呼び出します。

分割-結合からサービスを呼び出すには:

  1. 「コンポーネント」ウィンドウの「通信」で、「サービスの呼出し」をクリックして、エディタのサービスを呼び出すフロー内の場所にドラッグします。
  2. 新しい「サービスの呼出し」ノードを選択します。
  3. 「プロパティ」ウィンドウで「呼出し」タブをクリックします。
  4. 「サービス」フィールドで、「参照」をクリックして、呼び出すサービスを選択します。
  5. 「操作」フィールドで、サービスの呼出しの基になっている操作を選択します。
  6. 「リクエスト変数」フィールドで、タイプが操作の入力メッセージ・タイプと一致するメッセージ・タイプ変数を選択するか、「変数の作成」をクリックして新しい変数を作成します。
  7. 「レスポンス変数」フィールドで、タイプが操作の出力メッセージ・タイプと一致するメッセージ・タイプ変数を選択するか、「変数の作成」をクリックして新しい変数を作成します。

    注意:

    サービスの呼出しには、一方向呼出しでないかぎり、リクエスト変数およびレスポンス変数の両方が必要です。いずれのタイプの変数も、グローバル(分割-結合全体で使用可能)にすることも、ローカル(特定のコンテキストのスコープ内で使用可能)にすることもできます。

  8. 「QoS」フィールドで、「ベスト・エフォート」(トランザクションのコンテキストで実行されない)または「必ず1回」(トランザクションで実行される)のいずれかを選択します。
  9. サービスの呼出しノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  10. 「説明」フィールドに、重要と思われるノートを入力します。
  11. JDeveloperのツールバーで、「保存」をクリックします。

10.4.2 返信の構成方法

新しい分割-結合を作成すると、グローバルな返信ノードが自動的に生成されます。グローバルな返信の目的は、コール元のサービスに、レスポンスを送り返すことです。ただし、返信を分割-結合の他の場所(エラー・ハンドラ内など)にも生成できます。

返信は、変数の構成に応じて、レスポンスまたはフォルトをクライアントに送り返すことができます。使用できるフォルトのオプションは、返信がグローバルかローカルかによって異なります。

  • グローバルな返信(つまり、分割-結合でのエラー・ハンドラの外に生成される返信)には、SOAPフォルトは含まれませんが、WSDLフォルトが含まれる場合があります。これは、この場合、SOAPフォルト・オプションが無効になっているためです。

  • ローカルな返信(つまり、エラー・ハンドラに付加された返信)は、WSDLフォルトまたはSOAPフォルトを持つことができます。WSDLフォルトは、分割-結合の基盤となるWSDLファイルで定義されている場合にのみ使用できます。SOAPフォルト・オプションは、以前にエラー・ハンドラで定義されていれば、常に使用できます。

    注意:

    「Response」および「Fault」ボタンを使用して切り替えると、それぞれの構成がクリアされます。たとえば、以前に「SOAPフォルトの伝播」を選択していて、「レスポンス」の構成に切り替えると、「SOAPフォルトの伝播」の選択が解除されます。

デフォルトの返信操作には、フォルトをトリガーせずにフローのインスタンスを終了する暗黙的な終了操作が自動的に含まれます。終了操作は、開発環境には表示されません。

返信を構成するには:

状況によっては、返信操作に対してフォルトが使用できない、またはSOAPフォルトしか使用できない場合があります。

  1. 新しい返信操作を追加するには、「コンポーネント」ウィンドウの「通信」で、「返信」をクリックして、これをエディタの適切な場所にドラッグします。

  2. 「返信」ノードを選択して構成します。

  3. 「プロパティ」ウィンドウで「返信」タブをクリックします。

  4. コール元のサービスにレスポンスを送り返すには、次のようにします。

    1. 「レスポンス」オプションを選択します。

    2. 「レスポンス」フィールドで、タイプが操作の出力メッセージ・タイプと一致するメッセージ変数を選択します。使用可能な変数のリストから選択するか、「変数の作成」をクリックして新しいメッセージ変数を定義します。

  5. WSDLフォルトをレスポンスとして送信するには、次のようにします。

    1. 「フォルト名」オプションを選択します。

    2. 「フォルト名」フィールドで、メッセージ・フローに送り返すフォルトの名前を既存のフォルトのリストから選択します。

    3. 「フォルト変数」フィールドで、フォルトが割り当てられる変数を選択します。使用可能な変数のリストから選択するか、「変数の作成」をクリックして新しいフォルト変数を定義します。

  6. エラー・ハンドラで定義されたSOAPフォルト変数にあるSOAPフォルトを伝播するには、「SOAPフォルトの伝播」を選択します。

  7. 返信ノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  8. 「説明」フィールドに、重要と思われるノートを入力します。

  9. JDeveloperのツールバーで、「保存」をクリックします。

10.5 JDeveloperでのフロー制御操作の追加

フロー制御操作では、受信メッセージが分割結合内を移動する方法を定義します。この操作では、条件ロジック、エラー処理および並行処理を定義できます。

10.5.1 コンテナ・ノードの作成方法

スコープは、様々な要素をまとめるコンテナです。このコンテナは、それに含まれる要素の動作に影響を与えるコンテキストを作成します。スコープ内に定義されているローカル変数およびエラー・ハンドラは、このコンテキストに制限されます。ただし、スコープ内の一部のノードは、ローカル(スコープ内)にも、グローバル(スコープ外)にも動作する場合があります。たとえば、特定のスコープ内のサービスの呼出しにより、そのスコープのコンテキストの外部のサービスがコールされる場合があります。

変数は定義されるスコープ内やそのスコープ内にネストされたすべてのスコープに表示できますが、外部のスコープに宣言される変数と同じ名前の変数が内部のスコープに宣言される場合、外部のスコープの変数が非表示になります。たとえば、外部のスコープ(So)にmyVarという変数を定義した後、外部のスコープSoにある内部のスコープ(Si)にもmyVar変数を定義する場合、内部のスコープ(Si)に定義したmyVarにのみアクセスできます。このmyVarにより、外部スコープSoで定義されたmyVarがオーバーライドされます。

コンテナ・ノードを作成するには:

  1. 「コンポーネント」ウィンドウの「フロー制御」で、「スコープ」をクリックして、これをエディタの適切な場所のフローにドラッグします。
  2. 新しい「スコープ」ノードを選択します。
  3. スコープ・ノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  4. スコープに操作を追加してその処理ロジックを定義し、「プロパティ」ウィンドウを使用して操作を構成します。

    使用可能な操作の詳細は、「JDeveloperでのフロー制御操作の追加」および「JDeveloperでの割当て操作の追加」を参照してください。

  5. スコープ・ノードのローカル変数を定義するには、「グローバル変数とローカル変数の構成方法」を参照してください。
  6. JDeveloperのツールバーで、「保存」をクリックします。

10.5.2 リクエストの数に応じた反復方法

For Eachノードは、そのスコープ内で構成されたロジックを指定回数実行します。For Each操作を使用して、リクエストの数に応じて反復する条件付きロジックを作成します。これは、主に動的な分割-結合を作成するために使用されます。

リクエストの数に応じて反復するには:

  1. 「コンポーネント」ウィンドウの「フロー制御」で、「For Each」をクリックして、これをエディタの適切な場所のフローにドラッグします。
  2. 新しい「For Each」ノードを選択します。
  3. 「プロパティ」ウィンドウで「For Each」タブをクリックします。
  4. 「実行モード」フィールドで、For Eachループのそれぞれの繰返しを順次または並行のどちらで処理するかを選択します。
  5. 「カウンタ変数名」フィールドに、繰返しをカウントする暗黙的変数の名前を入力します。
  6. 「開始カウンタ値」フィールドの横で、「式ビルダー」アイコンをクリックして、XPath式ビルダーを起動し、カウンタ変数の初期値を指定する式を定義します。

    注意:

    カウンタの最小開始値と終了値は1です。

  7. 「最終カウンタ値」フィールドの横で、「式ビルダー」アイコンをクリックして、XPath式ビルダーを起動し、最後の繰返し後のカウンタ変数の最終値を指定する式を定義します。
  8. 「完了したブランチの数」フィールドの横で、「式ビルダー」アイコンをクリックして、XPath式ビルダーを起動し、ブランチの作成を中止するタイミングを判断する式を定義します。
  9. 正常に完了したブランチのみをカウントして完了条件が満たされたかどうかを判断するには、「成功したブランチのみ」を選択します。
  10. For Eachノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  11. 「説明」フィールドに、重要と思われるノートを入力します。
  12. JDeveloperのツールバーで、「保存」をクリックします。

10.5.3 固定数のリクエストの並行処理方法

並行操作によって、固定数の構成済パラレル・ブランチが作成されるため、固定数のメッセージ・リクエストを処理する静的分割-結合を作成できます。各ブランチには、任意の数の操作を含めることができる独自のスコープがあります。

パラレル・ノードは、基本的には、固定数の処理ブランチのプレースホルダであり、各ブランチには、それぞれのスコープがあります。2つのブランチは、並行操作をフローに追加すると自動的に生成されます。スコープごとに一意の処理ロジックを定義するには、適切な操作をスコープにドラッグします。スコープの追加ボタンを使用して、ブランチをさらに追加することもできます。

図10-3 「Add Scope」ボタン

「図10-3 「スコープの追加」ボタン」の説明が続きます
「図10-3 「Add Scope」ボタン」の説明

固定数のリクエストを並行処理するには:

  1. 「コンポーネント」ウィンドウの「フロー制御」で、「パラレル」をクリックして、これをエディタの適切な場所のフローにドラッグします。
  2. ブランチをさらに追加するには、「パラレル」ノードの右上隅のスコープの追加ボタンをクリックします。
  3. ブランチごとに、追加の操作をスコープにドラッグしてから、その操作を「プロパティ」ウィンドウで構成し、処理ロジックを定義します。

    追加可能な操作の詳細は、「JDeveloperでのフロー制御操作の追加」および「JDeveloperでの割当て操作の追加」を参照してください。

  4. パラレル・ノードの名前を変更するには、ノード上部の「パラレル」をクリックして、表示されたフィールドに新しい名前を入力します。
  5. JDeveloperのツールバーで、「保存」をクリックします。

10.5.4 If-Else条件付きロジックの定義方法

Ifアクティビティは、分割-結合内で条件付きロジックを提供します。If条件全体の動作を決定する多数のノードから構成されます。各ノードを個別に構成する必要があります。Ifアクティビティを作成すると、アクティビティ内にIfブランチおよびElseブランチが自動的に生成されます。

IfおよびElse Ifの各ブランチは、Ifアクティビティ全体で、1つの条件付きロジック(XPath式で定義される)を提供します。これらのブランチでは、条件が満たされた場合に実行する処理ロジックも定義します。Elseブランチでは、条件が満たされない場合に実行する処理ロジックを定義します。Else Ifノードは、If操作に対して無制限に追加できます。

if-else条件付きロジックを定義するには:

  1. 「コンポーネント」ウィンドウの「フロー制御」で、「If」をクリックして、これをエディタの適切な場所のフローにドラッグします。

    Ifノードが、IfブランチおよびElseブランチとともに表示されます。

  2. Ifブランチを構成するには、次のようにします。

    1. 新しい「If」ノードで、「If」ブランチを選択します。

    2. 「プロパティ」ウィンドウで「条件」タブをクリックします。

    3. 「条件」フィールドの横で、「式ビルダー」アイコンをクリックして、XPath式ビルダーを起動し、If条件を定義する式を定義します。

    4. If条件が満たされた場合に行われる処理を定義するには、操作を「コンポーネント」ウィンドウから「If」ブランチにドラッグしてから、その操作を「プロパティ」ウィンドウで構成します。

      追加可能な操作の詳細は、「JDeveloperでのフロー制御操作の追加」および「JDeveloperでの割当て操作の追加」を参照してください。

  3. Else Ifブランチを追加するには、次のようにします。

    1. Ifノードの右上隅にある黄色いダイヤモンドの形のアイコンをクリックするか、Ifノード内で右クリックして「ElseIfの追加」を選択します。

      図10-4 「Add Else If」ボタン

      「図10-4 「Else Ifの追加」ボタン」の説明が続きます
      「図10-4 「Add Else If」ボタン」の説明

      Elseブランチの左側に新しいElse Ifブランチが表示されます。

    2. 手順2の説明に従い、Ifブランチと同様にElse Ifブランチを構成します。

  4. どの条件も満たされない場合に行われる処理を定義するには、操作を「コンポーネント」ウィンドウから「Else」ブランチにドラッグしてから、その操作を「プロパティ」ウィンドウで構成します。

  5. Ifノードまたはいずれかのブランチの名前を変更するには、ノードまたはブランチのアイコンを選択し、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

  6. 「説明」フィールドに、重要と思われるノートを入力します。

  7. JDeveloperのツールバーで、「保存」をクリックします。

10.5.5 エラー・ハンドラの作成方法

エラー・ハンドラは、エラーを受信して、処理します。エラー・ハンドラは、開始ノードやスコープにアタッチできます。開始ノードにアタッチされている場合は、グローバル・エラー・ハンドラであり、ローカルのすべてのエラー生成ノードの出力に対して、すべてをキャッチします。スコープにアタッチされている場合は、ローカルで発生したエラーのみを処理します。

エラー・ハンドラを作成するには:

  1. エラー・ハンドラの追加先である開始ノードまたはスコープ・ノードを選択します。
  2. 選択したノードを右クリックし、「Catchの追加」または「CatchAllの追加」を選択します。

    選択したノードの右側に新しいエラー・ハンドラ・ノードが表示されます。

  3. Catch Allハンドラに対してSOAPフォルトを呼び出すには、「CatchAll」ブランチを選択し、「プロパティ」ウィンドウで「CatchAll」タブをクリックして、「SOAPフォルト変数名」にフォルト名を入力します。
  4. Catchハンドラを構成するには、「Catch」ブランチを選択し、「プロパティ」ウィンドウの「Catch」タブをクリックして、次のいずれかを実行します。
    • 定義したフォルトを呼び出すには、「ユーザー定義のフォルト」を選択して、「編集」アイコンをクリックします。「QNameの編集」ダイアログで、フォルトの名前とネームスペースを入力します。

    • 事前定義したフォルトを呼び出すには、「事前定義のフォルト」を選択して、オプションのリストからフォルトを選択します。

  5. レスポンスが送信される前に、「Catch」または「CatchAll」ブランチに対して追加の処理を構成するには、割当て、If、返信の各ノードを「コンポーネント」ウィンドウからドラッグして、そのノードを「プロパティ」ウィンドウで構成します。
  6. エラー・ハンドラ・ノードまたはいずれかのブランチの名前を変更するには、ノードまたはブランチのアイコンを選択し、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。
  7. 「説明」フィールドに、重要と思われるノートを入力します。
  8. JDeveloperのツールバーで、「保存」をクリックします。

10.5.6 エラーの生成方法

エラーの生成は、分割-結合の通常の処理を停止させるエラーを生成します。エラーがエラー・ハンドラを使用して処理されないと、分割-結合は終了し、Service Busメッセージ・フローにフォルトが送信されます。「エラーを発生させる」の構成には、「一般情報」タブへのエラーの性質の入力が含まれます(オプション)。

エラーを生成するには:

  1. 「コンポーネント」ウィンドウの「フロー制御」で、「エラーの生成」をクリックして、これをエディタの適切な場所のフローにドラッグします。
  2. 新しい「エラーの生成」ノードを選択します。
  3. 「プロパティ」ウィンドウで「エラーの生成」タブをクリックします。
  4. 定義したフォルトを呼び出すには、「ユーザー定義のフォルト」を選択して、「編集」アイコンをクリックします。「QNameの編集」ダイアログで、フォルトの名前とネームスペースを入力します。
  5. 事前定義したフォルトを呼び出すには、「事前定義のフォルト」を選択して、オプションのリストからフォルトを選択します。
  6. エラーの生成ノードの名前を変更するには、ノードまたはブランチのアイコンを選択し、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。
  7. 「説明」フィールドに、重要と思われるノートを入力します。
  8. JDeveloperのツールバーで、「保存」をクリックします。

10.5.7 エラーの再生成方法

エラー・ハンドラにエラーの再生成操作を追加できます。この操作では、エラー・ハンドラのCatchまたはCatch All操作によって捕捉されたエラーを再生成できます。この操作では構成は必要ありませんが、名前を変更して説明を追加できます。

エラーを再生成するには:

  1. 「コンポーネント」ウィンドウの「フロー制御」で、「エラーの再生成」をクリックして、これをエディタの適切な場所のフローにドラッグします。
  2. 新しい「エラーの再生成」ノードを選択します。
  3. エラーの再生成ノードの名前を変更するには、「プロパティ」ウィンドウの「名前」フィールドに一意の識別文字列を入力します。
  4. 「説明」フィールドに、重要と思われるノートを入力します。
  5. JDeveloperのツールバーで、「保存」をクリックします。

10.5.8 Trueに評価されるまでの操作の繰返し方法

次の条件が満たされるまで繰返しノードは、分割-結合内で条件付きロジックを提供します。次の条件が満たされるまで繰返しノードを定義すると、定義した条件がtrueに評価されるまで、関連付けられた操作が繰り返されます。関連付けられる操作は、次の条件が満たされるまで繰返しノードのループで定義されます。各ループが終了した後で、条件が評価されます。

trueに評価されるまで操作を繰り返すには:

  1. 「コンポーネント」ウィンドウの「フロー制御」で、「次の条件が満たされるまで繰返し」をクリックして、これをエディタの適切な場所のフローにドラッグします。

    「次の条件が満たされるまで繰返し」ノードが、条件付きブランチとともに表示されます。

  2. 新しい「次の条件が満たされるまで繰返し」ノードで、「条件」アイコンを選択します。
  3. 「プロパティ」ウィンドウで「条件」タブをクリックします。
  4. 「条件」フィールドの横で、「式ビルダー」アイコンをクリックしてXPath式ビルダーを起動し、処理が繰返しを停止するにはtrueに評価する必要がある式を定義します。
  5. 条件がtrueに評価されるまで繰り返される処理ロジックを定義するには、操作を「コンポーネント」ウィンドウから「次の条件が満たされるまで繰返し」ノードにドラッグして、その操作を「プロパティ」ウィンドウで構成します。

    追加可能な操作の詳細は、「JDeveloperでのフロー制御操作の追加」および「JDeveloperでの割当て操作の追加」を参照してください。

  6. 次の条件が満たされるまで繰返しノードの名前を変更するには、ノードを選択し、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。
  7. 「説明」フィールドに、重要と思われるノートを入力します。
  8. JDeveloperのツールバーで、「保存」をクリックします。

10.5.9 Falseに評価されるまでの操作の繰返し方法

Whileノードは、分割-結合内で条件付きロジックを提供します。Whileノードを定義する場合、定義した条件がfalseに評価されるまで、関連付けられた操作が繰り返されます。関連付けられる操作は、次の条件が満たされるまで繰返しノードのループで定義されます。各ループが終了する前に、条件が評価されます。

falseに評価されるまで操作を繰り返すには:

  1. 「コンポーネント」ウィンドウの「フロー制御」で、「While」をクリックして、これをエディタの適切な場所のフローにドラッグします。

    「While」ノードが、条件付きブランチとともに表示されます。

  2. 新しい「While」ノードで、「条件」アイコンを選択します。
  3. 「プロパティ」ウィンドウで「条件」タブをクリックします。
  4. 「条件」フィールドの横で、「式ビルダー」アイコンをクリックしてXPath式ビルダーを起動し、処理が繰返しを停止するにはfalseに評価する必要がある式を定義します。
  5. 条件がfalseに評価されるまで繰り返される処理ロジックを定義するには、操作を「コンポーネント」ウィンドウから「While」ノードにドラッグして、その操作を「プロパティ」ウィンドウで構成します。

    追加可能な操作の詳細は、「JDeveloperでのフロー制御操作の追加」および「JDeveloperでの割当て操作の追加」を参照してください。

  6. Whileノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。
  7. 「説明」フィールドに、重要と思われるノートを入力します。
  8. JDeveloperのツールバーで、「保存」をクリックします。

10.5.10 処理での一時停止の挿入方法

待機操作では、分割-結合フローに一時停止を挿入して、他の依存ジョブの完了を少しの間待機できるようにします。指定した期間に到達すると、分割-結合の実行が再開されます。

処理で一時停止を挿入するには:

  1. 「コンポーネント」ウィンドウの「フロー制御」で、「待機」をクリックして、これをエディタの適切な場所のフローにドラッグします。

    「While」ノードが、条件付きブランチとともに表示されます。

  2. 新しい「待機」ノードを選択します。
  3. 「プロパティ」ウィンドウで「待機」タブをクリックします。
  4. 「期間」フィールドの横で、「式ビルダー」アイコンをクリックして、XPath式ビルダーを起動し、次の形式で期間のタイプxsd:durationに評価される式を定義します。

    PnYnMnDTnHnMnS (年、月、日、時、分、秒の数を指定し、日付と時刻はTで区切ります。)

  5. 待機ノードの名前を変更するには、ノードを選択し、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。
  6. 「説明」フィールドに、重要と思われるノートを入力します。
  7. JDeveloperのツールバーで、「保存」をクリックします。

10.6 JDeveloperでの割当て操作の追加

割当て操作には、割り当て、コピー、削除、挿入、Javaコールアウト、ログ、および置換があります。各割当ては、これらの1つ以上の操作から構成され、この操作はデザイン・ビューから割当てに追加できます。次に、分割-結合で使用できる割当て操作を示します。

  • 割当て: 変数にXQuery式またはXSLT式の結果を割り当てます。

  • コピー: XPath式で指定された情報を、ソース・ドキュメントから、宛先ドキュメントにコピーします。

  • 削除: XPath式で指定されたノードのセットを削除します。

    注意:

    Service Busの削除とは異なり、変数全体ではなくXPath式のみを分割-結合から削除できます。

  • 挿入: XPath式で選択したノードを基準として特定された場所にXQuery式の結果を挿入します。

  • Javaコールアウト: 検証、変換、ロギングなどの処理のJavaメソッドを呼び出します。

  • ログ: サーバー・ログ・ファイルに分割-結合データのログを指定の重大度で記録します。

  • 置換: XPath式で指定されたノードまたはノードのコンテンツを置き換えます。

10.6.1 割当て操作での変換および式について

様々なXQueryおよびXSLTリソースを使用して、割当て操作の値を導出する変換および式を定義できます。ほとんどの割当て操作では次の手法がサポートされます。詳細は、次に示すリンクで確認できます。

注意:

分割-結合エディタの割当て操作は、パイプラインの対応するアクションと同じです。ただし、重要な相違点の1つとして、XQuery、XSLTまたはXPathエディタを使用して、分割-結合コンテキストの式を編集する場合に、分割-結合に対して内部の変数およびネームスペースのみが使用可能であるという点があります。

10.6.2 割当て操作の式の解決

分割-結合における割当て機能は、XPath、XQueryおよびXSLT式を単純型の変数にすることで解決するWS-BPEL仕様に準拠しています。式を分割-結合にある変数にバインドするためのサポート対象の単純な型は、文字列、ブールおよび浮動小数です。割当て操作は、型の値を定義された変数型に変換します。

次に例を示します。

  • <order><number>4</number></order>を文字列で定義されたレスポンス変数($response.result)に割り当てる場合、Service Busでは、子要素および値を単純にコピーすることで<number>4</number>を文字列で返します。

  • <order><number>4</number></order>を文字列変数(myStrなど)にマップして、$myStr$response.resultに割り当てると、Service Busは$response.resultの文字列変数に割り当てる前にまず$myStrの値を文字列に変換するため、<result>4</result>を返します。

10.6.3 変数への値の割当て方法

割当てを使用してデータを操作するには、XSLTまたはXQueryの式やリソースを使用して変数を初期化および更新します。動的XSLTまたはXQueryも使用できます。

Service Busでは、インラインXQueryの変数をバインドするとき、型がxs:stringであると仮定します。このため、xs:stringと互換性のない定数の操作の場合に、解析エラーが発生する可能性があります。型の互換性を保証するためには明示的なXQueryキャストを使用します。たとえば、次のインラインXQueryは失敗します。$itemsTotalは型xs:doubleですが、xs:stringとしてバインドされ、10000でのテストで互換性がありません。

if ($itemsTotal < 10000) then . . .

このインラインXQueryが機能するようにするには、$itemsTotalxs:doubleに明示的にキャストします。

if (($itemsTotal cast as xs:double) < 10000) then . . .

文字列の結果または変数への割当て操作を作成するとき、式が文字列値を返すようにしてください。非String値をStringの結果またはStringのグローバル変数に割り当てると、WS-BPEL仕様で定められているようにMismatchedAssignmentFailure例外は発生しません。

変数に値を割り当てるには:

  1. 「コンポーネント」ウィンドウの「割当て操作」で、「割当て」をクリックして、これをエディタの変数を更新するフローの場所にドラッグします。
  2. 新しい「割当て」ノードを選択します。
  3. 「プロパティ」ウィンドウで「割当て」タブをクリックします。
  4. 「値」フィールドの横で、「式ビルダー」アイコンを選択するか、アイコンの横の下向き矢印をクリックして、変数値の導出に使用する変換のタイプを選択します。

    選択した変換の式ビルダーが表示されます。

  5. 変換を定義するか、使用するリソースを選択します。詳細は、「割当て操作での変換および式について」を参照してください。

    注意:

    現在のプロジェクトにまだ含まれていないXQueryまたはXSLTリソースを選択する場合、これらをインポートする必要があります。式ビルダーからリソースを選択すると、インポート・ダイアログが自動で表示されます。詳細は、「JDeveloperでリソースをインポートする方法」を参照してください。

  6. 値の割当て先の変数を指定するには、次のいずれかを実行します。
    • 既存の変数を選択するには、「変数」フィールドの使用可能なオプションのリストから変数名を選択します。

    • 新しい変数を作成するには、「変数」フィールドの横の「変数の作成」をクリックします。「グローバル変数とローカル変数を定義するには:」の説明に従い、「変数エイリアスの作成」ダイアログに入力します。.

  7. 「QoS」フィールドで、「ベスト・エフォート」(トランザクションのコンテキストで実行されない)または「必ず1回」(トランザクションで実行される)のいずれかを選択します。
  8. 割当てノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  9. 「説明」フィールドに、重要と思われるノートを入力します。
  10. JDeveloperのツールバーで、「保存」をクリックします。

10.6.4 ソース・ドキュメントから宛先ドキュメントへの値のコピー方法

コピー操作を使用すると、XPath式またはリテラル値で指定された情報を、ソース・ドキュメントから宛先ドキュメントにコピーできます。これは、分割-結合エディタに固有の操作です。

値をコピーするには:

  1. 「コンポーネント」ウィンドウの「割当て操作」で、「コピー」をクリックして、エディタのデータのコピー先となるフローの場所にドラッグします。
  2. 新しい「コピー」ノードを選択します。
  3. 「プロパティ」ウィンドウで「コピー」タブをクリックします。
  4. 宛先の既存の要素名を使用して、コピーした値を保持するには、「ソース要素の維持」を選択します。

    このオプションを選択しない場合は、宛先のソース要素の名前を使用して、コピーした値が保持されます。

  5. 「自: タイプ」フィールドで、コピー元の要素のタイプを選択します。
  6. 次のいずれかを行います。
    • 「式」、「変数」または「XMLフラグメント」を選択した場合、「値」フィールドの近くにある「式ビルダー」アイコンをクリックします。表示されるダイアログで式を定義します。

    • 「リテラル」を選択した場合、コピーするリテラル文字列を「値」フィールドに入力します。

  7. 「至: タイプ」フィールドで、コピー先の要素のタイプを選択します。
  8. 「値」フィールドまたは「問合せ」フィールドの下にある「式ビルダー」アイコンをクリックします。表示されるダイアログで式を定義します。
  9. コピー・ノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  10. 「説明」フィールドに、重要と思われるノートを入力します。
  11. JDeveloperのツールバーで、「保存」をクリックします。

10.6.5 一連のノードの削除方法

削除操作では、XPath式によって指定された一連のノードを削除できます。

注意:

Service Busの削除とは異なり、変数全体ではなくXPath式のみを分割-結合から削除できます。

一連のノードを削除するには:

  1. 「コンポーネント」ウィンドウの「割当て操作」で、「削除」をクリックして、これをエディタのノードを削除するフローの場所にドラッグします。
  2. 新しい「削除」ノードを選択します。
  3. 「プロパティ」ウィンドウで「削除」タブをクリックします。
  4. 「場所」フィールドで、XPath式の実行対象の変数を選択して、削除するノードを選択します。
  5. 「式ビルダー」アイコンをクリックして式エディタを起動し、削除するノードを指定するXPath式を定義します。
  6. 「QoS」フィールドで、「ベスト・エフォート」(トランザクションのコンテキストで実行されない)または「必ず1回」(トランザクションで実行される)のいずれかを選択します。
  7. 削除ノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  8. 「説明」フィールドに、重要と思われるノートを入力します。
  9. JDeveloperのツールバーで、「保存」をクリックします。

10.6.6 XQuery式の結果の挿入方法

挿入操作は、XPath式で選択されたノードを基準に指定された位置に、XQuery式の結果を挿入します。

XQuery式の結果を挿入するには:

  1. 「コンポーネント」ウィンドウの「割当て操作」で、「挿入」をクリックして、これをエディタの結果を挿入するフローの場所にドラッグします。
  2. 新しい「挿入」ノードを選択します。
  3. 「プロパティ」ウィンドウで「挿入」タブをクリックします。
  4. 「値」フィールドの横で、「式ビルダー」アイコンを選択するか、アイコンの横の下向き矢印をクリックして、変数内の指定の場所に挿入するデータの作成に使用する変換のタイプを選択します。

    選択した変換の式ビルダーが表示されます。

  5. 式ビルダーで、変換を定義するか、使用するリソースを選択します。詳細は、「割当て操作での変換および式について」を参照してください。

    注意:

    現在のプロジェクトにまだ含まれていないXQueryまたはXSLTリソースを選択する場合、これらをインポートする必要があります。式ビルダーからリソースを選択すると、インポート・ダイアログが自動で表示されます。詳細は、「JDeveloperでリソースをインポートする方法」を参照してください。

  6. 「位置」フィールドで、データの挿入位置を選択します。「の前に」、「の後に」、「の最初の子として」または「の最後の子として」の中から選択します。
  7. 「場所」フィールドで、データの挿入先の変数を選択するか、「変数の作成」をクリックして新しい変数を追加します。
  8. 「場所」フィールドの下にある「式ビルダー」アイコンをクリックしてXPath式ビルダーを起動し、選択するノードを指定する式を定義します。
  9. 「QoS」フィールドで、「ベスト・エフォート」(トランザクションのコンテキストで実行されない)または「必ず1回」(トランザクションで実行される)のいずれかを選択します。
  10. 挿入ノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  11. 「説明」フィールドに、重要と思われるノートを入力します。
  12. JDeveloperのツールバーで、「保存」をクリックします。

10.6.7 分割-結合でのJavaメソッドの呼出し方法

Javaコールアウト操作では、検証、変換、ロギングなどのJavaで処理するカスタム操作のために、分割-結合から静的Javaメソッドを呼び出すことができます。

分割-結合でJavaメソッドを呼び出すには:

  1. 「コンポーネント」ウィンドウの「割当て操作」で、「Javaコールアウト」をクリックして、これをエディタのコールアウトを使用するフローの場所にドラッグします。
  2. 新しい「Javaコールアウト」ノードを選択します。
  3. 「プロパティ」ウィンドウで「Javaコールアウト」タブをクリックします。
  4. 「メソッド」フィールドの横で、「参照」をクリックし、呼び出すメソッドを含むJARファイルに移動してそのファイルを選択してから、メソッドを選択します。

    「引数」表にメソッドの引数が表示されます。

  5. 「値」列で、「式ビルダー」アイコンをクリックするか、アイコンの横の下向き矢印をクリックして、変換タイプを選択します。

    選択した変換の式ビルダーが表示されます。

  6. 式を定義して、データを静的Javaメソッドの入力パラメータにマップします。詳細は、「割当て操作での変換および式について」を参照してください。

    注意:

    現在のプロジェクトにまだ含まれていないXQueryまたはXSLTリソースを選択する場合、これらをインポートする必要があります。式ビルダーからリソースを選択すると、インポート・ダイアログが自動で表示されます。詳細は、「JDeveloperでリソースをインポートする方法」を参照してください。

  7. 「戻る」フィールドで、Javaメソッドの結果値を含む変数をオプションのリストから選択します。変数が存在しない場合は、「変数の作成」をクリックして新しい変数を追加します。
  8. 「サービス・アカウント」フィールドで、「参照」をクリックして、Javaコールアウトを実行する場合に適切なサブジェクトをスレッドに配置するために使用するサービス・アカウントを選択します。
  9. 「QoS」フィールドで、「ベスト・エフォート」(トランザクションのコンテキストで実行されない)または「必ず1回」(トランザクションで実行される)のいずれかを選択します。
  10. Javaコールアウト・ノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  11. 「説明」フィールドに、重要と思われるノートを入力します。
  12. JDeveloperのツールバーで、「保存」をクリックします。

10.6.8 分割-結合データのログの記録方法

ログ操作により、サーバー・ログ・ファイルに特定の重大度の分割-結合データのログを記録できます。管理者は、ログ情報を使用して、記録したデータの重大度に基づく適切なアクションを行うことができます。

分割-結合データのログを記録するには:

  1. 「コンポーネント」ウィンドウの「割当て操作」で、「ログ」をクリックして、これをエディタのログ・エントリを作成するフローの場所にドラッグします。
  2. 新しい「ログ」ノードを選択します。
  3. 「プロパティ」ウィンドウで「ログ」タブをクリックします。
  4. 「コンテンツ」フィールドの横で、「式ビルダー」アイコンをクリックするか、このアイコンの横の下向き矢印をクリックして、変換タイプを選択します。

    選択した変換の式ビルダーが表示されます。

  5. ログを記録するデータを選択する式を定義します。詳細は、「割当て操作での変換および式について」を参照してください。

    注意:

    現在のプロジェクトにまだ含まれていないXQueryまたはXSLTリソースを選択する場合、これらをインポートする必要があります。式ビルダーからリソースを選択すると、インポート・ダイアログが自動で表示されます。詳細は、「JDeveloperでリソースをインポートする方法」を参照してください。

  6. 「概要」フィールドで、ログのノートを指定します。注釈は、式によって選択されたデータとともにログに記録されます。
  7. 「重大度」フィールドで、ログに対して次のいずれかの重大度レベルを選択します。
    • デバッグ

    • 情報

    • 警告

    • エラー

  8. ログ・ノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  9. 「説明」フィールドに、重要と思われるノートを入力します。
  10. JDeveloperのツールバーで、「保存」をクリックします。

10.6.9 ノードおよびそのコンテンツの置換方法

置換操作は、XPath式で指定されたノードまたはノードのコンテンツを置き換えます。

ノードまたはそのコンテンツを置き換えるには:

  1. 「コンポーネント」ウィンドウの「割当て操作」で、「置換」をクリックして、エディタのデータを置換するフローの場所にドラッグします。
  2. 新しい「置換」ノードを選択します。
  3. 「プロパティ」ウィンドウで「置換」タブをクリックします。
  4. 「場所」フィールドで、置換するデータを含む変数を選択するか、「変数の作成」をクリックして新しい変数を追加します。
  5. 「場所」フィールドの下にある「式ビルダー」アイコンをクリックしてXPath式ビルダーを起動し、置換するノードを指定する式を定義します。
  6. 「値」フィールドの横で、「式ビルダー」アイコンをクリックするか、このアイコンの横の下向き矢印をクリックして、変換タイプを選択します。

    選択した変換の式ビルダーが表示されます。

  7. 置換するデータを選択する式を定義します。詳細は、「割当て操作での変換および式について」を参照してください。

    注意:

    現在のプロジェクトにまだ含まれていないXQueryまたはXSLTリソースを選択する場合、これらをインポートする必要があります。式ビルダーからリソースを選択すると、インポート・ダイアログが自動で表示されます。詳細は、「JDeveloperでリソースをインポートする方法」を参照してください。

  8. 「置換」フィールドで、ノード全体を置換するには「ノード全体」を選択し、ノードのコンテンツのみを置換するには「ノードのコンテンツ」を選択します。
  9. 「QoS」フィールドで、「ベスト・エフォート」(トランザクションのコンテキストで実行されない)または「必ず1回」(トランザクションで実行される)のいずれかを選択します。
  10. ログ・ノードの名前を変更するには、「プロパティ」ウィンドウの「一般」タブをクリックして、一意の識別文字列を「名前」フィールドに入力します。

    新しい名前が、分割-結合定義エディタでノードの下に表示されます。

  11. 「説明」フィールドに、重要と思われるノートを入力します。
  12. JDeveloperのツールバーで、「保存」をクリックします。

10.7 Oracle Service Busコンソールでの分割-結合の操作

分割-結合はJDeveloperで作成して構成しますが、分割-結合をOracle Service Busコンソールにインポートしてコンソールのプロジェクトに追加できます。これらは、プロジェクト全体をインポートすることでもインポートできます。コンソールから、ディスパッチ・ポリシーの指定、XQueryバージョンの更新およびSLAアラートの定義を行うことができます。

10.7.1 コンソールへの分割-結合のインポート方法

コンソールで分割-結合を操作する前に、これをJDeveloperからエクスポートしてコンソールにインポートする必要があります。リソースをコンソールにインポートしたら、分割-結合定義エディタでこれを開き、特定のプロパティの構成やSLAアラート・ルールの定義を行うことができます。リソースのエクスポートおよびインポートについては、「Oracle Service Busコンソールでのリソースのインポートとエクスポート」を参照してください。

10.7.2 コンソールでの分割-結合の構成方法

Oracle Service Busコンソールで構成できるのは、分割-結合の特定のプロパティのみです。分割-結合の処理ロジックは構成できません。

コンソールで分割-結合を構成するには:

  1. プロジェクト・ナビゲータで、構成する分割-結合に移動します。
  2. 分割-結合を右クリックして、「開く」を選択します。

    分割-結合定義エディタに分割-結合が表示されます。

  3. 「説明」フィールドに、分割-結合に関する重要なノートを入力します。
  4. 「ディスパッチ・ポリシー」フィールドで、分割-結合の実行に使用するWebLogic Serverワーク・マネージャを選択します。
  5. 「スニペットのバージョン」フィールドで、分割-結合でXQueryを処理するためのXQueryのバージョンを選択します。
  6. 「保存」をクリックします。

10.7.3 分割-結合に対するサービス・レベル合意のルールの定義方法

サービス・レベル合意(SLA)のアラートを使用する場合、システム管理者は、分割-結合のヘルスを示す特定の条件が満たされるタイミングを把握できます。アラートは、エラー・カウント、メッセージ・カウント、経過時間、メッセージ処理の失敗率や成功率などの統計に基づき定義できます。SLAアラートの定義の詳細は、『Oracle Service Busの管理』のサービス・レベル合意のアラート・ルールの作成に関する項を参照してください。

10.8 静的および動的分割-結合のサンプル

この項では、サンプル・シナリオを使用して静的分割-結合および動的分割-結合を作成する方法について説明します。

10.8.1 静的な分割-結合の設計

このシナリオでは、テレビ、電話、インターネット・サービスを含む電話会社のケーブル・サービスのパッケージの注文を処理するService Availabilityという名前の新しい分割-結合を作成します。パッケージの注文を受信し、各種類のサービスに対して受注確認を返信するというのが、分割-結合での考え方になります。この例では、注文ごとに各タイプのサービスについて3つのメッセージ・リクエストがあるため、Service Availability静的分割-結合として設計されます。この例では、顧客はテレビとDSLサービスのみをリクエストします。

Service Availability分割-結合の作成には次の手順が含まれます。

新しい分割-結合の作成

割当ての追加

パラレル・ノードの追加

各ブランチに対する割当ての追加

サービスを呼び出すの追加

各ブランチに対する割当ての追加

分割-結合のエクスポートとテスト

10.8.1.1 新しい分割-結合の作成

注文の実行に使用するWSDL操作に基づいて分割-結合を作成します。この例では、WSDL操作を「telecom」と呼びます。

WSDL操作を選択すると、次の図に示すように、新しく作成された分割-結合のスケルトンが分割-結合エディタに表示されます。スケルトンは開始ノード、受信ノード、返信ノードから構成されます。「プロパティ」ウィンドウにあるラベルは、この特定の分割-結合の各ノードの固有の機能をより適切に反映したものに編集されます。

図10-5 新しい分割-結合

「図10-5 新しい分割-結合」の説明が続きます
「図10-5 新しい分割-結合」の説明

開始ノードには、最初に選択されたWSDL操作によって決定されたリクエスト変数とレスポンス変数が両方とも含まれます。受信ノードでは受信リクエスト・メッセージ(この例では3種類以下のケーブル・サービス)を受信し、返信ノードではレスポンス・メッセージを生成して、これをクライアントに戻します。

注意:

受信ノードには、これ以上の構成は必要ありません。同様に、返信では、エラー・フォルトを生成する場合(このシナリオには該当しない)を除き、これ以上の構成は必要ありません。

10.8.1.2 割当ての追加

最初の割当てPrepare Output Messageには、後からノードでその中のデータを操作きるような形でレスポンス変数を用意する割当て操作が含まれます。この出力メッセージは、分割-結合の最終的な返信ノードに中継され、その結果、元のクライアントに戻ります。

10.8.1.3 パラレル・ノードの追加

パラレル・ノードには、ケーブルTVの可用性の確認と、DSLの可用性の確認の2つの主要ブランチがあります。各ブランチはいくつかのアクションで構成されており、そのシーケンスと全体的な構成は両方のブランチで同じになっています。

図10-6 パラレル・ノード

「図10-6 パラレル・ノード」の説明が続きます
「図10-6 パラレル・ノード」の説明

10.8.1.4 各ブランチに対する割当ての追加

各パラレル・ブランチの最初の割当てであるPrepare Input Addressでは、その場所でサービスが利用できるかどうかを確認するために、受信した顧客アドレス・データを、参照されている変数にコピーします。この割当ては、各ブランチに対して同じになっており、これはブランチが追加される場合でも同様です。

10.8.1.5 サービスの呼出しの追加

次に外部サービスが呼び出されて、リクエストされたサービスのタイプが顧客のいる場所で利用可能であるかどうかがチェックされます。各ブランチには、1つのサービスを呼び出す、「TVの利用可能性のチェック」、および「DSLの利用可能性のチェック」が含まれます。それぞれの外部サービスの呼出しでは、顧客のアドレス(前の手順で初期化された変数に格納されている)が、その場所でのサービスの利用可能性と比較されます。結果は出力変数に格納され、次の手順であるブランチの最終的な割当てに渡されます。

10.8.1.6 各ブランチに対する割当ての追加

最終的な2つの割り当て、「出力メッセージのケーブルTVステータスの更新」「出力メッセージのDSLステータスの更新」では、外部サービス呼出しの結果を取得し、置換操作を使用して、これを出力メッセージに入れます。集約されたレスポンスは、これ以上の構成が必要でない最終的な返信ノードにある元のクライアントに送信されます。

10.8.1.7 分割-結合のエクスポートとテスト

分割-結合の設計が終了したら、これをテストと本番用にOracle Service Busコンソールにエクスポートできます。

図10-7 テスト前の完成した分割-結合

「図10-7 テスト前の完成した分割-結合」の説明が続きます
「図10-7 テスト前の完成した分割-結合」の説明

関連項目

10.8.2 動的な分割-結合の設計

このシナリオでは、個別の発注の数が(発注数が固定してる注文とは異なり)変化する、小売業者からの一括注文を処理する分割-結合を設計する場合を考えてみます。一括注文を受信し、その中にある各注文に受注確認を返信するというのが、分割-結合での考え方になります。個別の発注数リクエストの数は変化し、設計時にその数を知ることはできないので、これは動的な分割-結合になります。

この分割-結合の作成には次のタスクが含まれます。

新しい分割-結合の作成

割当ての追加

For Eachの追加

割当ての追加

サービスを呼び出すの追加

割当ての追加

エラー・ハンドラの追加

分割-結合のエクスポートとテスト

10.8.2.1 新しい分割-結合の作成

注文の実行に使用するWSDL操作に基づかない新しい分割-結合を作成します。この例では、WSDL操作を「batchOrders」と呼びます。この操作が選択されると、開始ノード、受信ノード、返信ノードから構成される新しく作成された分割-結合のスケルトンが、分割-結合エディタに表示されます。これらのラベルは、この特定の分割-結合の各ノードに固有の機能をより適切に反映するように、全般プロパティ・タブで編集されます。

図10-8 新しい分割-結合(ラベルの編集)

「図10-8 新しい分割-結合(ラベルの編集)」の説明が続きます
「図10-8 新しい分割-結合(ラベルの編集)」の説明

開始ノードである「注文の実行」には、リクエスト変数inputVarとレスポンス変数outputVarの両方が含まれます。受信ノードである「一括注文リクエストの受信」は、リクエスト変数(この例の場合は発注)の内容を初期化し、返信ノードである「注文の実行への返信」は、レスポンス変数に集約された受注確認に基づいてレスポンスをクライアントへ戻します。この例では、「注文の実行」には、個別の注文を承認するために呼び出される外部サービス「Order」へのコールアウトが含まれています。

注意:

受信ノードには、これ以上の構成は必要ありません。同様に、返信ノードには、エラー・フォルトを生成する場合(このシナリオには該当しない)を除き、これ以上の構成は必要ありません(フォルトの生成の詳細は、「返信の構成方法」を参照)。

10.8.2.2 割当ての追加

最初の割当てである「出力メッセージの用意」には、後からレスポンス変数(ここでは理解を容易にするために「出力メッセージ」というラベルになっています)をノード内にキャプチャしたデータで作業(つまり、変数へのコピー、挿入、割り当て、置換、削除)できるような形で用意する割当て操作が含まれます。この場合、データは受注確認やエラーで構成されます。この出力メッセージは、分割-結合の最終的な返信ノードに中継され、その結果、元のクライアントに戻ります。

10.8.2.3 For Eachの追加

For Eachである「注文全体で繰返し」には、一括注文内にある個別の注文を1つずつ解析して、承認のために外部プロキシに送信し、レスポンス内にある受注確認をキャプチャするロジックが含まれます。注文に問題がある場合、呼び出されたプロキシからエラーが送信され、エラー・ハンドラでキャプチャされます。次の図にFor Eachロジックのスコープ全体を示します。

図10-9 「注文全体で繰返し」というラベルのFor Eachノード

「図10-9 「注文全体で繰返し」というラベルのFor Eachノード」の説明が続きます
「図10-9 「注文全体で繰返し」というラベルのFor Eachノード」の説明

10.8.2.4 割当ての追加

割当て「発注の準備」は、受信発注リクエストを、次の手順で承認をチェックするために参照される変数にコピーします。

10.8.2.5 サービスの呼出しの追加

次に外部サービス「注文の有効性のチェック」が呼び出され、個別の発注ごとに承認を行います。注文が受け入れられる場合、サービスは受注確認で応答します。注文が受け入れられない場合、サービスはエラーで応答します。この結果は出力変数に格納され、次の手順で説明する最終的な割当てに渡されます。

10.8.2.6 割当ての追加

最終的な割当てである「出力メッセージの注文ステータスの更新」は、外部サービス呼出しの結果を取得し、挿入操作を使用してこの結果を出力メッセージにコピーします。集約されたレスポンスは、これ以上の構成が必要でない最終的な返信ノードにある元のクライアントに送信されます。

10.8.2.7 エラー・ハンドラの追加

エラー・ハンドラは、呼び出されたサービスから返されたすべてのエラーをキャプチャします。エラー・ハンドラは、エラーを取得し、割当て操作を使用してこれを出力メッセージに挿入します。

図10-10 エラー・ハンドラ

「図10-10 エラー・ハンドラ」の説明が続きます
「図10-10 エラー・ハンドラ」の説明

10.8.2.8 分割-結合のエクスポートとテスト

分割-結合の設計が終了したら、これをテストと本番用にOracle Service Busコンソールにエクスポートできます。

図10-11 テスト前の完成した分割-結合

「図10-11 テスト前の完成した分割-結合」の説明が続きます
「図10-11 テスト前の完成した分割-結合」の説明