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

この章では、BPELプロセスからの非同期Webサービスの構成および起動方法について説明します。また、複数のreceiveまたはpickアクティビティで同じパートナ・リンクが使用されている場合に適切なエンドポイントにコールバック・メッセージをルーティングする方法、パートナ・リンク操作レベルで冪等性を管理する方法、実行時に動的パートナ・リンクを作成する方法、動的パートナ・リンク環境でセキュリティ証明書およびWSDLファイルをオーバーライドする方法、およびWS-Addressingを使用する方法について説明します。

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

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アクティビティの入力変数または出力変数として指定できます。

      メッセージ・タイプを表示するには、「メッセージ・タイプ」オプションを選択し、「参照」アイコンを選択して「タイプ・チューザ」ダイアログを表示します。ここから、選択するために「メッセージ・タイプ」ツリーを展開します。この例では、「LoanServiceRequestMessage」が選択されます。

    • 要素

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

  7. 「OK」をクリックします。
  8. invokeアクティビティをクリックして、そのプロパティ・フィールドをプロパティ・インスペクタで表示するか、invokeアクティビティをダブルクリックし、「Invoke」ダイアログを表示します。

    アクティビティをプロパティ・インスペクタで編集する方法の詳細は、「BPELアクティビティをプロパティ・インスペクタで編集する方法」を参照してください。

  9. 「Invoke」ダイアログで、「パートナ・リンク」リストからパートナ・リンク(この例では「LoanService」)を選択し、「操作」リストから「initiate」を選択します。
  10. 「入力」フィールドの右で、2番目のアイコンをクリックし、ステップ6で作成した入力変数を選択します。

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

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

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

  11. 「OK」をクリックします。
8.2.1.3 receiveアクティビティの追加

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

receiveアクティビティを追加するには:

  1. 「invokeアクティビティの追加」で作成したinvokeアクティビティの直後に、「コンポーネント」ウィンドウから、receiveアクティビティをドラッグします。
  2. 「invokeアクティビティの追加」のステップ3からステップ7と同様のステップで、「変数の作成」ダイアログを開き、受信情報を格納する変数を作成します。

    ノート:

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

  3. receiveアクティビティをダブルクリックし、名前をreceive_invokeに変更します。
  4. 「パートナ・リンク」リストからパートナ・リンクを選択します(この例では「LoanService」を選択します)。
  5. 「操作」リストから「onResult」を選択します。「インスタンスの作成」チェック・ボックスを選択しないでください。
  6. 「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つ定義されます。各ポート・タイプは一方向操作を実行します。この例では、次のようになります。

  • 一方のポート・タイプが非同期プロセスに応答します。

  • 他方のものが、非同期レスポンスでクライアントにコールバックします。

次の例では、portType LoanServiceCallbackがクライアントの融資申請リクエストを受け取り、portType LoanServiceが融資提案レスポンスを使用してクライアントを非同期でコールバックします。

<!-- 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つのロールがあります。

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

<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サービスによって使用されます。次に例を示します。

  <!-- 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ファイルには、次に示すように、融資申請承認Webサービスが表示されます。

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

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

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

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

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

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

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

次に例を示します。

  <variables>
    <variable name="request"
               messageType="services:LoanServiceRequestMessage"/>
    <variable name="response"
               messageType="services:LoanServiceResultMessage"/>
  </variables>
<sequence>
    <!-- initialize the input of LoanService -->
    <assign>
    . . .
    . . .
    </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)(「非同期サービスでのWS-Addressingの使用」で説明)を使用して、クライアント・リクエストに固有の相関IDが送信されます。複数のプロセスがサービス・コールバックを待機している可能性があるため、サーバーでは、どのBPELプロセス・サービス・コンポーネント・インスタンスが融資申請承認Webサービスからのコールバック・メッセージを待機しているかを把握する必要があります。相関IDによって、サーバーは、レスポンスを適切なリクエスト・インスタンスと関係付けることができます。

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

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

次の例に、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アクティビティを使用してデハイドレーション・ポイントを明示的に指定することもできます。詳細は、「dehydrateアクティビティ」を参照してください。

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

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

<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.example.com:80/a.jsp 
@http://myhost.us.example.com:8888/soa-infra/services/HelloWorldApp/HelloWorld!
1.0*2007-10-22_14-33-04_195/client
 </property>
</binding.ws>
</reference>

8.2.3 タイムアウト後にメッセージをコンシュームする中間プロセスのreceiveアクティビティに関する必知事項

タイムアウトによって発生した例外が処理されない場合は、receiveアクティビティで構成されたタイムアウトが期限切れになった後も、BPELプロセスによって中間プロセスのreceiveアクティビティのメッセージがコンシュームされます。このようなシナリオでは、コールバック・メッセージは配信時にコンシュームされます。これは予想された動作です。

たとえば、次のタスクを実行するとします。

  • クライアントBPELプロセスおよびサービスBPELプロセスでSOAコンポジット・アプリケーションを作成し、非同期のinvokeアクティビティおよびreceiveアクティビティを使用してメッセージを交換する。

  • クライアントBPELプロセスのreceiveアクティビティの「タイムアウト」タブで、30秒のタイムアウトを構成する。

  • サービスBPELプロセスに5分間待機するwaitアクティビティを構成する。

タイムアウトが発生した後は、クライアントBPELプロセスが引き続き実行中の状態ではなく、フォルト状態で完了済としてマークされ、サービスBPELプロセスからのコールバック・メッセージが無視されることが予想されます。ただし、クライアントBPELプロセスでタイムアウト・フォルトがスローされた場合、そのプロセスは実行中の状態のままになります。サービスBPELプロセスがwaitアクティビティの完了から5分後に応答すると、レスポンスがクライアントBPELプロセスに返信されてコンシュームされ、実行中のプロセス・インスタンスに対して調整されます。

8.2.4 複数のクライアント・コンポーネントによる1つのコンポジットの起動に関する必知事項

複数のクライアント・コンポーネントがそのリモートのWSDLファイルを使用して1つのSOAコンポジット・アプリケーションを起動した場合は、リモート・コンポジットをコールしている元のクライアントにreceiveアクティビティが存在する場合にのみ、コールバック・レスポンスをこのクライアントで取得できます。元のクライアントにreceiveアクティビティが存在せず、コンポジットをコールする後続のクライアントのいずれにもreceiveアクティビティが存在しない場合、レスポンス・メッセージは失われます。これにより、元のクライアント・プロセスのリカバリ状態となります。

これは予想された動作です。これは、起動されているコンポジットでは、receiveアクティビティがどのクライアントに存在するか、またはクライアントが実際にBPELプロセス・サービス・コンポーネントであるかどうかを認識できないためです。

8.2.5 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.6 対話ID指定時の処理内容

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

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

ノート:

AQアダプタの使用中は、コンポジットの対話ID (内部/非表示の状態)を明示的に設定することはできません。この場合、対話IDはデータベースにより設定されます。
8.2.6.1 BPEL 1.1のbpelx:conversationId

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

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

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

<onMessage... bpelx:conversationId="$convId2">
</onMessage>
8.2.6.2 BPEL 2.0のbpelx:conversationId

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

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

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

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

8.3 複数のreceiveまたはpickアクティビティで同じパートナ・リンクが使用されている場合における適切なエンドポイントへのコールバック・メッセージのルーティング

複数のreceiveアクティビティまたはpickアクティビティが同じパートナ・リンクに関連付けられている場合に、適切なエンドポイント・アドレスへのコールバック・メッセージのルーティングを解決するには、replyToAddress正規化されたメッセージのプロパティが必要です。

これは、BPELプロセス・サービス・エンジンでは、replyToAddressプロパティが格納されるのは、起動元のreceiveまたはpickアクティビティでパートナ・リンクからのリクエストを受信するときの1回のみであるためです。replyToAddressは、コールバック・メッセージをルーティングし、中間プロセスのreceiveまたはpickアクティビティが使用されている場合にリセットされません。replyToAddressプロパティは、bpelx:inputProperty拡張要素を使用します。

8.3.1 複数のreceiveまたはpickアクティビティで同じパートナ・リンクが使用されている場合における適切なエンドポイントへのコールバック・メッセージのルーティング

中間プロセスのreceiveアクティビティの後に続くinvokeアクティビティ(コールバック用)に対して、このプロパティをクライアントのreplyToAddressに設定してください。つまり、クライアントが、中間プロセスのreceiveアクティビティに対してWS-Addressing replyTo情報を送信する場合でも、assignアクティビティを使用してそれを動的に設定しないかぎり、それがパートナ・リンクに設定されることはありません。

たとえば、BPELプロセスが次に示すとおりであるとします。

Caller                               Callee
-----------------------------------------------------------
<receive>                            <receive> Initiate CS1
<invoke>initiate CS1 -------->       <receive> Use CS1
                                     <wait>
<receive>use CS1    <--------        <invoke>
<invoke>

複数のreceiveおよびpickアクティビティで同じパートナ・リンクが使用されている場合において適切なエンドポイントにコールバック・メッセージをルーティングするには:

  1. 中間プロセスのreceiveアクティビティからクライアントのreplyToAddress値を取得します。
    <receive name="receiveMsgFromAccessor" partnerLink="midprocess_client"
           portType="client:mySingletonBPEL" operation="process"
           variable="ReceiveMidProcess" createInstance="no">
    <bpelx:fromProperties>
       <bpelx:fromProperty name="replyToAddress" variable="var_replyToAddress"/>
    </bpelx:fromProperties>
       <correlations>
           <correlation set="<YourCorrset>" initiate="no"/>
       </correlations>
    </receive>
    
  2. そのinvokeアクティビティ(コールバック用)で、「プロパティ」タブをクリックします。
  3. 「追加」アイコンをクリックして、プロパティおよびその内容(変数またはXPath式)を選択します。

    ノート:

    BPEL 1.1プロセスでは、プロパティは「プロパティ」列に自動的に表示されます。「名前」列でプロパティを選択し、「値」列および「タイプ」列をダブルクリックして適切な値を入力します。

  4. 「名前」列で、下にスクロールして「replyToAddress」プロパティを選択します。「wsa.replyToAddress」または「bpel.replyToAddress」を選択しないでください
  5. 「値」列で、変数名を値(この例では、ステップ1var_replyToAddressが入力されています)として指定して、「OK」をクリックします。

    図8-1に示すように、Invokeの編集ダイアログが表示されます。

    図8-1 invokeアクティビティの「プロパティ」タブ

    図8-1の説明が続きます
    「図8-1 invokeアクティビティの「プロパティ」タブ」の説明
  6. 「適用」をクリックし、「OK」をクリックします。
  7. Oracle BPELデザイナで、「ソース」をクリックします。

    BPELプロセス・ファイル内のinvokeアクティビティは次のようになります。

    <invoke name="callbackAccessor" partnerLink="midprocess_client"
                    portType="client:mySingletonBPELCallback"
                    operation="processResponse"
    inputVariable="CallbackAccessorVar"
                    bpelx:invokeAsDetail="no">
                <bpelx:inputProperty name="replyToAddress"
    variable="var_replyToAddtess"/>

8.4 パートナ・リンク操作レベルでの冪等性の管理

idempotentアクティビティは、問題なく再試行できるアクティビティです。idempotentアクティビティは、永続プロセスと一時プロセスの両方に適用されます。冪等性は、パートナ・リンクの操作レベルで管理できます。たとえば、いくつかのパートナ・リンクでは複数の操作を公開できます(たとえば、getEmployeedepositPayCheckなど)。いくつかの操作を冪等として定義できます(たとえば、getEmployee)。これによって、これらの操作を複数回コールできるようになります。他の操作は、冪等にする必要がない場合があり(たとえば、depositPayCheck)、この設定は不要です。デハイドレーションは、非冪等操作の後に発生します。

デフォルトでは、すべてのパートナ・リンク操作は冪等です。必要な場合は、操作を非冪等に設定できます。この設定は、idempotentデプロイメント・ディスクリプタのプロパティと同じ機能を、より詳細な操作レベルで提供します。

idempotentデプロイメント・ディスクリプタのプロパティの詳細は、「idempotentプロパティとフォルト処理に関する必知事項」および「デプロイメント・ディスクリプタのプロパティの概要」を参照してください。

8.4.1 パートナ・リンク操作レベルでの冪等性の管理方法

パートナ・リンク操作レベルで冪等性を管理するには:

  1. Oracle BPELデザイナで、冪等性の管理対象となる操作が含まれているパートナ・リンクをダブル・クリックします。
  2. パートナ・リンクの「冪等性」タブをクリックします。

    デフォルトでは、「冪等」列ですべての操作が冪等であると選択されています。

  3. 操作を非冪等と定義する場合は、その操作の「冪等」チェック・ボックスを選択解除します。図8-2に詳細を示します。

    図8-2 パートナ・リンク・アクティビティの「冪等性」タブ

    図8-2の説明が続きます
    「図8-2 パートナ・リンク・アクティビティの「冪等性」タブ」の説明
  4. 「適用」をクリックします。
  5. 「OK」をクリックします。

冪等性およびidempotentプロパティの詳細は、「デプロイメント・ディスクリプタのプロパティの概要」を参照してください。

8.5 実行時に使用するための動的パートナ・リンクの設計時の作成

SOAコンポジット・アプリケーションを設計する場合、次の課題に直面することがあります。

  • サービス・エンドポイント(アドレス)が設計時にわからない場合があります。

  • アプリケーションの実行中に、エンドポイント参照の変更が必要な場合があります。

動的パートナ・リンク機能を使用すると、BPELバージョン1.1および2.0の実行時に使用するために、エンドポイント参照をパートナ・リンクに動的に割り当てることができます。動的パートナ・リンクでは、switchアクティビティに類似した条件が提供され、この条件は実行時に評価されます。

8.5.1 実行時に使用するための動的パートナ・リンクの設計時の作成方法

実行時に使用するために動的パートナ・リンクを設計時に作成するには:

  1. 同じportTypeを使用する複数のサービスが含まれているWSDLファイルを作成します。
    <service name="AmericanLoan">
     <port name="LoanServicePort" binding="tns:LoanServiceBinding">
      <soap:address location="host:port/soa-infra/services/domain_
    name/AmericanLoan/client"/>
     </port>
    </service>
    
    <service name="AlliedLoan">
     <port name="LoanServicePort" binding="tns:LoanServiceBinding">
      <soap:address location="host:port/soa-infra/services/domain_
    name/AlliedLoan/client"/>
     </port>
    </service>
    
    <service name="AcmeLoan">
     <port name="LoanServicePort" binding="tns:LoanServiceBinding">
      <soap:address location="host:port/soa-infra/services/domain_
    name/AcmeLoan/client"/>
     </port>
    </service> 
    
  2. 「SOAP」バインディング・コンポーネントをSOAコンポジット・エディタの「外部参照」スイムレーンにドラッグします。

    「Webサービスの作成」ダイアログが表示されます。

  3. Webサービスを定義して、「OK」をクリックします。

    完了すると、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設定の追加はオプションです。これは、Oracle BPEL Process Managerから渡されるプロパティによって、実行時にポートがオーバーライドされるためです。

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

  4. BPELプロセスをダブルクリックして、Oracle BPELデザイナを入力します。
  5. assignアクティビティをデザイナにドラッグします。
  6. 図8-3に示すように、ターゲット・パートナ・リンクの上にある「XMLフラグメント」アイコンを選択します。BPEL 2.0を使用中の場合は、「リテラル」アイコンをドラッグします。

    図8-3 「XMLフラグメント」アイコン

    図8-3の説明が続きます
    「図8-3 「XMLフラグメント」アイコン」の説明
  7. このアイコンをターゲット・パートナ・リンクにドラッグします。

    BPEL 1.1用の「XMLフラグメント」ダイアログが表示されます。BPEL 2.0を使用中の場合は、「リテラル」ダイアログが表示されます。

  8. エンドポイント参照を含むXMLフラグメントをパートナ・リンクに割り当てて、「OK」をクリックします。図8-4に詳細を示します。

    図8-4 BPEL 1.1の「XMLフラグメント」ダイアログ

    図8-4の説明が続きます
    「図8-4 BPEL 1.1の「XMLフラグメント」ダイアログ」の説明

    完了すると、BPELファイルにはWSDLで定義されたサービスのいずれかが含まれます。

    次にBPEL 1.1の例を示します。

    <EndpointReference xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing">
             <Address>http://host:port/soa-infra/services/domain_name
               /AlliedLoan/client</Address>
    <ServiceName xmlns:ns1="http://services.otn.com"
       PortName="LoanServicePort">ns1:AlliedLoan</ServiceName>
    </EndpointReference>
    

    次にBPEL 2.0の例を示します。

    <assign>
      <copy>
        <from>
          <literal>
            <sref:service-ref>
              <services:EndpointReference>
              <services:Address>http://host:port/soa-infra/services/domain_
               name/AlliedLoan/client</services:Address>
               <services:ServiceName
               xmlns:ns1="http://services.otn.com">ns1:AlliedLoan</services:
               ServiceName>
              </services:EndpointReference>
            </sref:service-ref>
          </literal>
        </from>
        <to partnerLink="LoanService"/>
      </copy>
    </assign>

8.6 動的パートナ・リンクを起動する際のセキュリティ証明書のオーバーライド

動的パートナ・リンクを使用すると複数のWebサービスと対話できます。この対話には、メッセージを暗号化するために様々なセキュリティ証明書を必要とするメッセージ保護ポリシーの使用が含まれる場合があります。これらの証明書は、Webサービスごとに異なる場合があります。キーストア受信者別名値を指定して、WebサービスのWSDLファイル内のセキュリティ証明書をオーバーライドできます。

パートナ・リンクを起動する際にセキュリティ証明書をオーバーライドするには:

  1. 文字列タイプの変数(たとえば、KEYSTORE_RECIPIENT_ALIAS)を定義します。図8-5に詳細を示します。

    図8-5 KEYSTORE_RECIPIENT_ALIASの変数定義

    図8-5の説明が続きます
    「図8-5 KEYSTORE_RECIPIENT_ALIASの変数定義」の説明
  2. assignアクティビティの「コピー・ルール」タブで、orakeyを変数KEYSTORE_RECIPIENT_ALIASに割り当てます。図8-6に詳細を示します。

    図8-6 KEYSTORE_RECIPIENT_ALIASへのorakeyの割当て

    図8-6の説明が続きます
    「図8-6 KEYSTORE_RECIPIENT_ALIASへのorakeyの割当て」の説明
  3. Webサービスのパートナ・リンクを起動するinvokeアクティビティで、「プロパティ」タブをクリックします。
  4. keystore.recipient.aliasプロパティをクリックします。

    ノート:

    BPEL 2.0プロセスでは、プロパティは「プロパティ」列に自動的に表示されません。「追加」 アイコンをクリックして、プロパティとその内容(変数またはXPath式)を選択する必要があります。

  5. 「値」列をダブルクリックし、「参照」(...)アイコンを表示します。
  6. 「参照」(...)アイコンをクリックし、「アダプタ・プロパティ値」ダイアログを表示します。
  7. 「参照」アイコンをクリックして、「変数XPathビルダー」ダイアログを表示します。
  8. 値としてkeystore_recipient_aliasを選択し、「OK」をクリックします。図8-7に詳細を示します。BPELプロセスでWebサービスを起動する際にWSDLファイルに設定されているセキュリティ証明書が、このプロパティによってオーバーライドされます。

    ノート:

    BPEL 2.0では、「プロパティ」表には、「名前」列および「値」列のみが存在します。「タイプ」列はありません。

    図8-7 invokeアクティビティの正規化されたメッセージのプロパティkeystore.recipient.alias

    図8-7の説明が続きます
    「図8-7 invokeアクティビティの正規化されたメッセージのプロパティkeystore.recipient.alias」の説明
  9. 「適用」をクリックし、「OK」をクリックします。

    完了すると、BPELファイルは次のように定義されます。

    . . .
    . . .
    <variables>
      <variable name="WsaAddress" element="ns6:EndpointReference"/>
      <variable name="KEYSTORE_RECIPIENT_ALIAS" type="xsd:string"/>
    </variables>
    
    <assign name="AssignAddress">
      <copy>
        <from
    expression="'http://localhost:8001/soa-infra/services/default/ServiceWithNewCer
    tificate!1.0*soa_c94537fb-97a4-4b0f-900f-fefffc34f7fe/service_ep'"/>
        <to variable="WsaAddress"
        query="/ns6:EndpointReference/ns6:Address"/>
      </copy>
      <copy>
        <from variable="WsaAddress"/>
        <to partnerLink="Service"/>
      </copy>
    </assign>
    
    <assign name="AssignAlias">
      <copy>
        <from expression='"orakey"'/>
        <to variable="KEYSTORE_RECIPIENT_ALIAS"/>
      </copy>
    </assign>
    
    <invoke name="Invoke"
            inputVariable="Invoke_InputVariable" 
            partnerLink="Service"
            portType="ns1:ServiceBPELProcess" 
            operation="process"
            bpelx:invokeAsDetail="no">
    
                <bpelx:inputProperty name="endpointURI" 
                                     variable="inputVariable"
                                     part="payload"
                                     query="/client:process/client:input"/>
    
                <bpelx:inputProperty name="keystore.recipient.alias" 
                                     variable="KEYSTORE_RECIPIENT_ALIAS"/>
    </invoke>
    

正規化されたメッセージのプロパティの詳細は、「メッセージ・ヘッダーを介した正規化メッセージ・プロパティの伝播」を参照してください。

8.7 動的パートナ・リンクのWSDLファイルのオーバーライド

場合によっては、次のような理由によって、動的パートナ・リンクによって使用されるデフォルトWSDLファイルをオーバーライドする必要があります。

  • メッセージ保護セキュリティ・ポリシーを使用するサービスと統合する必要がある。

  • WSDLに、メッセージ暗号化に使用される証明書など重要な情報が含まれている可能性がある。

正規化されたメッセージのプロパティendpointWSDLによって、動的パートナ・リンクのWSDLファイルを指定できます。エンドポイントのみでなく、WSDL全体を動的に指定する必要があります。これにより、WSDLファイルをOracle Web Services Manager (OWSM)に渡すことができ、その後、OWSMは指定されたWSDLから適切なサービス証明書を取得できます。

WSDLファイル内の証明書は、次の場合には無視されます。

それ以外の場合、証明書はWSDLファイルから取得されます。

動的パートナ・リンクのWSDLファイルをオーバーライドするには:

  1. 文字列タイプの変数を定義します(この例では、the_wsdl_varが定義されます)。
  2. assignアクティビティの「コピー・ルール」タブで、WSDLを変数the_wsdl_varに割り当てます。
  3. パートナ・リンクを起動するinvokeアクティビティで、「プロパティ」タブをクリックします。
  4. endpointWSDLプロパティをクリックします。

    ノート:

    BPEL 2.0プロセスでは、プロパティは「プロパティ」列に自動的に表示されません。「追加」 アイコンをクリックして、プロパティとその内容(変数またはXPath式)を選択する必要があります。

  5. 「値」列をダブルクリックし、「参照」(...)アイコンを表示します。
  6. 「参照」(...)アイコンをクリックし、「アダプタ・プロパティ値」ダイアログを表示します。
  7. 「参照」アイコンをクリックして、「変数XPathビルダー」ダイアログを表示します。
  8. 変数としてthe_wsdl_varを選択し、「OK」をクリックします。この値によって、動的パートナ・リンクのWSDLが指定されます。

    ノート:

    BPEL 2.0では、「プロパティ」表には、「名前」列および「値」列のみが存在します。「タイプ」列はありません。

    図8-8 invokeアクティビティの正規化されたメッセージのプロパティendpointWSDL

    図8-8の説明が続きます
    「図8-8 invokeアクティビティの正規化されたメッセージのプロパティendpointWSDL」の説明

    完了すると、BPELファイルは次のように定義されます。

    <variables>
      <variable name="the_wsdl_var" type="xsd:string"/>
    </variables>
     
    <assign name="myAssignWsdl">
      <copy>
        <from
    expression='"http://localhost:8001/soa-infra/services/default/ServiceWithNewCer
    tificate!1.0/service_ep?WSDL"'/>
        <to variable="the_wsdl_var"/>
      </copy>
    </assign>
     
    <invoke name="Invoke"
            inputVariable="Invoke_InputVariable" 
            partnerLink="Service"
            portType="ns1:ServiceBPELProcess" 
            operation="process"
            bpelx:invokeAsDetail="no"> 
                       
                <bpelx:inputProperty name="endpointWSDL" 
                                     variable="the_wsdl_var"/>
     
    </invoke>
    

正規化されたメッセージのプロパティの詳細は、「メッセージ・ヘッダーを介した正規化メッセージ・プロパティの伝播」を参照してください。

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

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

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

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

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

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

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

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

  • エンドポイント・ロケーション(返信先アドレス)

    返信先アドレスは、BPELクライアントがコールバック・メッセージをリスニングする場所を指定します。

  • 対話ID

    TCPトンネリングを使用して、BPELプロセス・サービス・コンポーネント・フローとWebサービスの間で交換されたSOAPメッセージ(相関IDを含むメッセージなど)を表示します。BPELプロセス・サービス・コンポーネント・フローの通信先のサービスに対して送受信される正確なSOAPメッセージを確認できます。

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

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

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

8.8.1.1 プログラム間で交換されるメッセージを表示するためのTCPトンネリングの使用方法

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

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

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

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

Oracle BPEL Process ManagerおよびOracle Mediatorプロセスで開始される同期サービス用のTCPリスナーを設定するには、次のステップに従います:

  1. Axis TCPモニター(tcpmon)のダウンロードおよびインストールの方法については、次のURLにアクセスしてください。
  2. tcpmonの使用方法の詳細は、次のURLを参照してください。
  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.8.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. ステップ4.bから4.lを実行します。

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

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

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

メッセージの相関での相関セットの使用方法の詳細は、「相関セットおよびメッセージ集約の使用」を参照してください。