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

戻る
戻る
 
次へ
次へ
 

14 BPELプロセスでのイベントおよびタイムアウトの使用

この章では、イベントおよびタイムアウトの使用方法について説明します。Webサービスはレスポンスを返すまでに長時間かかる場合があるため、BPELプロセス・サービス・コンポーネントでは一定の時間が経過した後、タイムアウトしてフローの残りを継続できることが必要です。

項目は次のとおりです。

14.1 イベントおよびタイムアウトの概念に関する概要

この章では、融資提案を提供するStar LoanというWebサービスからのレスポンスを1分間待機するBPELプロセス・サービス・コンポーネントのプログラミング例を説明します。 Star Loanが1分以内にレスポンスを返さない場合、BPELプロセス・サービス・コンポーネントはUnited Loanという別のWebサービスからの融資提案を自動的に選択します。現実的には、時間の制限は48時間など1分より大きな値です。しかし、この例では、BPELプロセス・サービス・コンポーネントが正しく動作しているかどうかを確認するために、そのような長時間の待機は設定しません。

非同期Webサービスはレスポンスを返すまでに長時間かかる場合があるため、BPELプロセス・サービス・コンポーネントでは一定の時間が経過した後、タイムアウトしたり、待機を中止してフローの残りを継続できることが必要です。pickアクティビティを使用すると、指定の時間待機するかまたは機能の実行を継続するようにBPELフローを構成できます。有効期限の設定には、waitアクティビティを使用します。

14.2 プロセスの継続または待機を選択するpickアクティビティの作成

pickアクティビティには2つのブランチがあり、それぞれに条件があります。最初に条件が満たされたブランチが実行されます。次の例では、1つのブランチの条件は融資提案を受け取ることで、もう1つのブランチの条件は指定の時間待機することです。

図14-1に概要を示します。(優先度に従って)次のアクティビティが発生します。

  1. invokeアクティビティがサービス(この場合はStar Loanからの融資提案に対するリクエスト)を開始します。

  2. 次に、pickアクティビティが開始されます。このアクティビティには次の条件があります。

    • onMessage

      この条件には、Star Loan Webサービスからの融資提案の形式でリプライを受け取るためのコードが含まれています。 onMessageコードは、タイムアウトが追加される前の、Star Loan Webサービスからのレスポンスを受け取るコードと同じです。

    • onAlarm

      この条件には、1分のタイムアウトのコードが含まれています。この時間はPT1Mとして定義されています。これは、タイムアウトまでに1分待機するという意味です。 タイムアウト設定には、次の記号を使用します。

      • Sは秒

      • Mは分

      • Hは時間

      • Dは日

      • Yは年

      あまり一般的な例ではありませんが、時間制限が1315秒の場合は、PT1Y3D15Sと入力します。コードの残りの部分では、融資変数selectedおよびapprovedをfalseに設定し、年率(APR)を0.0に設定して、この情報をloanOffer変数にコピーしています。

      期間のフォーマットは、BPEL標準で指定されています。期間のフォーマットの詳細は、次の場所にある最新ドキュメント「XML Schema Part 2: Datatypes」の期間に関する項を参照してください。

      http://www.w3.org/TR/xmlschema-2/#duration
      
  3. 最初に条件が満たされたpickアクティビティのブランチが、BPELプロセス・サービス・コンポーネントにより実行されます。他のブランチは実行されません。

図14-1 pickアクティビティの概要

図14-1の説明は次にあります。
「図14-1 pickアクティビティの概要」の説明

14.2.1 pickアクティビティの作成方法

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

  1. SOAコンポジット・エディタで、BPELプロセス・サービス・コンポーネントをダブルクリックします。

  2. 「コンポーネント・パレット」から、デザイナにpickアクティビティをドラッグします。

  3. pick アクティビティを開きます。

    pickアクティビティには、onMessageブランチ(封筒アイコン)とonAlarmブランチ(アラーム・クロック・アイコン)が含まれます。 図14-2に例を示します。

    図14-2 pickアクティビティ

    図14-2の説明は次にあります。
    「図14-2 pickアクティビティ」の説明

  4. 表示されたpickアクティビティのonAlarmブランチをダブルクリックし、時間制限を1時間ではなく1分に設定します。 図14-3に例を示します。

    図14-3 onAlarmブランチ

    図14-3の説明は次にあります。
    「図14-3 onAlarmブランチ」の説明

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

  6. onMessageブランチをダブルクリックします。 図14-4に例を示します。

    図14-4 onMessageブランチ

    図14-4の説明は次にあります。
    「図14-4 onMessageブランチ」の説明

  7. 融資サービスからのレスポンスを受け取るように、その属性を編集します。

14.2.2 pickアクティビティ作成時の処理内容

例14-1のコード・セグメントは、この操作のpickアクティビティに対する設計完了後の定義を示しています。

例14-1 pickアクティビティ

  <pick>
        <!--  receive the result of the remote process -->
        <onMessage partnerLink="LoanService"
            portType="services:LoanServiceCallback"
            operation="onResult" variable="loanOffer">

        <assign>
        <copy>
            <from variable="loanOffer" part="payload"/>
            <to variable="output" part="payload"/>
        </copy>
        </assign>

       </onMessage>
       <!--  wait for one minute, then timesout -->
       <onAlarm for="PT1M">
            <assign>
                <copy>
                    <from>
                        <loanOffer xmlns="http://www.autoloan.com/ns/autoloan">
                            <providerName>Expired</providerName>
                            <selected type="boolean">false</selected>
                            <approved type="boolean">false</approved>
                            <APR type="double">0.0</APR>
                        </loanOffer>
                    </from>
                    <to variable="loanOffer" part="payload"/>
                </copy>
            </assign>
       </onAlarm>
</pick>

14.3 有効期限を設定するwaitアクティビティの作成

waitアクティビティを使用すると、プロセスは指定された期間または時間制限に達するまで待機できます。有効期限条件を1つのみ指定する必要があります。このアクティビティの典型的な用途は、一定の時間に操作を起動することです。通常は、プロセスの状態に依存する式を入力します。

待機期間を指定する場合は、次の点に注意してください。


注意:

waitアクティビティの期限切れイベントのスケジュールには、Quartzバージョン1.6がサポートされています。

14.3.1 waitアクティビティの作成方法

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

  1. 「コンポーネント・パレット」から、デザイナにwaitアクティビティをドラッグします。

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

  3. 「期間」セクションに、待機する時間を入力します。

  4. 図14-5に示すように、「期限」セクションで、待機する期限を選択します。

    図14-5 「Wait」ダイアログ

    図14-5の説明は次にあります。
    「図14-5 「「Wait」ダイアログ」の説明

14.3.2 waitアクティビティ作成時の処理内容

例14-2に示すように、有効期限条件を1つのみ指定する必要があります。

例14-2 waitアクティビティ

<wait (for="duration-expr" | until="deadline-expr") standard-attributes>
    standard-elements
  </wait>

14.4 同期プロセスに対するタイムアウトの設定

リモート・データベースに接続する同期プロセスについては、syncMaxWaitTimeタイムアウト・プロパティを増やす必要があります。

14.4.1 同期プロセスに対するタイムアウトの設定方法

同期プロセスに対してタイムアウトを設定する手順は、次のとおりです。

  1. ORACLE_HOME/domains/user_domain_name/config/soa-infra/configuration/bpel-config.xmlファイルを開きます。

  2. syncMaxWaitTimeプロパティの値を編集します。 例14-3に例を示します。

    例14-3 syncMaxWaitTimeタイムアウト・プロパティ

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <bpel-config xmlns="http://xmlns.oracle.com/soa/config/bpel" version="11.1.0">
        <!--bpelcClasspath>custom_bpelc_classpath</bpelcClasspath-->
        <dspSystemThreads>2</dspSystemThreads>
        <dspInvokeThreads>20</dspInvokeThreads>
        <dspEngineThreads>30</dspEngineThreads>
        <dspMaxRequestDepth>600</dspMaxRequestDepth>
        <auditLevel>inherit</auditLevel>
        <oneWayDeliveryPolicy>on</oneWayDeliveryPolicy>
        <statsLastN>-1</statsLastN>
        <auditDetailThreshold>50000</auditDetailThreshold>
        <largeDocumentThreshold>100000</largeDocumentThreshold>
        <validateXML>false</validateXML>
        <expirationMaxRetry>5</expirationMaxRetry>
        <expirationRetryDelay>120</expirationRetryDelay>
        <qualityOfService>DirectWrite</qualityOfService>
        <syncMaxWaitTime>45</syncMaxWaitTime>
        <instanceKeyBlockSize>10000</instanceKeyBlockSize>
        <maximumNumberOfInvokeMessagesInCache>100000
          </maximumNumberOfInvokeMessagesInCache></bpel-config>