この章では、Oracle JDeveloperを使用したパイプラインまたはメッセージ・フローを作成および構成する方法について説明します。項の内容は、パイプライン・ペア、条件付きブランチ、ステージ、操作ブランチ、ルート・ノードおよびエラー・ハンドラの追加および構成です。
メッセージ・フローの詳細は、「Oracle Service Busでのメッセージ・フローの作成」を参照してください。
この章の内容は次のとおりです。
プロジェクトのメッセージ・フローおよびデータ変換または検証を定義するパイプラインを追加します。パイプラインでエラーおよびレポートを定義することもできます。新しいパイプラインを作成すると、パイプライン構成からプロキシ・サービスを生成するオプションが追加されます。
プロキシ・サービスに対応するメッセージ・フローは、パイプラインによって処理されます。この項では、パイプライン・エディタを使用したパイプラインの表示方法について説明します。
1つのコール・チェーン内の2つのパイプラインで同じ共有変数を宣言する場合、これらは同じ変数を読み取り、変更します。つまり、パイプラインP1で共有変数var
を宣言し、パイプラインP2でも共有変数var
を宣言する場合、P1のvar
の変更はP2に表示され、逆も当てはまります。共有変数は、文字列、ブールまたはXMLのデータ型にする必要があります。
プロキシ・サービスでメッセージを受信して処理する場合、共有変数を使用する呼び出されたすべてのパイプラインは、その変数に対して同じ値を読書きします。プロキシで受信する以降のメッセージにより、呼び出されたパイプラインに共有変数の新しいインスタンスが作成されます。
共有変数は、ローカル・プロキシの呼出しと分割-結合コンポーネントの呼出しで機能します。たとえば、パイプラインP1およびP2で共有変数を宣言するとします。ここで、P1がローカル・プロキシ・サービスまたは分割-結合コンポーネントを呼び出し、このサービスまたはコンポーネントが同様にP2を呼び出す場合、P1とP2は引き続き共有変数を共有します。
次の制限事項が共有変数の使用に適用されます。
システム変数($body、$attachments、$operation、$inbound、$outbound
など)は共有できません。
変数は、ローカル以外のプロキシ呼出しで共有できません。たとえば、パイプラインでHTTPプロキシ・サービスを呼び出す場合、共有変数はこのコール間で伝播されません。
変数は、パイプラインと分割-結合リソース間で共有できません。
Javaとバイナリ・コンテンツ・タイプを使用する変数はサポートされません。たとえば、XML構造に<ctx:java-content/>
があるXML型変数は、共有変数としてサポートされません。
パイプラインには、パイプライン・ペア・ノード(プロキシ・サービス(またはサービスの処理用)のリクエストおよびレスポンス・パイプライン)と、ステージ、パイプラインおよびプロキシ・サービスに対して定義できるエラー・ハンドラ・パイプラインをゼロ個以上含めることができます。パイプラインは、1つまたは複数のステージを持つことができ、ステージはアクションを持ちます。
パイプライン・エディタを使用して、パイプラインのメッセージ・フローにパイプライン・ペアを追加します。
パイプラインにパイプライン・ペアを追加するには:
パイプライン・エディタで、開始ノード・アイコンを右クリックします。
表示されたコンテキスト・メニューから「中に挿入」→「PipelinePairNode」を選択します。パイプライン・ペア・ノードが挿入されます。
注意:
かわりに、「パイプライン・ペア」コンポーネントを「コンポーネント」ウィンドウからパイプライン・エディタの適切な場所にドラッグすることも選択できます。「パイプライン・ペア」コンポーネントは、「メッセージ・フロー」カテゴリの「ノード」セクションの下にあります。
パイプライン・ペア・ノードのデフォルト名を変更して説明を追加するには、次の操作を行います。
パイプライン・ペア・ノードをクリックし、それを選択します。「プロパティ」ウィンドウに、選択したコンポーネントのプロパティが表示されます。
注意:
「プロパティ」ウィンドウが表示されない場合は、「ウィンドウ」メイン・メニューから「プロパティ」を選択します。
「プロパティ」ウィンドウで、必要に応じて名前および説明を変更します。
Oracle JDeveloperツールバーで、「保存」をクリックします。
パイプラインにステージを追加するには、「JDeveloperでのパイプラインへのステージの追加」を参照してください。
パイプラインのステージにアクションを追加するには、「JDeveloperでのパイプラインのアクションの追加および編集」を参照してください。
パイプライン・エディタで、「JDeveloperでのパイプラインの表示と編集」の説明に従って、パイプラインの作成を続けます。
Oracle JDeveloperツールバーで、「保存」をクリックします。
ブランチ・ノードを使用すると、可能ないくつかのパスのうちの1つに限定して処理を進めることができます。分岐は、XPathベースの切替え表に基づいて実行されます。表の各ブランチは、条件(たとえば、<500
)を指定し、これが単一のXPath式(たとえば、$body
の./ns: PurchaseOrder/ns:totalCost
)に対してパイプラインの降順に評価されます。最初に満たされた条件によって、進むべきブランチが決定されます。満たされる分岐条件がない場合は、デフォルトのブランチに進みます。ブランチ・ノードでは、パイプライン内にいくつかの子孫を持つことができます(デフォルトのブランチを含め各ブランチに1つずつ)。
プロキシ・サービスがWSDLファイルに基づいておらず、複数のドキュメント・タイプを入力として受信する場合は、条件付きブランチ・ノードを使用することを検討できます。
条件付きブランチ処理は、単純でありながらユニークな文字列値のタグが付いたブランチをまとめたルックアップ表を基準に行われます。メッセージ・コンテキストの変数をそのノードのルックアップ変数として指定し、実行時に、この値を使用してどのブランチに進むかが判断されます。ルックアップ変数に一致するブランチがない場合は、デフォルトのブランチに進みます。ブランチ・ノードに到達する前にルックアップ変数の値を設定するように、プロキシ・サービスを設定する必要があります。
パイプライン・エディタを使用して、パイプラインのメッセージ・フローに条件付きブランチを追加します。
パイプラインに条件付きブランチを追加するには:
パイプライン・エディタで、開始ノード・アイコンまたは「ブランチ・ノード」アイコンを右クリックします。
表示されたコンテキスト・メニューから「中に挿入」→「条件付きブランチ」を選択します。条件付きブランチ・ノードが追加され、挿入したブランチ・ノードの後の既存のノードが、新しい条件付きブランチ・ノードのデフォルト・ブランチに移動します。
注意:
かわりに、「条件付きブランチ」コンポーネントを「コンポーネント」ウィンドウからパイプライン・エディタの適切な場所にドラッグすることも選択できます。「条件付きブランチ」コンポーネントは、「メッセージ・フロー」カテゴリの「ノード」セクションの下にあります。
条件付きブランチ・ノードのプロパティを変更するには、次のように実行します。
「条件付きブランチ」ノードをクリックし、それを選択します。「プロパティ」ウィンドウに、選択したコンポーネントのプロパティが表示されます。
注意:
「プロパティ」ウィンドウが表示されない場合は、「ウィンドウ」メイン・メニューから「プロパティ」を選択します。
「全般」セクションの下で、必要に応じて名前および説明を変更します。
「条件」セクションの下で、条件として使用するXPath式を指定します。XPath式ビルダーは、「fx」アイコンをクリックすることで起動できます。
Oracle JDeveloperツールバーで、「保存」をクリックします。
ブランチのプロパティを変更するには、次のように実行します。
ブランチ・ノードをクリックし、それを選択します。「プロパティ」ウィンドウに、選択したコンポーネントのプロパティが表示されます。
注意:
「プロパティ」ウィンドウが表示されない場合は、「ウィンドウ」メイン・メニューから「プロパティ」を選択します。
「名前」の下で、ブランチの名前を指定します。
「値」の下で、値として使用する演算子およびXPath式を指定します。XPath式ビルダーは、「fx」アイコンをクリックすることで起動できます。
Oracle JDeveloperツールバーで、「保存」をクリックします。
オプション:
新規ブランチの追加アイコンをクリックし、新規ブランチ・ノードを追加します。
ブランチを右クリックし、「削除」を選択してブランチを削除します。
Oracle JDeveloperツールバーで、「保存」をクリックします。
パイプライン・エディタで、「JDeveloperでのパイプラインの表示と編集」の説明に従って、パイプラインの作成を続けます。
Oracle JDeveloperツールバーで、「保存」をクリックします。
パイプラインでWeb Services Description Language (WSDL)ベースのプロキシ・サービスを定義する場合、操作固有の処理が必要になります。Service Busでは、操作に基づくブランチ・ノードを手動で構成するかわりに、操作に基づいて自動的に分岐するように構成された、最小限のブランチ・ノードが用意されています。つまり、操作ブランチ・ノードをパイプラインに作成すると、Oracle Service Busコンソールでは、WSDLに定義された操作がブランチ・ノード構成ページに表示されるため、これらの操作に基づいて分岐ロジックをすばやく構築できます。
ブランチ・ノードを使用すると、可能ないくつかのパスのうちの1つに限定して処理を進めることができます。分岐は、XPathベースの切替え表に基づいて実行されます。表の各ブランチは、条件(たとえば、<500
)を指定し、これが単一のXPath式(たとえば、$body
の./ns: PurchaseOrder/ns:totalCost
)に対してパイプラインの降順に評価されます。最初に満たされた条件によって、進むべきブランチが決定されます。満たされる分岐条件がない場合は、デフォルトのブランチに進みます。ブランチ・ノードでは、パイプライン内にいくつかの子孫を持つことができます(デフォルトのブランチを含め各ブランチに1つずつ)。
パイプライン・エディタを使用して、パイプラインのメッセージ・フローに操作ブランチを追加します。
パイプラインに操作ブランチを追加するには:
パイプライン・エディタで、開始ノードまたは「ブランチ・ノード」アイコンを右クリックします。
表示されたコンテキスト・メニューから「中に挿入」→「操作ブランチ」を選択します。操作ブランチ・ノードが追加され、挿入したブランチ・ノードの後の既存のノードが、新しい操作ブランチ・ノードのデフォルト・ブランチに移動します。
注意:
かわりに、「操作ブランチ」コンポーネントを「コンポーネント」ウィンドウからパイプライン・エディタの適切な場所にドラッグすることも選択できます。「操作ブランチ」コンポーネントは、「メッセージ・フロー」カテゴリの「ノード」セクションの下にあります。
操作ブランチ・ノードのプロパティを変更するには、次のように実行します。
操作ブランチ・ノードをクリックし、それを選択します。「プロパティ」ウィンドウに、選択したコンポーネントのプロパティが表示されます。
注意:
「プロパティ」ウィンドウが表示されない場合は、「ウィンドウ」メイン・メニューから「プロパティ」を選択します。
必要に応じて名前と説明を変更します。
Oracle JDeveloperツールバーで、「保存」をクリックします。
ブランチのプロパティを変更するには、次のように実行します。
ブランチ・ノードをクリックし、それを選択します。「プロパティ」ウィンドウに、選択したコンポーネントのプロパティが表示されます。
注意:
「プロパティ」ウィンドウが表示されない場合は、「ウィンドウ」メイン・メニューから「プロパティ」を選択します。
そのブランチによって表される「操作」を選択します。
Oracle JDeveloperツールバーで、「保存」をクリックします。
オプション:
新規ブランチの追加アイコンをクリックし、新規ブランチ・ノードを追加します。
ブランチを右クリックし、「削除」を選択してブランチを削除します。
パイプライン・エディタで、「JDeveloperでのパイプラインの表示と編集」の説明に従って、パイプラインの作成を続けます。
Oracle JDeveloperツールバーで、「保存」をクリックします。
リクエスト・パイプライン、レスポンス・パイプライン、およびエラー・ハンドラには、ステージを含めることができます。ステージでは、パイプラインを通過するメッセージを処理するアクションを構成します。
パイプライン・エディタを使用して、パイプラインのメッセージ・フローにステージを追加します。
パイプラインにステージを追加するには:
パイプライン・エディタで、パイプライン・ペア・ノードの「リクエスト・パイプライン」アイコンまたは「レスポンス・パイプライン」アイコンを右クリックします。
表示されたコンテキスト・メニューから「中に挿入」→「ステージ」を選択します。ステージ・ノードが追加されます。
注意:
かわりに、「ステージ」コンポーネントを「コンポーネント」ウィンドウからパイプライン・エディタの適切な場所にドラッグすることも選択できます。「ステージ」コンポーネントは、「メッセージ・フロー」カテゴリの「ノード」セクションの下にあります。
ステージのデフォルト名を変更して説明を追加するには、次を行います:
ステージ・ノードをクリックし、それを選択します。「プロパティ」ウィンドウに、選択したコンポーネントのプロパティが表示されます。
注意:
「プロパティ」ウィンドウが表示されない場合は、「ウィンドウ」メイン・メニューから「プロパティ」を選択します。
選択したステージ・ノードの「名前」および「説明」フィールドを編集します。
Oracle JDeveloperツールバーで、「保存」をクリックします。
ステージにアクションを追加するには、「ステージ」アイコンを右クリックし、表示されるコンテキスト・メニューから「中に挿入」→「ActionName」をクリックします。「JDeveloperでのパイプラインのアクションの追加および編集」を参照してください。
ステージにエラー処理を追加するには、「ステージ」アイコンを右クリックし、表示されるコンテキスト・メニューから「ステージ・エラー・ハンドラの追加」をクリックします。「JDeveloperでのエラー・ハンドラの追加」を参照してください。
「JDeveloperでのパイプラインの表示と編集」の説明に従って、パイプラインの作成を続けます。
Oracle JDeveloperツールバーで、「保存」をクリックします。
ルート・ノードでは、別のサービスとのリクエスト/レスポンス通信が実行されます。ルート・ノードはプロキシ・サービスに関するリクエスト処理とレスポンス処理の境界を表します。ルート・ノードがリクエスト・メッセージをディスパッチすると、リクエスト処理が終了したと見なされます。ルート・ノードがレスポンス・メッセージを受信したときに、レスポンス処理が始まります。ルート・ノードは、リクエスト・トランスフォーメーション、レスポンス・トランスフォーメーション、および条件付きルーティングに対応します。
ルート・ノードはリクエスト処理とレスポンス処理の境界を表すので、パイプライン内に子孫を持つことはできません。
パイプライン・エディタでは、ステージおよびルート・ノードの切取り、コピーおよび貼付けが可能です。
ステージまたはルート・ノードを切り取るには、そのアイコンを右クリックし、「切取り」または「コピー」を選択します。
このプロキシ・サービスのメッセージ・フロー内の異なるパイプライン・ペアから、または異なるプロキシ・サービスのメッセージ・フローから切り取ったりコピーしたステージを貼り付けるには、次のいずれかを行います。
ターゲットの「リクエスト・パイプライン」または「レスポンス・パイプライン」アイコンを右クリックして、「貼付け」をクリックします。
パイプラインの既存の「ステージ」アイコンを右クリックし、「貼付け」をクリックします。
別のパイプラインのメッセージ・フローから切り取ったりコピーしたルート・ノードを貼り付けるには、ターゲットの「ブランチ・ノード」アイコンをクリックして、「ルートの貼付け」をクリックします。
Service Busのリシーケンサは、関連はあるが順序どおりではないメッセージのストリームを連続した順序に並べ替えます。受信メッセージが到着すると、それらはランダムな順序になっています。リシーケンサは、順次または時系列の情報に基づきメッセージを順序付け、メッセージをターゲット・サービスに対して正しい手順で送信します。順序付けは、選択した順序付け戦略に基づき実行されます。
リシーケンサは、パイプライン・コンポーネント内で構成できます。次のサービス・タイプのパイプラインがサポートされます。
WSDL: リシーケンスは、リクエスト・タイプのみの操作に利用できます。
メッセージ・タイプ: リクエスト・メッセージ・タイプは「XML」、レスポンス・メッセージ・タイプは「なし」にします。
注意:
リシーケンサでは、「任意のXML」と「任意のSOAP」のサービス・タイプはサポートされません。WSDLベースのサービスでは、WSDLファイルは一方向であることが必要です。つまり、これに出力要素を含めることはできません。リシーケンス・パイプラインでの生成WSDLファイルの使用については、「JDeveloperでのサービスからのWSDLファイルの生成方法」を参照してください。
この項では、JDeveloperを使用してパイプラインでリシーケンサを構成する方法について説明します。
パイプラインでリシーケンスを有効にするには:
リシーケンスは、パイプライン・レベルまたは操作レベルのいずれかで定義できます。リシーケンス・レベルの値は、次のとおりです。
パイプライン: コンポーネント・レベルで指定した共通構成を使用してすべてのメッセージをリシーケンスします。コンポーネントに複数の操作がある場合、各操作のメッセージは、共有コンポーネント構成を使用して個別に順序付けられます。
コンポーネント・レベルのリシーケンスは、パイプライン・コンポーネントのすべての操作でリクエスト一方向メッセージをサポートする場合のみ許可されます。操作のサブセットのみがリクエスト一方向メッセージをサポートする場合、これらの操作に操作レベルのリシーケンスを個別に指定できます。
操作: WSDLベースのパイプラインの場合、リシーケンスは操作レベルで構成できます。各操作には異なるリシーケンサ構成を設定できます。リクエスト一方向メッセージをサポートする操作のみをリシーケンスできます。WSDL以外のパイプラインでは、操作レベルでリシーケンサを構成できません。
この項では、様々なリシーケンス・モードの構成方法を示します。各種リシーケンス・モードの詳細は、『Oracle SOA SuiteでのSOAアプリケーションの開発』のリシーケンス順序に関する項を参照してください。デフォルトでは、グループIDの文字数制限は1000、IDの文字数制限は100です。
標準リシーケンサを構成するには:
表16-1 標準リシーケンスのオプション
フィールド名 | 説明 | デフォルト値 | 必須 |
---|---|---|---|
グループ |
グループ化が行われる受信メッセージのフィールドを指し示すXQuery式。値を入力しない場合、すべてのメッセージが1つのデフォルト・グループに配置されます。 右側の「式ビルダー」アイコンをクリックし、XQuery式ビルダーを起動します。 |
N/A |
N |
ID |
リシーケンスが行われる受信メッセージのフィールドを指し示すXQuery式。 右側の「式ビルダー」アイコンをクリックし、XQuery式ビルダーを起動します。 |
N/A |
Y |
開始 |
ID順序の開始番号。 |
1 |
N |
増分 |
ID順序の増分。 |
1 |
N |
タイムアウト |
予期されているメッセージを待機する期間(秒単位)。タイムアウトが発生すると、再シーケンサはグループをタイムアウトとしてロックします。 デフォルト値の0の場合、デフォルトではグループに対してタイムアウトが発生することはありません。 |
0 |
N |