ヘッダーをスキップ
Oracle Fusion Middleware Oracle SOA Suite開発者ガイド
11g リリース1 (11.1.1.5.0)
B56238-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 BPELプロセスからの非同期Webサービスの起動

この章では、非同期Webサービスのコール方法について説明します。非同期メッセージ形式は、サービス(融資処理など)でクライアント・リクエストの処理に時間がかかる環境で役に立ちます。また、非同期サービスは、同期サービスよりも優れた耐障害性を持ち、かつスケーラブルなアーキテクチャも提供します。

項目は次のとおりです。

8.1 非同期Webサービスの起動に関する概要

この項では、United Loanという企業での非同期Webサービスの起動について説明します。United Loanは、クライアントの融資申請リクエストを処理して融資提案を返す非同期Webサービスを公開します。このユースケースでは、BPELプロセス・サービス・コンポーネントとこの非同期融資申請承認Webサービスを統合する方法について説明します。

このユースケースでは、非同期サービスからの情報をリクエストし、レスポンスを受け取るための基本的な設計概念について説明します。この例のUnited Loanの非同期サービスは、別のBPELプロセス・サービス・コンポーネントです。しかし、適切に設計されたWebサービスであれば、同じBPELコールで対話できます。対象のWebサービスのWSDLファイルには、必要な情報のリクエストと受信に必要な情報が含まれています。

非同期Webサービスでは、次のアクションが(優先度に従って)実行されます。

  1. assignアクティビティにより融資申請が準備されます。

  2. invokeアクティビティにより融資申請が開始されます。申請の内容は、リクエスト変数に入力されます。このリクエスト変数が非同期融資処理Webサービスに送信されます。

    融資申請の開始時、申請を開始したクライアントとパートナ・リンクに固有の相関IDも、融資処理Webサービスに送信されます。相関IDにより、適切な融資提案レスポンスが、対応する融資申請のリクエスト元に確実に返されます。

  3. その後、融資処理Webサービスにより、適切なレスポンスがreceiveアクティビティ(相関IDを使用して追跡)に送信されます。

  4. assignアクティビティにより融資申請提案が読み取られます。

後続の各項では、非同期機能の詳細を説明します。

8.2 非同期Webサービスの起動

この項では、非同期機能をBPELプロセス・サービス・コンポーネントに追加するためのタスクの概要を説明します。

8.2.1 非同期Webサービスの起動方法

次の手順を実行し、Webサービスを非同期で起動します。

  • パートナ・リンクの追加

  • invokeアクティビティの追加

  • receiveアクティビティの追加

  • assignアクティビティの作成

8.2.1.1 非同期サービスに対するパートナ・リンクの追加

ここでは、融資申請承認Webサービスに対するパートナ・リンク(この例ではLoanServiceという名前)をBPELプロセスに作成する方法について説明します。

非同期サービスに対してパートナ・リンクを追加する手順は、次のとおりです。

  1. SOAコンポジット・エディタで、BPELプロセスを「コンポーネント・パレット」の「サービス・コンポーネント」セクションからデザイナにドラッグします。

    「BPELプロセスの作成」ダイアログが表示されます。

  2. ダイアログの説明に従って、BPELプロセス・サービス・コンポーネントを作成します。

  3. 完了後に「OK」をクリックします。

  4. SOAコンポジット・エディタのSOAコンポジット・アプリケーションで、BPELプロセス・サービス・コンポーネント(この例では、LoanBrokerというコンポーネント名)をダブルクリックします。

    Oracle BPELデザイナが表示されます。

  5. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

  6. 「パートナ・リンク」アイコンを適切な「パートナ・リンク」スイムレーンにドラッグします。

    「パートナ・リンクの作成」ダイアログが表示されます。

  7. 次の詳細を入力して、パートナ・リンクを作成し、融資申請承認Webサービスを選択します。

    • 名前

      パートナ・リンクの名前を入力します(この例ではLoanServiceを入力します)。

    • プロセス

      BPELプロセス・サービス・コンポーネント名が表示されます(この例ではLoanBrokerが表示されます)。

    • WSDL URL

      使用するWeb Services Description Language(WSDL)ファイルを入力します。このフィールドの上にある「SOAリソース・ルックアップ」アイコンをクリックして、正しいWSDLを検索します。

    • パートナ・リンク・タイプ

      BPELプロセス・サービス・コンポーネントのインタフェース先である外部サービスを指します。リストから選択します(この例ではLoanServiceを選択します)。

    • パートナ・ロール

      外部ソースのロールです(プロバイダなど)。リストから選択します(この例ではLoanServiceProviderを選択します)。

    • マイ・ロール

      この相互作用におけるBPELプロセス・サービス・コンポーネントのロールです。リストから選択します(この例ではLoanServiceRequesterを選択します)。

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

    融資申請承認Webサービス(United Loan)の新しいパートナ・リンクがデザイナのスイムレーンに表示されます。

8.2.1.2 invokeアクティビティの追加

次の手順に従って、invokeアクティビティとrequestという名前のグローバル入力変数を作成します。このアクティビティは、融資申請承認Webサービス(United Loan)を使用して、非同期BPELプロセス・サービス・コンポーネント・アクティビティを開始します。融資申請承認Webサービスは、request入力変数を使用してクライアントからの融資申請を受け取ります。

invokeアクティビティを追加する手順は、次のとおりです。

  1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

  2. invokeアクティビティをreceiveアクティビティの下にドラッグします。

  3. 「構造」ウィンドウに移動します。この例では、「構造」ウィンドウから変数を作成する手順を説明しますが、「Invoke」ダイアログの「入力」フィールドと「出力」フィールドの右側にある「追加」アイコンをクリックして変数を作成することもできます。

  4. 「変数」を右クリックし、「すべての子ノードを開く」を選択します。

  5. ツリーの2つ目の「変数」フォルダで右クリックし、「変数の作成」を選択します。

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

  6. 変数名を入力し、表示されたオプションから「メッセージ・タイプ」を選択します。

    • タイプ

      このオプションでは、XMLスキーマの単純型(文字型やブール型など)を選択できます。

    • メッセージ・タイプ

      このオプションでは、パートナ・リンクまたは現在のBPELプロセス・サービス・コンポーネントのプロジェクトWSDLファイルに対するWSDLメッセージ・ファイル定義を選択できます(レスポンス・メッセージやリクエスト・メッセージなど)。メッセージ・タイプと関連付けられている変数をinvoke、receiveまたはreplyアクティビティの入力変数または出力変数として指定できます。

      メッセージ・タイプを表示するには、「メッセージ・タイプ」オプションを選択し、「参照」アイコンを選択して「タイプ・チューザ」ダイアログを表示します。ここから選択するために「メッセージ・タイプ」ツリーを開きます。この例では、「メッセージ・タイプ」「パートナ・リンク」「Loan Service」「LoanService.wsdl」「メッセージ・タイプ」「LoanServiceRequestMessage」を順に選択します。

    • 要素

      このオプションでは、現在のBPELプロセス・サービス・コンポーネントのプロジェクト・スキーマ・ファイルまたはプロジェクトWSDLファイルのXMLスキーマ要素、またはパートナ・リンクのXMLスキーマ要素を選択できます。

    図8-1に、「変数の作成」ダイアログを示します。

    図8-1 「変数の作成」ダイアログ

    図8-1の説明が続きます
    「図8-1 「変数の作成」ダイアログ」の説明

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

  8. invokeアクティビティをダブルクリックし、「Invoke」ダイアログを表示します。

  9. 「Invoke」ダイアログで、「パートナ・リンク」リストからパートナ・リンク(この例では「LoanService」)を選択し、「操作」リストから「initiate」を選択します。

  10. 「入力」フィールドの右で、2番目のアイコンをクリックし、ステップ6で作成した入力変数を選択します。

    「変数チューザ」ダイアログが表示され、変数の選択が可能になります。

    出力変数はreceive操作で返されるため、指定していません。invokeアクティビティが作成されました。

    invokeアクティビティの詳細は、第8.2.2.5項「invokeアクティビティとreceiveアクティビティ」を参照してください。

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

8.2.1.3 receiveアクティビティの追加

次の手順に従って、receiveアクティビティとresponseという名前のグローバル出力変数を作成します。このアクティビティは、融資申請承認Webサービスのコールバック処理を待機します。融資申請承認Webサービスは、この出力変数を使用して、融資提案結果をクライアントに送信します。

receiveアクティビティを追加する手順は、次のとおりです。

  1. 「コンポーネント・パレット」から、receiveアクティビティを、第8.2.1.2項「invokeアクティビティの追加」で作成したinvokeアクティビティの直後にドラッグします。

  2. 第8.2.1.2項「invokeアクティビティの追加」のステップ3からステップ7と同様の手順で、「変数の作成」ダイアログを開き、受信情報を格納する変数を作成します。

    図8-2に、BPEL 1.1の「変数の作成」ダイアログを示します。

    図8-2 「変数の作成」ダイアログ

    図8-2の説明が続きます
    「図8-2 「変数の作成」ダイアログ」の説明


    注意:

    BPEL仕様のバージョン2.0をサポートするBPELプロジェクトでは、「変数の作成」ダイアログに、変数タイプのインラインを(変数、式、リテラル、パートナ・リンク、プロパティなどとして)初期化できる「初期化」タブがあります。詳細は、第6.5.2項「BPEL 2.0のインラインfrom-specを使用した変数の初期化」を参照してください。

  3. receiveアクティビティをダブルクリックし、名前をreceive_invokeに変更します。

  4. 「パートナ・リンク」リストからパートナ・リンクを選択します(この例では「LoanService」を選択します)。

  5. 「操作」リストから「onResult」を選択します。「インスタンスの作成」チェック・ボックスは選択しないでください。

  6. 第8.2.1.2項「invokeアクティビティの追加」のステップ3からステップ7で作成した変数を選択します。

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

    receiveアクティビティと出力変数が作成されます。BPELファイル(この例ではLoanBroker.bpel)の最初のreceiveアクティビティが最初のBPELプロセス・インスタンス・サービス・コンポーネント・インスタンスを作成したため、2つ目のインスタンスを作成する必要はありません。

8.2.1.4 その他のアクティビティの実行

非同期固有のタスクに加え、次のタスクを実行する必要があります。

  • クライアントの融資申込書のinput変数ペイロードを融資申請承認Webサービスのrequest変数ペイロードにコピーする、データ操作用の最初のassignアクティビティを、invokeアクティビティの前に作成します。

  • 受け取るクライアントのoutput変数に融資申請承認Webサービスの融資申請結果のresponse変数ペイロードをコピーする、データ操作用の2番目のassignアクティビティを、receiveアクティビティの後ろに作成します。

8.2.2 非同期Webサービス起動時の処理内容

この項では、非同期Webサービス起動時の処理内容について説明します。

8.2.2.1 WSDLファイルのportTypeセクション

WSDLファイル(この例ではLoanService)のportTypeセクションは、非同期サービスに使用するポートを定義します。

非同期サービスにはポート・タイプが2つ定義されます。各ポート・タイプは一方向操作を実行します。この例では、1つのポート・タイプが非同期プロセスに応答し、もう1つのポート・タイプが非同期レスポンスを使用してクライアントをコールバックします。例8-1では、portType LoanServiceCallbackがクライアントの融資申請リクエストを受け取り、portType LoanServiceが融資提案レスポンスを使用してクライアントを非同期でコールバックします。

例8-1 portType定義

<!-- portType implemented by the LoanService BPEL process -->
   <portType name="LoanService">
      <operation name="initiate">
         <input message="tns:LoanServiceRequestMessage"/>
      </operation>
   </portType>
<!-- portType implemented by the requester of LoanService BPEL process
for asynchronous callback purposes
-->
   <portType name="LoanServiceCallback">
      <operation name="onResult">
         <input message="tns:LoanServiceResultMessage"/>
      </operation>
   </portType>

8.2.2.2 WSDLファイルのpartnerLinkTypeセクション

WSDLファイル(この例ではLoanService)のpartnerLinkTypeセクションは、BPELプロセス・サービス・コンポーネントの次の特性を定義します。

  • 果たすロール(操作)

  • 対話でメッセージを受信するために提供するportType

非同期サービスのパートナ・リンク・タイプには、Webサービス・プロバイダに対するロールとクライアント・リクエスタに対するロールの2つのロールがあります。

例8-2では、LoanServiceProviderロールおよびLoanService portTypeは、クライアント・リクエスト・メッセージに使用され、LoanServiceRequesterロールおよびLoanServiceCallback portTypeは、レスポンス・メッセージをクライアントに非同期で返す(コールバックする)ために使用されます。

例8-2 partnerLinkType定義

<plnk:partnerLinkType name="LoanService">
        <plnk:role name="LoanServiceProvider">
            <plnk:portType name="client:LoanService"/>
        </plnk:role>
        <plnk:role name="LoanServiceRequester">
            <plnk:portType name="client:LoanServiceCallback"/>
        </plnk:role>
    </plnk:partnerLinkType>

2つのポート・タイプ(invokeアクティビティのportType="services:LoanService"receiveアクティビティのportType="services:LoanServiceCallback")は、この1つの非同期BPELプロセス・サービス・コンポーネントに結合されます。基本的に、ポート・タイプは実行される一連の操作です。このBPELプロセス・サービス・コンポーネントの場合、実行する操作は2つ(invokeアクティビティのinitiatereceiveアクティビティのonResult)あります。

8.2.2.3 BPELファイルのパートナ・リンク・セクション

サービスをBPELからコールするには、プロセスとWebサービスの連携方法をBPELファイルで定義する必要があります。partnerLinksセクションを表示します。プロセスが相互作用するサービスはパートナ・リンクとして設計されます。各パートナ・リンクは、partnerLinkTypeによって定義されます。

各パートナ・リンクには名前が付けられています。この名前は、そのパートナ・リンクによるすべてのサービス相互作用に使用されます。これは、レスポンスを、同じタイプの同時リクエストに対する異なるパートナ・リンクに相関する場合に重要です。

非同期プロセスは、クライアントへのコールバックに2番目のパートナ・リンクを使用します。この例では、2番目のパートナ・リンクLoanServiceが融資申請承認Webサービスによって使用されます。例8-3に例を示します。

例8-3 partnerLink定義

  <!-- This process invokes the asynchronous LoanService. -->

    <partnerLink name="LoanService"
             partnerLinkType="services:LoanService"
             myRole="LoanServiceRequester"
             partnerRole="LoanServiceProvider"/>
  </partnerLinks>

属性myRoleは、クライアントのロールを示します。属性partnerRoleは、この対話におけるパートナのロールを示します。非同期プロセスでは、各partnerLinkTypemyRole属性とpartnerRole属性があります。

8.2.2.4 コンポジット・アプリケーション・ファイル

composite.xmlファイルには、例8-4に示すように、融資申請承認Webサービスが表示されます。

例8-4 融資申請承認Webサービス

<component name="LoanBroker">
    <implementation.bpel process="LoanBroker.bpel"/>
</component>

パートナ・リンクの作成手順の詳細は、第8.2.1.1項「非同期サービスに対するパートナ・リンクの追加」を参照してください。

8.2.2.5 invokeアクティビティとreceiveアクティビティ

variablesおよびsequenceセクションを表示します。ここでは特に、invokeアクティビティとreceiveアクティビティの2つの領域に注目します。

  • invokeアクティビティは、同期Webサービスを起動(第7章「BPELプロセスからの同期Webサービスの起動」を参照)するか、または非同期サービスを開始します。

    invokeアクティビティにはvariableセクションで定義されたrequestグローバル入力変数が含まれます。requestグローバル入力変数は融資申請承認Webサービスで使用されます。この変数には、最初の融資申込書の内容が格納されます。

  • 融資申請承認Webサービスからの非同期コールバックを待機するreceiveアクティビティ。receiveアクティビティにはvariablesセクションで定義されたresponseグローバル出力変数が含まれます。この変数には、融資提案レスポンスが格納されます。receiveアクティビティは、サービスからのコールバック・メッセージを非同期に待機します。BPELプロセス・サービス・コンポーネントは、コールバック・メッセージの到着を待機中、デハイドレーション(圧縮して格納)されます。

例8-5に例を示します。

例8-5 invokeアクティビティとreceiveアクティビティ

  <variables>

    <variable name="request"
               messageType="services:LoanServiceRequestMessage"/>
    <variable name="response"
               messageType="services:LoanServiceResultMessage"/>
  </variables>

<sequence>


    <!-- initialize the input of LoanService -->
    <assign>
    <!--  initiate the remote process -->
    <invoke name="invoke" partnerLink="LoanService"
        portType="services:LoanService"
        operation="initiate" inputVariable="request"/>

    <!--  receive the result of the remote process -->
    <receive name="receive_invoke" partnerLink="LoanService"
        portType="services:LoanServiceCallback"
        operation="onResult" variable="response"/>

invokeアクティビティによって非同期サービスが開始されると、Web Services Addressing(WS-Addressing)(第8.4項「非同期サービスでのWS-Addressingの使用」で説明)を使用して、クライアント・リクエストに固有の相関IDが送信されます。複数のプロセスがサービス・コールバックを待機している可能性があるため、サーバーでは、どのBPELプロセス・サービス・コンポーネント・インスタンスが融資申請承認Webサービスからのコールバック・メッセージを待機しているかを把握する必要があります。相関IDによって、サーバーは、レスポンスを適切なリクエスト・インスタンスと関係付けることができます。

8.2.2.6 新しいインスタンスを開始するためのcreateInstance属性

最初のreceiveアクティビティには、createInstance属性があります。この最初のreceiveアクティビティでは、createInstance要素はyesに設定されています。これにより、新しいBPELプロセス・サービス・コンポーネント・インスタンスが起動されます。対話のためには、少なくとも1つのインスタンスが起動している必要があります。このため、2番目のreceiveアクティビティではcreateInstance変数をnoに設定します。

例8-6に、createInstance属性のソース・コードを示します。

例8-6 createInstance属性

    <!-- receive input from requester -->
    <receive name="receiveInput" partnerLink="client"
             portType="tns:LoanBroker"
             operation="initiate" variable="input"
             createInstance="yes"/>

8.2.2.7 長期間にわたる非同期プロセスを保持するためのデハイドレーション・ポイント

非同期コールバックの待機中、長期間にわたる非同期プロセスとその現在の状態の情報をデータベース内に自動的に保存するには、データベースをデハイドレーション・ストアとして使用します。データベースにプロセスを格納することにより、プロセスを維持し、システムの停止やネットワークの問題が発生した場合の状態や信頼性の低下を防ぎます。この機能により、BPELプロセス・サービス・コンポーネントの信頼性とスケーラビリティの両方が向上します。また、クラスタリングおよびフェイルオーバーのサポートにもこの機能を使用できます。

invokeアクティビティとreceiveアクティビティの間にこのポイントを挿入します。dehydrateアクティビティを使用してデハイドレーション・ポイントを明示的に指定することもできます。詳細は、A.2.8項「dehydrateアクティビティ」を参照してください。

8.2.2.8 複数のランタイム・エンドポイント・ロケーション

Oracle SOA Suiteでは、パートナ・リンクの複数のエンドポイント・ロケーションの指定がサポートされています。この機能は、最初のエンドポイントが停止した場合に、フェイルオーバーするのに便利です。パートナ・リンクの代替エンドポイント・ロケーションを提供するには、composite.xmlファイルにlocation属性を追加します。例8-7に例を示します。

例8-7 代替のランタイム・エンドポイント・ロケーション

<reference name="HeaderService ...>
<binding.ws port="http://services.otn.com/HelloWorldApp#wsdl.endpoint(client/
  HelloWorldService_pt)"
location="http://server:port/soa-infra/services/default/ 
 HelloWorldService!1.0/client?WSDL">
<property name="endpointURI">http://jsmith.us.oracle.com:80/a.jsp 
@http://myhost.us.oracle.com:8888/soa-infra/services/HelloWorldApp/HelloWorld!
1.0*2007-10-22_14-33-04_195/client
 </property>
</binding.ws>
</reference>

8.2.3 BPEL 2.0 IMAサポートの制限に関する注意事項

receiveアクティビティは一種のインバウンド・メッセージ・アクティビティ(IMA)です。IMAのその他の例は次のとおりです。

  • scopeアクティビティ(BPEL 1.1)またはpickアクティビティのonMessageブランチ

  • BPEL 2.0のscopeアクティビティのonEventブランチ

BPEL 2.0仕様では、複数のIMAを相互に使用する、または拡張アクティビティから導出した他のIMAとともに使用することができます。実行時の動作を一定に保つために、BPEL 2.0仕様ではinitiate属性をjoinに設定した相関セットを使用できます。ただし、Oracle BPEL Process ManagerにおけるBPEL 2.0仕様では、この動作がサポートされていません。複数のIMAをサポートする唯一の方法は、それらをpickアクティビティのonMessageブランチとしてコーディングする(つまり、createInstanceyesに設定する)ことです。また、Oracle BPEL Process Managerでは、複数IMAのその他の形、たとえば2つのブランチを持つflowアクティビティで、それぞれがreceiveアクティビティを持ち、createInstanceの設定がyesで、相関セットのinitiateの設定がjoinであるなどの形もサポートされていません。

解決方法として、次のように、交互に2つのreceiveアクティビティがある2つのBPELプロセスを設計する必要があります。

  • Process1: receive1の後にreceive2が続きます。receive1でのみ、createInstanceyesに設定されています。

  • Process2: receive2の後にreceive1が続きます。receive2でのみ、createInstanceyesに設定されています。

同じことが、receiveアクティビティとpickアクティビティ、または2つのpickアクティビティなど、IMAの他の組合せにも適用されます。

8.2.4 対話ID指定時の処理内容

invokeアクティビティ(およびreceiveアクティビティなどの他のアクティビティ、pickまたはscopeアクティビティのonMessageブランチ)の「対話ID」フィールドにオプションの対話ID値を入力することもできます。

対話IDは、非同期対話中にプロセス・インスタンスを識別します。デフォルトでは、BPELプロセス・サービス・エンジンにより、WSAアドレッシングで指定されているように、対話(複数のinvokeアクティビティおよびreceiveアクティビティにまたがる可能性があります)ごとに一意のIDが生成されます。必要に応じて、使用するサービス・エンジンに独自の値を指定できます。対話IDはbpelx:conversationId拡張要素で実装されます。

8.2.4.1 BPEL 1.1のbpelx:conversationId

例8-8に、BPELバージョン1.1をサポートするBPELプロジェクト内のbpelx:conversationId拡張要素の例を示します。bpelx:conversationId拡張要素はXPath式をとります。

例8-8 BPEL 1.1のbpelx:conversationId対話ID

<invoke ... bpelx:conversationId="$convId2">
</invoke>

<receive ... bpelx:conversationId="$convId2">
</receive>

<onMessage... bpelx:conversationId="$convId2">
</onMessage>

8.2.4.2 BPEL 2.0のbpelx:conversationId

例8-9に、BPELバージョン2.0をサポートするBPELプロジェクト内のbpelx:conversationId拡張要素の例を示します。bpelx:conversationId拡張要素はBPEL 2.0 XPath式をとります。

例8-9 BPEL 2.0のbpelx:conversationId対話ID

<invoke ...>
  <bpelx:conversationId>$convId1</bpelx:conversationId>
</invoke>

<receive ...>
  <bpelx:conversationId>$convId1</bpelx:conversationId>
</receive>

<onMessage ...>
  <bpelx:conversationId>$convId2</bpelx:conversationId>
</onMessage>

8.3 実行時の動的パートナ・リンクの使用

パートナ・リンクは、実行時にBPELで動的に構成できます。これは、BPELが起動するターゲット・サービスが実行するまでわからない場合に便利です。


注意:

動的パートナ・リンクはBPEL 1.1プロジェクトでのみサポートされます。

8.3.1 動的パートナ・リンクの実行時の追加方法と使用方法

  1. 同じportTypeを使用する複数のサービスが含まれているWSDLファイルを作成します。

  2. WSDLを使用するcomposite.xmlファイルに、参照バインディング・コンポーネントのエントリを作成します。

    <reference name="loanService">
      <interface.wsdl interface="http://services.otn.com#wsdl.interface(LoanService)"
    callbackInterface="http://services.otn.com#wsdl.interface(LoanServiceCallback)"
    />
        <binding.ws port=
           "http://services.otn.com#wsdl.endpoint(AmericanLoan/LoanService_pt)"/>
      </reference>
    

    注意:

    • binding.ws port設定の追加はオプションです。これは、BPELから渡されるプロパティによって、実行時にポートが上書きされるためです。

    • port設定がなく、この参照に関連付けられている具体WSDLのコンポジット・インポートもない場合は、location属性を使用して具体WSDLの場所を指定する必要があります。


  3. BPELファイルで、パートナ・リンクをプログラムで割り当てます。この例のUnitedLoanは、WSDLに定義されているサービスの1つです。

    <copy>
       <from>
         <EndpointReference
            xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing">
    <Address>http://myhost.us.oracle.com:9700/orabpel/default/UnitedLoan</Address>
        </EndpointReference>
       </from>
       <to partnerLink="LoanService"/>
    </copy> 
    

8.4 非同期サービスでのWS-Addressingの使用

ある時点でアクティブなインスタンスは多数存在する可能性があるため、サーバーはWebサービス・レスポンスに、対応する適切なBPELプロセス・サービス・コンポーネント・インスタンスを指示する必要があります。WS-Addressingを使用すると、非同期メッセージを識別して、非同期コールバックが確実に適切なクライアントを特定できるようにすることができます。

図8-3に、WS-Addressingの概要を示します。WS-Addressingは、非同期メッセージの相関にSimple Object Access Protocol(SOAP)ヘッダーを使用します。メッセージは、使用されるトランスポートまたはアプリケーションに依存しません。

図8-3 WS-Addressingヘッダーを使用したコールバック

図8-3の説明が続きます
「図8-3 WS-Addressingヘッダーを使用したコールバック」の説明

図8-3は、レスポンスが正しい宛先に送信されるように、メッセージがWSヘッダーとともに渡される様子を示しています。

この章の例では、相関にWS-Addressingを使用しています。メッセージの表示には、TCPトンネリングを使用できます。TCPトンネリングについては、第8.4.1.1項「プログラム間で交換されるメッセージのTCPトンネリングによる表示」で説明します。

WS-Addressingは、通常は通信プロトコルおよびメッセージ・システムで提供される次の情報を定義します。この情報は、トランスポートまたはアプリケーションに依存せずに処理されます。

8.4.1 非同期サービスでのWS-Addressingの使用方法

WS-Addressingは公開されている仕様であり、Oracle BPEL Process Managerでサポートされるデフォルトの相関方法です。WS-Addressingを使用するために、.bpelファイルおよび.wsdlファイルを編集する必要はありません。

8.4.1.1 プログラム間で交換されるメッセージのTCPトンネリングによる表示

プログラムとサービスの間で交換されるメッセージは、TCPトンネリングにより表示できます。これは、BPELプロセス・サービス・コンポーネント・フローとWebサービスの間で交換される正確なSOAPメッセージを表示する場合に、特に役立ちます。

SOAPメッセージを監視するには、フローとサービスの間にソフトウェア・リスナーを挿入します。フローはリスナー(TCPトンネル)と通信し、リスナーはサービスにメッセージを転送し、メッセージを表示します。同様に、サービスからのレスポンスはトンネルに返され、トンネルはレスポンスを表示してフローに返します。

サーバーとWebサービスの間で交換されたすべてのメッセージを表示する場合、該当するすべてのメッセージがサービスとの間で1回のリクエスト/リプライで交換されるため、同期サービスに対して必要なTCPトンネルは1つのみです。非同期サービスの場合、2つのトンネル(サービスの起動用に1つ、フローのコールバック・ポート用に1つ)を設定する必要があります。

8.4.1.1.1 同期サービス用のTCPリスナーの設定

Oracle BPEL Process Managerプロセスで開始される同期サービス用のTCPリスナーを設定する手順は、次のとおりです。

  1. Axis TCPモニター(tcpmon)のダウンロードおよびインストールの方法については、次のURLにアクセスしてください。

    http://ws.apache.org/commons/tcpmon/
    
  2. tcpmonの使用方法については、次のURLにアクセスしてください。

    http://ws.apache.org/axis/java/user-guide.html
    
  3. クラスパスにaxis.jarを設定します。

  4. tcpmonを開始します。

    C:\...\> java org.apache.axis.utils.tcpmon localport remoteHost
    port_on_which_remote_server_is_running
    
  5. composite.xmlファイルで、フローのbinding.wsの下にendpointURIプロパティを追加し、サービスのエンドポイントを上書きします。

  6. オペレーティング・システムのコマンド・プロンプトからantを使用して、プロセスをコンパイルおよびデプロイします。

    同じテクニックで、Axisや.NETなど、別のツール・キットからBPELプロセス・サービス・コンポーネントをWebサービスとして起動するために渡されるSOAPメッセージを参照できます。

8.4.1.1.2 非同期サービス用のTCPリスナーの設定

非同期サービスからのコールバックのSOAPメッセージを表示するTCPリスナーを設定する手順は、次のとおりです。

  1. ポートでのリスニングとOracle BPEL Process Managerポートの送信を実行するTCPリスナーを起動します。

    1. 「Oracle Enterprise Manager Fusion Middleware Control」を開きます。

    2. 「SOAインフラストラクチャ」メニューから、「SOA管理」「共有プロパティ」の順に選択します。

    3. 「コールバック・サーバーURL」に値を指定します。このURLは、サーバーによって非同期コールバック・アドレスの一部としてインボーカに送信されます。

  2. 「SOAインフラストラクチャ」メニューから、「管理」「システムMBeanブラウザ」の順に選択します。

  3. 「アプリケーション定義のMBean」oracle.soa.config「サーバー: soa_server」「SCAComposite」の順に展開します。

    soa_serverは、特定のサーバー・インスタンス名です(例: AdminServer)。

    サーバーにデプロイされているすべてのSOAコンポジット・アプリケーションが表示されます。

  4. 次の手順に従って、このプロパティをコンポジット・アプリケーションに設定します。このアクションにより、コンポジット・アプリケーションのすべてのバインディングにプロパティ設定が適用されます。

    1. コンポジットをクリックします。

    2. 「属性」タブが選択されていることを確認します。

    3. 「名前」列で、「プロパティ」をクリックします。

    4. 「追加」アイコンをクリックします。

    5. 新しく追加した「Element_number(リストの最後に表示されます)を開きます。

      numberは、最後のプロパティの番号の次の番号です。たとえば、プロパティ・リストに12個の要素があるときに新しいプロパティを追加すると、Element_13が表示されます。

    6. 「名前」フィールドに、oracle.webservices.local.optimizationと入力します。

    7. 「値」フィールドに、falseと入力します。

    8. 「複数」フィールドに、falseと入力します。

    9. 「適用」をクリックし、次に「戻る」をクリックします。

    10. 「操作」タブの「名前」列で、「保存」をクリックします。

    11. 「起動」をクリックして操作を実行します。

    12. 「戻る」をクリックするか、「システムMBeanブラウザ」ペインでノードをクリックします。


      注意:

      プロパティを追加、削除または更新した後は、「システムMBeanブラウザ」ページの右上隅にある「キャッシュされたツリー・データのリフレッシュ」アイコンをクリックすると、新しいデータを参照できます。

  5. 次の手順に従って、このプロパティを特定のバインディングに設定します。

    1. コンポジット・アプリケーションを開き、特定の「SCAComposite.SCAReference.SCABinding」フォルダにドリルダウンします。

    2. 「WSBinding」をクリックします。

    3. ステップ4bから4lを実行します。

  6. 非同期Webサービスを起動するフローを開始します。これを同期TCPトンネリング構成と組み合せると、サービス開始リクエストを最初のTCPトンネル経由で送信できます。

    非同期サービスからのコールバックは、TCPリスナーに表示されます。

Oracle JDeveloperユーザーは、組込みパケット・モニターを使用して、同期サービスと非同期サービスの両方についてSOAPメッセージを表示することもできます。

8.5 非同期サービスでの相関セットの使用

相関セットは、Webサービスのレスポンスを適切なBPELプロセス・サービス・コンポーネント・インスタンスに戻すための別の方法を提供します。相関セットを使用すると、非同期メッセージを識別して、非同期コールバックが確実に適切なクライアントを特定できるようにすることができます。

相関セットは、メッセージ本体の内容に基づいて非同期メッセージの相関を可能にするBPELメカニズムです。この方法を使用するには、.bpelファイルに相関セットを定義します。この方法は、WS-Addressingをサポートしないサービス用、または対話がA > B > AではなくA > B > C > Aという形式の場合など、一定の高度な対話パターン用に設計されています。

この項では、Oracle JDeveloperを使用して非同期サービスで相関セットを使用する方法について説明します。相関セットでは、メッセージ本体の内容に基づいて非同期メッセージを関係付けることができます。相関セットは、連携が単純なinvokeとreceiveアクティビティでない場合に定義します。この例では、invokeアクティビティが関連付けられていないreceiveアクティビティを3つ含むプロセスに相関セットを使用する方法を示します。

8.5.1 非同期サービスでの相関セットの使用方法

この項では、非同期サービスで相関セットを使用するための手順について説明します。

8.5.1.1 ステップ1: プロジェクトの作成

プロジェクトを作成する手順は、次のとおりです。

  1. Oracle JDeveloperを起動します。

  2. 「ファイル」メイン・メニューから「新規」「アプリケーション」の順に選択します。

  3. 「SOAアプリケーション」を選択し、「OK」をクリックします。

    SOAアプリケーションの作成ウィザードが表示されます。

  4. 「アプリケーション名」フィールドに、MyCorrelationSetAppと入力します。

  5. 残りのすべての設定に対するデフォルト値をそのまま使用し、「次へ」をクリックします。

  6. 「プロジェクト名」フィールドに、MyCorrelationSetCompositeと入力します。

  7. 残りのすべての設定に対するデフォルト値をそのまま使用し、「次へ」をクリックします。

  8. 「コンポジット・テンプレート」セクションで、BPELプロセスを使用するコンポジットを選択し、「終了」をクリックします。

    「BPELプロセスの作成」ダイアログが表示されます。

  9. 表8-1に示されている値を入力します。

    表8-1 「BPELプロセスの作成」ダイアログのフィールドと値

    フィールド

    名前

    MyCorrelationSetと入力します。

    テンプレート

    「非同期BPELプロセス」を選択します。

    SOAPサービスとして公開

    チェック・ボックスを選択します。プロセスを作成すると、SOAPサービスが「公開されたサービス」スイムレーンに表示されることに注意してください。このサービスは外部からコンポジット・アプリケーションへのエントリ・ポイントを提供します。


  10. 残りのすべての設定に対するデフォルト値をそのまま使用し、「OK」をクリックします。

8.5.1.2 ステップ2: パートナ・リンクとファイル・アダプタ・サービスの構成

次に、SOAPサービスを使用する3つのパートナ・リンクを作成します。

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

  • 融資申請読取り用のアダプタ・サービスを持つ最初のパートナ・リンクを作成します。

  • 申請レスポンス読取り用のアダプタ・サービスを持つ2番目のパートナ・リンクを作成します。

  • 顧客レスポンス読取り用のアダプタ・サービスを持つ3番目のパートナ・リンクを作成します。

8.5.1.2.1 最初のパートナ・リンクとファイル・アダプタ・サービスの作成

最初のパートナ・リンクとファイル・アダプタ・サービスを作成する手順は、次のとおりです。

  1. 「MyCorrelationSet」 BPELプロセスをダブルクリックします。

  2. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

  3. 最初の「パートナ・リンク」アクティビティをデザイナの右スイムレーンにドラッグします。

  4. 最上部の3つ目のアイコン(「サービス・ウィザード」アイコン)をクリックします。図8-4に示すように、この操作でアダプタ構成ウィザードが起動します。

    図8-4 アダプタ構成ウィザードの起動

    図8-4の説明が続きます
    「図8-4 アダプタ構成ウィザードの起動」の説明

  5. 「サービスまたはアダプタの設定」ダイアログで「ファイル・アダプタ」を選択し、「OK」をクリックします。

  6. 「ようこそ」ダイアログで「次へ」をクリックします。

  7. 「サービス名」ダイアログの「サービス名」フィールドにFirstReceiveと入力し、「次へ」をクリックします。

  8. 「アダプタ・インタフェース」ダイアログで、デフォルト設定をそのまま使用し、「次へ」をクリックします。

  9. 「操作」ダイアログで「操作タイプ」として「Read File」を選択し、「次へ」をクリックします。「操作名」フィールドには、Readが自動的に入力されます。

  10. 「着信ファイル用のディレクトリ(物理パス)」フィールドの上で「参照」をクリックします。

  11. ファイルの読取り元のディレクトリを選択します(この例ではC:\files\receiveprocess\FirstInputDirを選択します)。

  12. 「選択」をクリックします。

  13. 「次へ」をクリックします。

  14. 「ファイルのフィルタ処理」ダイアログで、適切なファイル・フィルタ・パラメータを入力します。

  15. 「次へ」をクリックします。

  16. 「ファイル・ポーリング」ダイアログで、適切なファイル・ポーリング・パラメータを入力します。

  17. 「次へ」をクリックします。

  18. 「メッセージ」ダイアログで「URL」フィールドの横にある「参照」をクリックして、「タイプ・チューザ」ダイアログを表示します。

  19. 適切なXSDスキーマ・ファイルを選択します。この例では、Book1_4.xsdはスキーマであり、スキーマ要素としてLoanApplが選択されています。

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

    「URL」フィールドと「スキーマ要素」フィールドに値が入力されます(この例ではそれぞれBook1_4.xsdLoanAppl)。

  21. 「次へ」をクリックします。

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

    「パートナ・リンク」ダイアログが再び表示されます。その他すべてのフィールドには値が自動的に入力されます。ダイアログは表8-2のようになります。

    表8-2 「パートナ・リンク」ダイアログのフィールドと値

    フィールド

    名前

    FirstReceive

    WSDL URL

    directory_path/FirstReceive.wsdl

    パートナ・リンク・タイプ

    Read_plt

    パートナ・ロール

    指定しません。

    マイ・ロール

    Read_role


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

8.5.1.2.2 2番目のパートナ・リンクとファイル・アダプタ・サービスの作成

2番目のパートナ・リンクとファイル・アダプタ・サービスを作成する手順は、次のとおりです。

  1. 2番目の「パートナ・リンク」アクティビティを「FirstReceive」パートナ・リンク・アクティビティの下にドラッグします。

  2. 最上部の3つ目のアイコン(「サービス・ウィザード」アイコン)をクリックします。

  3. 「サービスまたはアダプタの設定」ダイアログで「ファイル・アダプタ」を選択し、「OK」をクリックします。

  4. 「ようこそ」ダイアログで「次へ」をクリックします。

  5. 「アダプタ・タイプ」ダイアログで「ファイル・アダプタ」を選択し、「次へ」をクリックします。

  6. 「サービス名」ダイアログの「サービス名」フィールドにSecondFileReadと入力し、「次へ」をクリックします。この名前は、第8.5.1.2.1項「最初のパートナ・リンクとファイル・アダプタ・サービスの作成」のステップ7で入力した名前とは異なる必要があります。

  7. 「アダプタ・インタフェース」ダイアログで、デフォルト設定をそのまま使用し、「次へ」をクリックします。

  8. 「操作」ダイアログで「操作タイプ」として「Read File」を選択します。

  9. 「操作名」フィールドの名前をRead1に変更します。

  10. 「次へ」をクリックします。

  11. 「物理パス」として「ディレクトリ名は次の方法で指定します」を選択します。

  12. 「着信ファイル用のディレクトリ(物理パス)」フィールドの上で「参照」をクリックします。

  13. ファイルの読取り元のディレクトリを選択します(この例ではC:\files\receiveprocess\SecondInputDirと入力します)。

  14. 「選択」をクリックします。

  15. 「次へ」をクリックします。

  16. 「ファイルのフィルタ処理」ダイアログで、適切なファイル・フィルタ処理パラメータを入力します。

  17. 「次へ」をクリックします。

  18. 「ファイル・ポーリング」ダイアログで、適切なファイル・ポーリング・パラメータを入力します。

  19. 「次へ」をクリックします。

  20. 「メッセージ」ダイアログで「URL」フィールドの横にある「参照」をクリックして、「タイプ・チューザ」ダイアログを表示します。

  21. 適切なXSDスキーマ・ファイルを選択します。この例では、Book1_5.xsdはスキーマであり、スキーマ要素としてLoanAppResponseが選択されています。

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

    「URL」フィールドと「スキーマ要素」フィールドに値が入力されます(この例ではそれぞれBook1_5.xsdLoanAppResponse)。

  23. 「次へ」をクリックします。

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

    「パートナ・リンク」ダイアログが再び表示されます。その他すべてのフィールドには値が自動的に入力されます。ダイアログは表8-3のようになります。

    表8-3 「パートナ・リンク」ダイアログのフィールドと値

    フィールド

    名前

    SecondReceive

    WSDL URL

    directory_path/SecondFileRead.wsdl

    パートナ・リンク・タイプ

    Read1_plt

    パートナ・ロール

    指定しません。

    マイ・ロール

    Read1_role


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

8.5.1.2.3 3番目のパートナ・リンクとファイル・アダプタ・サービスの作成

3番目のパートナ・リンクとファイル・アダプタ・サービスを作成する手順は、次のとおりです。

  1. 3番目の「パートナ・リンク」アクティビティを「SecondReceive」パートナ・リンク・アクティビティの下にドラッグします。

  2. 最上部の3つ目のアイコン(「サービス・ウィザード」アイコン)をクリックします。

  3. 「サービスまたはアダプタの設定」ダイアログで「ファイル・アダプタ」を選択し、「OK」をクリックします。

  4. 「ようこそ」ダイアログで「次へ」をクリックします。

  5. 「アダプタ・タイプ」ダイアログで「ファイル・アダプタ」を選択し、「次へ」をクリックします。

  6. 「サービス名」ダイアログの「サービス名」フィールドにThirdFileReadと入力し、「次へ」をクリックします。この名前は、第8.5.1.2.2項「2番目のパートナ・リンクとファイル・アダプタ・サービスの作成」のステップ7および6で入力した名前とは異なる必要があります。

  7. 「アダプタ・インタフェース」ダイアログで、デフォルト設定をそのまま使用し、「次へ」をクリックします。

  8. 「操作」ダイアログで「操作タイプ」として「Read File」を選択します。

  9. 「操作名」フィールドの名前をRead2に変更します。この名前は一意である必要があります。

  10. 「次へ」をクリックします。

  11. 「物理パス」として「ディレクトリ名は次の方法で指定します」を選択します。

  12. 「着信ファイル用のディレクトリ(物理パス)」フィールドの上で「参照」をクリックします。

  13. ファイルの読取り元のディレクトリを選択します(この例ではC:\files\receiveprocess\ThirdInputDirと入力します)。

  14. 「選択」をクリックします。

  15. 「次へ」をクリックします。

  16. 「ファイルのフィルタ処理」ダイアログで、適切なファイル・フィルタ処理パラメータを入力します。

  17. 「次へ」をクリックします。

  18. 「ファイル・ポーリング」ダイアログで、適切なファイル・ポーリング・パラメータを入力します。

  19. 「次へ」をクリックします。

  20. 「メッセージ」ダイアログで「URL」フィールドの横にある「参照」をクリックして、「タイプ・チューザ」ダイアログを表示します。

  21. 適切なXSDスキーマ・ファイルを選択します。この例では、Book1_6.xsdはスキーマであり、スキーマ要素としてCustResponseが選択されています。

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

    「URL」フィールドと「スキーマ要素」フィールドに値が入力されます(この例ではそれぞれBook1_6.xsdCustResponse)。

  23. 「次へ」をクリックします。

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

    「パートナ・リンク」ダイアログが再び表示されます。その他すべてのフィールドには値が自動的に入力されます。ダイアログは表8-4のようになります。

    表8-4 「パートナ・リンク」ダイアログのフィールドと値

    フィールド

    名前

    ThirdReceive

    WSDL URL

    directory_path/ThirdFileRead.wsdl

    パートナ・リンク・タイプ

    Read2_plt

    パートナ・ロール

    指定しません。

    マイ・ロール

    Read2_role


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

8.5.1.3 ステップ3: 3つのreceiveアクティビティの作成

次に、3つのreceiveアクティビティ(各パートナ・リンクにつき1つずつ)を作成します。receiveアクティビティでは、情報の送信元のパートナ・リンクを指定します。

8.5.1.3.1 最初のreceiveアクティビティの作成

最初のreceiveアクティビティを作成する手順は、次のとおりです。

  1. 「コンポーネント・パレット」で、「BPELコンストラクト」を展開します。

  2. デザイナの「receiveInput」receiveアクティビティの下に、「Receive」アクティビティをドラッグ・アンド・ドロップします。

  3. 「Receive」アイコンをダブルクリックし、「Receive」ダイアログを表示します。

  4. 表8-5に示す詳細を入力して、最初のパートナ・リンク(FirstReceive)を最初のreceiveアクティビティと関連付けます。

    表8-5 「Receive」ダイアログのフィールドと値

    フィールド

    名前

    receiveFirst

    パートナ・リンク

    FirstReceive

    インスタンスの作成

    このチェック・ボックスを選択します。


    「操作」(Read)フィールドは自動的に入力されます。

  5. 「変数」フィールドの右側にある最初のアイコンをクリックします。これは、変数を自動作成するアイコンです。

  6. 「変数の作成」ダイアログで「OK」をクリックします。

    receiveFirst_Read_InputVariableという名前の変数が自動的に「変数」フィールドに作成されます。

  7. ステップ4の説明にあるように「インスタンスの作成」チェック・ボックスが選択されていることを確認します。

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

8.5.1.3.2 2番目のreceiveアクティビティの作成

2番目のreceiveアクティビティを作成する手順は、次のとおりです。

  1. 「コンポーネント・パレット」から2番目のreceiveアクティビティを「receiveFirst」receiveアクティビティの下にドラッグします。

  2. 「Receive」アイコンをダブルクリックし、「Receive」ダイアログを表示します。

  3. 表8-6に示す詳細を入力して、2番目のパートナ・リンク(SecondReceive)を2番目のreceiveアクティビティと関連付けます。

    表8-6 「Receive」ダイアログのフィールドと値

    フィールド

    名前

    receiveSecond

    パートナ・リンク

    SecondFileRead

    インスタンスの作成

    このチェック・ボックスは選択しないでください。


    「操作」(Read1)フィールドは自動的に入力されます。

  4. 「変数」フィールドの右側にある最初のアイコンをクリックします。

  5. 「変数の作成」ダイアログで「OK」をクリックします。

    receiveSecond_Read1_InputVariableという名前の変数が自動的に「変数」フィールドに作成されます。

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

8.5.1.3.3 3番目のreceiveアクティビティの作成

3番目のreceiveアクティビティを作成する手順は、次のとおりです。

  1. 「コンポーネント・パレット」から3番目のreceiveアクティビティを「receiveSecond」receiveアクティビティの下にドラッグします。

  2. 「Receive」アイコンをダブルクリックし、「Receive」ダイアログを表示します。

  3. 表8-7に示す詳細を入力して、3番目のパートナ・リンク(ThirdReceive)を3番目のreceiveアクティビティと関連付けます。

    表8-7 「Receive」ダイアログのフィールドと値

    フィールド

    名前

    receiveThird

    パートナ・リンク

    ThirdFileRead

    インスタンスの作成

    このチェック・ボックスは選択しないでください。


    「操作」(Read2)フィールドは自動的に入力されます。

  4. 「変数」フィールドの右側にある最初のアイコンをクリックします。

  5. 「変数の作成」ダイアログで「OK」をクリックします。

    receiveThird_Read2_InputVariableという名前の変数が自動的に「変数」フィールドに作成されます。

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

    各receiveアクティビティが、特定のパートナ・リンクに関連付けられました。

8.5.1.4 ステップ4: 相関セットの作成

次に、相関セットを作成します。相関トークンのセットは、相関グループのすべてのメッセージで共有されるプロパティのセットです。

8.5.1.4.1 最初の相関セットの作成

最初の相関セットを作成する手順は、次のとおりです。

  1. Oracle JDeveloperの「構造」ウィンドウで「相関セット」を右クリックし、「すべての子ノードを開く」を選択します。

  2. 2番目の「相関セット」フォルダを右クリックして、「相関セットの作成」を選択します。

  3. 「相関セットの作成」ダイアログの「名前」フィールドでCorrelationSet1と入力します。

  4. 「プロパティ」セクションで、「追加」アイコンをクリックして「プロパティ・チューザ」ダイアログを表示します。

  5. 「プロパティ」を選択し、「追加」アイコン(上の最初のアイコン)をクリックして「プロパティの作成」ダイアログを表示します。

  6. 「名前」フィールドに、NameCorrと入力します。

  7. 「タイプ」フィールドの右側にある「参照」アイコンをクリックします。

  8. 「タイプ・チューザ」ダイアログで「string」を選択し、「OK」をクリックします。

  9. 「OK」をクリックして、「プロパティの作成」ダイアログ、「プロパティ・チューザ」ダイアログおよび「相関セットの作成」ダイアログを閉じます。

8.5.1.4.2 2番目の相関セットの作成

2番目の相関セットを作成する手順は、次のとおりです。

  1. Oracle JDeveloperの「構造」ウィンドウの「相関セット」セクションに戻ります。

  2. 「相関セット」フォルダを右クリックして、「相関セットの作成」を選択します。

  3. 「相関セットの作成」ダイアログの「名前」フィールドでCorrelationSet2と入力します。

  4. 「プロパティ」セクションで、「追加」アイコンをクリックして「プロパティ・チューザ」ダイアログを表示します。

  5. 「プロパティ」を選択し、「追加」アイコンをクリックして「プロパティの作成」ダイアログを表示します。

  6. 「名前」フィールドに、IDCorrと入力します。

  7. 「タイプ」フィールドの右側にある「参照」アイコンをクリックします。

  8. 「タイプ・チューザ」ダイアログで「double」を選択し、「OK」をクリックします。

  9. 「OK」をクリックして、「プロパティの作成」ダイアログ、「プロパティ・チューザ」ダイアログおよび「相関セットの作成」ダイアログを閉じます。

8.5.1.5 ステップ5: receiveアクティビティへの相関セットの関連付け

次に、相関セットをreceiveアクティビティと関連付けます。次の相関セットのタスクを実行します。

  • 最初の相関グループで、最初と2番目のreceiveアクティビティをCorrelationSet1相関セットと関連付けます。

  • 2番目の相関グループで、2番目と3番目のreceiveアクティビティをCorrelationSet2相関セットと関連付けます。

8.5.1.5.1 receiveアクティビティへの最初の相関セットの関連付け

最初の相関セットをreceiveアクティビティに関連付ける手順は、次のとおりです。

  1. 「receiveFirst」receiveアクティビティをダブルクリックし、「Receive」ダイアログを表示します。

  2. 「相関タブをクリックします。

  3. 「追加」アイコンをクリックして、「相関セット」ドロップダウン・リストを表示します。

  4. 「CorrelationSet1」を選択します。

  5. 「開始」列をクリックしてドロップダウン・リストを表示し、「はい」に設定します。「はい」に設定すると、このセットが、交換するメッセージに含まれるプロパティの値で開始されます。

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

8.5.1.5.2 receiveアクティビティへの2番目の相関セットの関連付け

2番目の相関セットをreceiveアクティビティに関連付ける手順は、次のとおりです。

  1. 「receiveSecond」receiveアクティビティをダブルクリックし、「Receive」ダイアログを表示します。

  2. 「相関タブをクリックします。

  3. 「追加」アイコンをクリックして、「相関セット」ドロップダウン・リストを表示します。

  4. 「CorrelationSet2」を選択し、次に「OK」をクリックします。

  5. 「開始」列をクリックしてドロップダウン・リストを表示し、「はい」を選択します。

  6. 「追加」を再度クリックし、「CorrelationSet1」を選択します。

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

  8. 「開始」列をクリックしてドロップダウン・リストを表示し、「CorrelationSet1」「いいえ」を選択します。

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

    これにより、最初と2番目のreceiveアクティビティが1つの相関グループにまとめられます。

8.5.1.5.3 receiveアクティビティへの3番目の相関セットの関連付け

3番目の相関セットをreceiveアクティビティに関連付ける手順は、次のとおりです。

  1. 「receiveThird」receiveアクティビティをダブルクリックし、「Receive」ダイアログを表示します。

  2. 「相関タブをクリックします。

  3. 「追加」アイコンをクリックします。

  4. 「CorrelationSet2」を選択します。

  5. 「CorrelationSet2」「開始」列を「いいえ」に設定します。

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

    これにより、2番目と3番目のreceiveアクティビティが2番目の相関グループにまとめられます。

8.5.1.6 ステップ6: プロパティ・エイリアスの作成

プロパティ・エイリアスを使用すると、グローバル・プロパティを特定のメッセージ・パートのフィールドにマップできます。このアクションにより、プロパティ名を、メッセージのパートと場所を表すエイリアスにできます。このエイリアスは、XPath式で使用できます。

8.5.1.6.1 NameCorrのプロパティ・エイリアスの作成

NameCorr相関セットに次の2つのプロパティ・エイリアスを作成します。

  • NameCorrreceiveFirst receiveアクティビティのLoanApplメッセージ・タイプ・パートにマップします。このreceiveアクティビティをFirstReceiveパートナ・リンク(FirstReceive.wsdlファイルで定義)と関連付けます。

  • NameCorrreceiveSecond receiveアクティビティの受信メッセージ・タイプ・パートLoanAppResponseにマップします。このreceiveアクティビティをSecondReceiveパートナ・リンク(SecondFileRead.wsdlファイルで定義)と関連付けます。

NameCorrのプロパティ・エイリアスを作成する手順は、次のとおりです。

  1. Oracle JDeveloperの「構造」ウィンドウで、「プロパティ・エイリアス」を右クリックします。

  2. 「プロパティ・エイリアスの作成」を選択します。

  3. 「プロパティ」リストから「NameCorr」を選択します。

  4. 「メッセージ・タイプ」「パートナ・リンク」「FirstReceive」「FirstReceive.wsdl」「メッセージ・タイプ」「LoanAppl_msg」「Part - LoanAppl」の順に展開して選択します。

  5. 「問合せ」フィールドで[Ctrl]キーを押しながら[Space]キーを押して、次のXPath式を定義します。

    /ns2:LoanAppl/ns2:Name
    
  6. 「OK」をクリックします。

  7. ステップ1から3を繰り返して、NameCorrの2番目のプロパティ・エイリアスを作成します。

  8. 「メッセージ・タイプ」「プロジェクトのWSDLファイル」「SecondFileRead.wsdl」「メッセージ・タイプ」「LoanAppResponse_msg」「Part - LoanAppResponse」の順に展開して選択します。

  9. 「問合せ」フィールドで[Ctrl]キーを押しながら[Space]キーを押して、次のXPath式を定義します。

    /ns4:LoanAppResponse/ns4:APR
    
  10. 「OK」をクリックします。

8.5.1.6.2 IDCorrのプロパティ・エイリアスの作成

IDCorr相関セットに次の2つのプロパティ・エイリアスを作成します。

  • IDCorrreceiveSecond receiveアクティビティのLoanAppResponseメッセージ・タイプ・パートにマップします。このreceiveアクティビティをSecondReceiveパートナ・リンク(SecondFileRead.wsdlファイルで定義)と関連付けます。

  • IDCorrreceiveThird receiveアクティビティのCustResponseメッセージ・タイプ・パートにマップします。このreceiveアクティビティをThirdReceiveパートナ・リンク(ThirdFileRead.wsdlファイルで定義)と関連付けます。

IDCorrのプロパティ・エイリアスを作成する手順は、次のとおりです。

  1. 「構造」ウィンドウで、「プロパティ・エイリアス」を右クリックします。

  2. 「プロパティ・エイリアスの作成」を選択します。

  3. 「プロパティ」リストから「IDCorr」を選択します。

  4. 「メッセージ・タイプ」「プロジェクトのWSDLファイル」「SecondFileRead.wsdl」「メッセージ・タイプ」「LoanAppResponse_msg」「Part - LoanAppResponse」の順に展開して選択します。

  5. 「問合せ」フィールドで[Ctrl]キーを押しながら[Space]キーを押して、次のXPath式を定義します。

    /ns4:LoanAppResponse/ns4:APR
    
  6. 「OK」をクリックします。

  7. ステップ1から3を繰り返して、IDCorrの2番目のプロパティ・エイリアスを作成します。

  8. 「メッセージ・タイプ」「プロジェクトのWSDLファイル」「ThirdFileRead.wsdl」「メッセージ・タイプ」「CustResponse_msg」「Part - CustResponse」の順に展開して選択します。

  9. 「問合せ」フィールドで[Ctrl]キーを押しながら[Space]キーを押して、次のXPath式を定義します。

    /ns6:CustResponse/ns6:APR
    

    これで、設計は完了します。

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

8.5.1.7 ステップ7: WSDLファイルのコンテンツの確認

WSDLファイルのコンテンツを確認する手順は、次のとおりです。

  1. 「アプリケーション・ナビゲータ」を更新する場合

    相関セット・プロパティのNameCorrIDCorrは、「アプリケーション・ナビゲータ」では、MyCorrelationSet_Properties.wsdlファイルに定義されています。例8-10に例を示します。

    例8-10 相関セット・プロパティ

    <definitions
         name="properties"
         targetNamespace="http://xmlns.oracle.com/MyCorrelationSet/correlationset"
         xmlns="http://schemas.xmlsoap.org/wsdl/"
         xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
         xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <bpws:property name="NameCorr" type="xsd:string"/>
        <bpws:property name="IDCorr" type="xsd:double"/>
    </definitions>
    

    例8-11に示すように、プロパティ・エイリアスはMyCorrelationSet.wsdlファイルに定義されています。

    例8-11 プロパティ・エイリアス

    <bpws:propertyAlias propertyName="ns1:NameCorr"
     messageType="ns3:LoanAppl_msg"
     part="LoanAppl" query="/ns2:LoanAppl/ns2:Name"/>
    
    <bpws:propertyAlias propertyName="ns1:NameCorr" 
     messageType="ns5:LoanAppResponse_msg" 
     part="LoanAppResponse" query="/ns4:LoanAppResponse/ns4:APR"/>
    
    <bpws:propertyAlias propertyName="ns1:IDCorr" 
     messageType="ns5:LoanAppResponse_msg" 
     part="LoanAppResponse" query="/ns4:LoanAppResponse/ns4:APR"/>
    
    <bpws:propertyAlias propertyName="ns1:IDCorr" 
     messageType="ns7:CustResponse_msg" 
     part="CustResponse" query="/ns6:CustResponse/ns6:APR"/>
    

    この例では、BPELプロセス・サービス・コンポーネントはWebサービス・プロバイダとしては作成されていないので、MyCorrelationSet.wsdlファイルはBPELプロセス・サービス・コンポーネントでは参照されません。このため、旧WSDLに定義されている相関セットを参照するには、MyCorrelationSet.wsdlファイルをFirstReceive.wsdlファイル内にインポートする必要があります。例8-12に例を示します。

    例8-12 WSDLファイルのインポート

    <import namespace="http://xmlns.oracle.com/MyCorrelationSet"
     location="MyCorrelationSet.wsdl"/>
    

8.5.2 複数のパートを持つfromParts要素を使用したIMAの相関の設定に関する注意事項

次の使用例を考えてみます。

  • タイプが同じ複数のパートを持つWSDLメッセージ・タイプのBPEL 2.0プロセス

  • 前述のパートの要素タイプに基づいて定義されているプロパティ・エイリアス

各パートに対して定義されたfromPartを持つfromParts要素を使用するインバウンド・メッセージ・アクティビティ(IMA) (receiveアクティビティ、scopeまたはpickアクティビティのonMessageブランチ、BPEL 2.0のscopeアクティビティのonEventブランチなど)を持つプロセスの場合、ランタイム環境でプロパティ・エイリアスが適用されるパートを判断できないため、相関を定義できません。

toParts要素およびfromParts要素を使用してWSDLメッセージ・パートをマッピングする方法の詳細は、第6.17項「BPEL 2.0でのWSDLメッセージ・パートのマップ」を参照してください。