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

戻る
戻る
 
次へ
次へ
 

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

この章では、BPELプロセスから同期Webサービスを起動する方法について説明します。 同期起動の実行に必要なコンポーネントの設定方法についても提示します。また、この章では、これらのコンポーネントのコーデイングの方法についても説明します。

項目は次のとおりです。

入力文字列が使用され、「Hello 」という接頭辞を追加した文字列を返す単純なHello Worldサンプル(bpel-101-HelloWorld)を参照する場合は、次のURLにアクセスしてください。

http://www.oracle.com/technology/sample_code/products/bpel

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

同期Webサービスは、起動に対してレスポンスを即時に返します。 BPELは、パートナ・リンクを介して同期Webサービスに接続し、データを送信し、同一の同期起動でリプライを受信できます。

同期起動には、次のコンポーネントが必要です。


注意:

タイムアウト値は、Middleware_Home/domains/domain_name/config/soa-infra/configuration/bpel-config.xmlファイルのsyncMaxWaitTime属性、またはOracle Enterprise Manager Fusion Middleware ControlコンソールのシステムMBeanブラウザ設定oracle.as.soainfra.config:type=BPELConfig,name=bpelで指定できます。BPELプロセス・サービス・コンポーネントが指定時間内にリプライを受信しないと、アクティビティはエラーとなります。

8.2 同期Webサービスの起動

この項では同期起動操作について説明します。WebLogic Fusion Order DemoアプリケーションのOrderProcessor.bpelファイルを例として使用します。 操作の詳細は、『Oracle Fusion Middleware Oracle SOA Suiteアプリケーションの作成および実行のためのチュートリアル』を参照してください。

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

同期Webサービスを起動する手順は、次のとおりです。

  1. Oracle BPELデザイナの「コンポーネント・パレット」で、必要なパートナ・リンク、invokeアクティビティ、assignアクティビティをデザイナにドラッグします。

  2. それぞれのダイアログを編集します。 手順の詳細は、『Oracle Fusion Middleware Oracle SOA Suiteアプリケーションの作成および実行のためのチュートリアル』を参照してください。

次の図は、OrderProcessor.bpelファイルの「Scope_AuthorizeCreditCard」scopeアクティビティのダイアグラムを示しています。単純な一連のアクションが定義されています。

図8-1 OrderProcessor.bpelのダイアグラム

図8-1の説明は次にあります。
「図8-1 OrderProcessor.bpelのダイアグラム」の説明

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

  1. 「Assign_CreditCheckInput」assignアクティビティは、クライアントからのデータをパッケージ化します。assignアクティビティを使用すると、ある変数の内容を別の変数にコピーできます。 ここでは、クレジット・カード・タイプ、クレジット・カード番号および購入金額を取得し、それらを「CreditAuthorizationService」サービスの入力変数に割り当てます。

  2. 「InvokeCheckCreditCard」アクティビティは、「CreditCardAuthorization」サービスをコールします。次の図は、「CreditCardAuthorizationService」Webサービスを示しています。このWebサービスはパートナ・リンクとして定義されています。

    図8-2 「CreditCardAuthorizationService」パートナ・リンク

    図8-2の説明は次にあります。
    「図8-2 「CreditCardAuthorizationService」パートナ・リンク」の説明

    次の図は、「InvokeCheckCreditCard」invokeアクティビティを示しています。

    図8-3 「InvokeCheckCreditCard」invokeアクティビティ

    図8-3の説明は次にあります。
    「図8-3 「InvokeCheckCreditCard」invokeアクティビティ」の説明

  3. 「Switch_EvaluateCCResult」switchアクティビティは、クレジット・カード検証の結果を確認します。 switchアクティビティの詳細は、第11.2項「switchアクティビティの作成による条件分岐の定義」を参照してください。

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

パートナ・リンクとinvokeアクティビティを作成すると、同期Webサービスの起動に必要なBPELコードが、適切なBPELおよびWeb Services Description Language(WSDL)ファイルに追加されます。

8.2.2.1 BPELコード内のパートナ・リンク

OrderProcessor.bpelコードでは、パートナ・リンクによって、リンク名とタイプ、およびパートナ・サービスとの相互作用におけるBPELプロセス・サービス・コンポーネントのロールが定義されます。

例8-1は、BPELソース・コードでのCreditCardAuthorizationServiceパートナ・リンク定義を示しています。

例8-1 パートナ・リンク定義

<partnerLink name="CreditCardAuthorizationService"
    partnerRole="CreditAuthorizationPort"
    partnerLinkType="ns2:CreditCardAuthorizationService"/>

例8-2は、Scope_AuthorizeCreditCardスコープでローカルにアクセスできる変数定義を示しています。これらの変数のタイプは、このプロセス自体のWSDLに定義されています。

例8-2 変数定義

<variable name="lCreditCardInput"
          messageType="ns2:CreditAuthorizationRequestMessage"/>
<variable name="lCreditCardOutput"
          messageType="ns2:CreditAuthorizationResponseMessage"/>

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

8.2.2.2 BPELコード内のパートナ・リンク・タイプとポート・タイプ

WebサービスのCreditCardAuthorizationService.wsdlファイルには、2つのセクションがあります。これらのセクションを使用して、WebサービスとBPELプロセス・サービス・コンポーネントの連携を可能にします。

  • partnerLinkType:

    BPELプロセス・サービス・コンポーネントとクレジット・カード認可Webサービス間の変換について、次の特性を定義します。

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

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

  • portType:

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

    この例では、portType CreditAuthorizationPortが、クレジット・カード・タイプ、クレジット・カード番号および購入金額を受信し、信用調査結果を返します。

    例8-3に、partnerLinkTypeおよびportTypeの例を示します。

    例8-3 partnerLinkTypeおよびportTypeの定義

    <plnk:partnerLinkType name="CreditCardAuthorizationService">
         <plnk:role name="CreditAuthorizationPort">
             <plnk:portType name="tns:CreditAuthorizationPort"/>
         </plnk:role>
    </plnk:partnerLinkType>
    

8.2.2.3 リクエストを実行するためのinvokeアクティビティ

invokeアクティビティには、lCreditCardInputローカル入力変数が含まれています。 クレジット・カード認可WebサービスがlCreditCardInputローカル入力変数を使用します。 この変数には、顧客のクレジット・カード・タイプ、クレジット・カード番号および購入金額が格納されます。 lCreditCardOutput変数は、CreditAuthorizationServiceからの信用調査結果を返します。 例8-4に例を示します。

例8-4 invokeアクティビティ

<invoke name="InvokeCheckCreditCard"
    inputVariable="lCreditCardInput"
    outputVariable="lCreditCardOutput"
    partnerLink="CreditCardAuthorizationService"
    portType="ns2:CreditAuthorizationPort"
    operation="AuthorizeCredit"/>

8.2.2.4 BPELコードでの同期起動

例8-5に示すBPELコードは、同期起動を実行します。

例8-5 同期起動

<assign name="Assign_CreditCheckInput">
    <copy>
        <from variable="gOrderInfoVariable"
            query="/ns4:orderInfoVOSDO/ns4:OrderTotal"/>
        <to variable="lCreditCardInput" part="Authorization"
            query="/ns8:AuthInformation/ns8:PurchaseAmount"/>
    </copy>
    <copy>
        <from variable="gOrderInfoVariable"
            query="/ns4:orderInfoVOSDO/ns4:CardTypeCode"/>
        <to variable="lCreditCardInput" part="Authorization"
            query="/ns8:AuthInformation/ns8:CCType"/>
    </copy>
    <copy>
        <from variable="gOrderInfoVariable"
            query="/ns4:orderInfoVOSDO/ns4:AccountNumber"/>
        <to variable="lCreditCardInput" part="Authorization"
            query="/ns8:AuthInformation/ns8:CCNumber"/>
    </copy>
</assign>
<invoke name="InvokeCheckCreditCard"
    inputVariable="lCreditCardInput"
    outputVariable="lCreditCardOutput"
    partnerLink="CreditCardAuthorizationService"
    portType="ns2:CreditAuthorizationPort"
    operation="AuthorizeCredit"/>

8.3 同期BPELプロセスを使用した一方向メディエータのコール

非同期コールバックを使用してバック・エンドで同期リプライをシミュレートしながら、フロント・エンドで同期インタフェースを公開できます。 これは、composite.xmlファイルのconfiguration.transactionプロパティがrequiresNewに自動設定されている場合のBPELプロセスのデフォルト動作です。 例8-6に詳細を示します。

例8-6 configuration.transactionプロパティ

<component name="BPELProcess1">
@ <implementation.bpel src="BPELProcess1.bpel"/>
@ <property name="configuration.transaction" type="xs:string"
@ many="false">requiresNew</property>
@ </component>

requiresNewは推奨値です。 クライアントのトランザクションに参加する場合は、configuration.transactionプロパティをRequiredに設定する必要があります。