ヘッダーをスキップ
Oracle BPEL Process Manager開発者ガイド
10g(10.1.3.1.0)
B31874-03
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

4 同期Webサービスの起動

同期Webサービスでは、レスポンスは即時に問合せに返されます。BPELは、パートナ・リンクによって同期Webサービスに接続し、データを送信し、同期コールバックを使用してリプライを受信できます。

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

4.1 同期Webサービスのユースケース

同期Webサービスの使用方法は、104.SyncQuoteConsumerで具体的に示されます。このサンプルでは、Webサービスに株価コードを送信し、かわりに株価を受け取るBPELプロセスを示します。このサンプルでは、株価WebサービスのCreditRatingService.wsdlファイル(コールされるWebサービス)、およびクライアントのQuoteConsumer.bpelファイルとbpel.xmlデプロイメント・ディスクリプタ・ファイルでの同期機能の定義方法について説明します。

この章では、パートナ・リンクの確立方法および同期コールバックの設定方法について説明します。また、同期コールバックの実行に必要なコンポーネントについて説明し、これらのコンポーネントをコーディングする方法を考察し、同期コールバックを設定する方法を示します。


関連項目:

この章では、次のファイルを例として使用しています。
  • SOA_Oracle_Home¥bpel¥samples¥tutorials¥104.SyncQuoteConsumer¥bpel¥QuoteConsumer.bpel

  • SOA_Oracle_Home¥bpel¥samples¥tutorials¥104.SyncQuoteConsumer¥bpel¥bpel.xml

  • SOA_Oracle_Home¥bpel¥samples¥tutorials¥104.SyncQuoteConsumer¥bpel¥QuoteConsumer.wsdl

  • SOA_Oracle_Home¥bpel¥samples¥utils¥104.StockQuoteService¥bpel¥StockQuoteService.wsdl


4.2 同期サービスの概念の概要

同期コールバックには、次のコンポーネントが必要です。

各ドメインに属性syncMaxWaitTimeがあります。 この属性のデフォルトは45秒ですが、ドメイン管理者が再構成できます。指定された時間内にBPELプロセスがリプライを受信しないと、アクティビティはエラーとなります。


関連項目:

syncMaxWaitTimeの詳細は、『Oracle Application Serverパフォーマンス・ガイド』を参照してください。

4.2.1 パートナ・リンクの確立

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

4.2.1.1 BPELコードでのパートナ・リンクの定義

BPELコードでは、パートナ・リンクはリンク名とタイプ、およびパートナ・サービスとの相互作用におけるBPELプロセスの役割を定義します。

BPELソース・コードでは、StockQuoteServiceパートナ・リンク定義は次のようになります。

<partnerLinks>
   <!--
        The 'client' role represents the requester of this service. It is
        used for callback. The location and correlation information associated
        with the client role are automatically set using WS-Addressing.
        -->
   <partnerLink name="client" partnerLinkType="samples:QuoteConsumer"
    myRole="QuoteConsumerProvider" partnerRole="QuoteConsumerRequester"/>
   <partnerLink name="StockQuoteService"partnerLinkType="services:StockQuoteService"
  partnerRole="StockQuoteServiceProvider"/>
</partnerLinks>

パートナ・リンクの次に、BPELプロセス全体からアクセスできるグローバル変数を定義します。これらの変数のタイプは、プロセスのWSDLで定義されます。

<variables>
   <!-- Reference to the message passed as input during initiation -->
   <variable name="input" messageType="tns:QuoteConsumerRequestMessage"/>
   <!-- Reference to the message that will be sent back to the
             requestor during callback
             -->
   <variable name="output" messageType="tns:QuoteConsumerResultMessage"/>
   <variable name="request" messageType="services:StockQuoteServiceRequest"/>
   <variable name="response" messageType="services:StockQuoteServiceResponse"/>
</variables>

WSDLファイルは、BPELプロセスへのインタフェース(受渡しされるメッセージ、サポートされる操作およびその他のパラメータ)を定義します。

4.2.1.2 WSDLファイルによるWebサービスとBPELプロセスの連携の有効化

WebサービスのQuoteConsumer.wsdlファイルには、BPELプロセスとの連携を有効化する次の2つのセクションが含まれています。

QuoteConsumer.wsdlファイルのpartnerLinkTypeセクション

QuoteConsumer.wsdlファイルのpartnerLinkTypeセクションは、BPELプロセスと融資申請承認Webサービスとの変換について次のような特性を定義しています。

  • それぞれが果たすロール(操作)

  • 対話のコンテキスト内でメッセージを受信するためにそれぞれが提供するportType

<!--
  PartnerLinkType definition
  -->
    <!-- the QuoteConsumer partnerLinkType binds the service and
         requestor portType into an asynchronous conversation.
         -->
    <plnk:partnerLinkType name="QuoteConsumer">
        <plnk:role name="QuoteConsumerProvider">
              <plnk:portType name="tns:QuoteConsumer"/>
        </plnk:role>
        <plnk:role name="QuoteConsumerRequester">
              <plnk:portType name="tns:QuoteConsumerCallback"/>
        </plnk:role>
      </plnk:partnerLinkType>

QuoteConsumer.wsdlファイルのportTypeセクション

ポート・タイプは対話内で参加者が実装する一連の関連操作です。ポート・タイプは、受渡しされる情報や、その情報の形式などを定義します。同期コールバックでは、リクエストの送信とレスポンスの受信の両方に対して1つのポート・タイプのみが必要ですが、非同期コールバック(リプライが即時に返されないコールバック)では、リクエストの送信に1つ、着信するリプライの受信にもう1つ、合計2つのポート・タイプが必要です。

QuoteConsumer.wsdlファイルのportTypeセクションを見てみます。これは、顧客が入力した株価コードをクライアントが送信する先の株価情報Webサービスです。

<!--
  PortType definition
  -->

    <!-- portType implemented by the QuoteConsumer BPEL process -->
    <portType name="QuoteConsumer">
        <operation name="initiate">
            <input message="tns:QuoteConsumerRequestMessage"/>
        </operation>
    </portType>

    <!-- portType implemented by the requester of QuoteConsumer BPEL process
         for asynchronous callback purposes
         -->
    <portType name="QuoteConsumerCallback">
        <operation name="onResult">
            <input message="tns:QuoteConsumerResultMessage"/>
        </operation>
    </portType>

同期サービスにはポート・タイプが1つ定義されます。ポートは同期プロセスを開始し、レスポンスを使用してクライアントにコールバックします。この例では、portType CreditRatingServiceは株価コードを受け取り株価を返します。

4.2.1.3 パートナ・リンクを使用するサービスの検索

パートナ・リンクの作成時にサービスを検索できるように、Universal Description, Discovery, and Integration(UDDI)ブラウザが提供されています。Web Services Inspection Language(WSIL)およびUDDIは、サービスの公開と検索を支援します。

UDDIはWebベースの分散ディレクトリで、企業が自社情報をインターネット上のリストに登録しておき、互いに検索できる、従来の電話帳のような仕組みです。インフラストラクチャを確実に配備することで、仕様により、Simple Object Access Protocol(SOAP)を利用した高レベルの機能が提供されます。

WSILは、分散方式でのサービス検索に取り組み、単純な拡張XML文書形式を使用して任意の場所にサービス記述情報を分散できます。UDDIとは異なり、ビジネス・エンティティ情報とは関連がなく、特定のサービス記述形式も指定しません。WSILでは、ユーザーがサービス・プロバイダについて熟知しているものと想定し、WSDLなどのその他のサービス記述メカニズムを使用します。

パートナ・リンクの作成時にこのレジストリにアクセスするには、最初に次の手順でUDDIレジストリへの接続を作成する必要があります。

  1. Oracle JDeveloperの「接続ナビゲータ」「UDDIレジストリ」を右クリックします。

  2. 「UDDIレジストリ接続の作成」を選択します。

  3. ウィザードのステップに従って接続を作成します。

4.2.1.4 リモート・サーバー上のWebサービスへのアクセス

パートナ・リンクを作成する際には、リモート・サーバー上のWebサービスも選択できます。リモートの場所を指定するには、次のファイルを編集します。

SOA_Oracle_Home¥bpel¥system¥services¥install¥config¥inspection.wsil

これにより、WebサービスにOracle JDeveloperからアクセスできるようになります。「パートナ・リンクの作成」ウィンドウでパートナ・リンクを作成するときは、「サービス・エクスプローラ」アイコンをクリックします。これにより、「サービス・エクスプローラ」ウィンドウが表示され、リモートWebサービスの選択が可能になります。


関連項目:

「PartnerLink」

4.2.2 invokeアクティビティによるリクエストの実行

invokeアクティビティにはvariableセクションで定義されたrequestグローバル入力変数が含まれます。信用格付けWebサービスでは、このrequestグローバル入力変数を使用します。この変数には、顧客の社会保障番号が格納されます。信用格付けサービスによって返された信用格付けは、response変数に格納されます。

<sequence>
<!-- Receive input from requestor. Note: This maps to operation defined in QuoteConsumer.wsdl
-->
<receive name="receiveInput" partnerLink="client" portType="samples:QuoteConsumer"
operation="initiate" variable="input" createInstance="yes"/>
<assign>
<copy>
<from variable="input" part="payload" query="/tns:symbol"/>
<to variable="request" part="symbol" query="/symbol"/>
</copy>
</assign>
<!-- Generate content of output message based on the content of the input message.
-->
<invoke name="invokeStockQuoteService" partnerLink="StockQuoteService"/>
<assign>
<copy>
<from variable="response" part="result" query="/result"/>
<to variable="output" part="payload" query="/tns:result"/>
</copy>
</assign>
<!-- Asynchronous callback to the requester. Note: the callback location and
correlation id is transparently handled using WS-addressing. -->
<invoke name="replyOutput" partnerLink="client"
portType="samples:QuoteConsumerCallback" operation="onResult"
inputVariable="output"/>
</sequence>

4.3 同期サービスのコール

この項では、QuoteConsumer.bpelファイルを使用して同期コールバック操作について説明します。詳細な手順は、http://www.oracle.com/technology/bpelを参照し、まず「Training Material」にあるファイルをダウンロードしてください。

次の図に、QuoteConsumer.bpelファイルのダイアグラムを示します。ここでは、5つのアクティビティを使用する単純なアプリケーションが定義されています。

図4-1 QuoteConsumer.bpelのダイアグラム

図sync2.gifの説明が続きます
図sync2.gifの説明

次のアクションを行います。

  1. QuoteConsuter.wsdlファイルで定義したように、receiveInput receiveアクティビティは、ユーザー(クライアント)からの入力を受け取ります。

  2. 最初のassignアクティビティは、クライアントからのデータをパッケージ化し、invokeStockQuoteサービスで受取り可能にします。

  3. invokeStockQuoteServiceアクティビティは、再パッケージ化されたデータをStockQuoteServiceサービスに送信し、レスポンスを受け取ります。

  4. 2番目のassignアクティビティは、このレスポンスをreplyOutputアクティビティに再パッケージ化し、クライアント・アプリケーションで受取り可能にします。

  5. replyOutputアクティビティは、再パッケージ化されたレスポンスをクライアントに返します。

次のBPELコードにより、同期コールバックが実行されます。

<assign>
  <copy>
    <from variable="input" part="payload" query="/tns:symbol"/>
    <to variable="request" part="symbol" query="/symbol"/>
  </copy>
</assign>
<invoke name="invokeStockQuoteService" partnerLink="StockQuoteService"
 portType="services:StockQuoteService" operation="process"
 inputVariable="request" outputVariable="response"/>

<!-- Generate content of output message based on the content of the input message.
-->
     <assign>
       <copy>
         <from variable="response" part="result" query="/result"/>
         <to variable="output" part="payload" query="/tns:result"/>
       </copy>
     </assign>

4.4 まとめ

この章では、同期Webサービスを起動してパートナ・リンクを追加するBPELプロセスの概要について説明しました。このサービスは、クライアントから入力として株価コードを受け取り、株価を同期的に返すものでした。