Hitachi

Cosminexus V11 BPM/ESB基盤 サービスプラットフォーム 開発ガイド 基本開発編


5.6.11 待機アクティビティ

待機アクティビティは,ビジネスプロセスの処理フローを一定の間隔または期限まで待機する処理を定義するアクティビティです。このアクティビティを使用すると,指定した期間の間,または指定した時刻まで,ビジネスプロセスの処理を待機することができます。

待機アクティビティは,[待機アクティビティ]ダイアログで詳細を定義します。待機する時間の間隔または期限はXPath式で指定します。

〈この項の構成〉

(1) 定義手順

  1. 待機アクティビティをキャンバスに配置します。

    アクティビティを配置する方法については,「5.4.1 アクティビティを配置する」を参照してください。

  2. 次のどちらかの方法で[待機アクティビティ]ダイアログを表示させます。

    • キャンバスの待機アクティビティをダブルクリックする

    • キャンバスの待機アクティビティを選択して右クリックし,[設定]を選択する

    [待機アクティビティ]ダイアログが表示されます。

  3. [待機アクティビティ]ダイアログに必要な情報を入力します。

    待機時間には「間隔」または「期限」を選択し,待機時間の間隔または期限をXPath式で指定します。

    [待機アクティビティ]ダイアログの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「1.4.17 待機アクティビティダイアログ」を参照してください。

  4. [OK]ボタンをクリックします。

(2) 待機時間として指定できる文字列

待機時間に指定する式はXPath式になります。ビジネスプロセスの処理の中でXPath式を評価し,その結果で得た文字列を待機時間として使用します。XPath式を評価して得ることができる文字列は,BPEL標準規格により一部制限があります。

XPath式を評価して得ることができる文字列を次に説明します。なお,XPathの指定については,「5.6.19 アクティビティ定義ダイアログのXPathの指定」を参照してください。

(a) 待機時間に「間隔」を指定する場合

待機時間に「間隔」を指定する場合,XPath式を評価して得ることができる文字列は,XML Schema型duration(xsd:duration)に従っている必要があります。XML Schema型durationとは,PnYnMnDTnHnMnS形式の経過時間を表す文字列を示す変数型です。

待機時間に「間隔」を指定する場合に,XPath式を評価して得ることができる文字列の例を次に示します。

(例1)1年2か月3日4時間5分6秒間隔を待機時間に指定する場合

XPath式を評価して得ることができる文字列は,「P1Y2M3DT4H5M6S」になります。

(例2)10秒間隔を待機時間に指定する場合

XPath式を評価して得ることができる文字列は,「PT10S」になります。

なお,[待機アクティビティ]ダイアログの[式]には,XPath式を指定する代わりに,「'」または「"」で囲むことで,直接待機する間隔を指定することもできます。「'」または「"」で直接待機する間隔を指定する場合の例を次に示します。

(例3)1年2か月3日4時間5分6秒間隔を待機時間に指定する場合

[待機アクティビティ]ダイアログの[式]に,「'P1Y2M3DT4H5M6S'」を直接指定します。

(例4)10秒間隔を待機時間に指定する場合

[待機アクティビティ]ダイアログの[式]に,「'PT10S'」を直接指定します。

(b) 待機時間に「期限」を指定する場合

待機時間に「期限」を指定する場合,XPath式を評価して得ることができる文字列は,XML Schema型dateTime(xsd:dateTime)に従っている必要があります。XML Schema型dateTimeとは,CCYY-MM-DDThh:mm:ss.sssTZ形式(.sssとTZは省略できる)の日時を表す文字列を示す変数型です。

待機時間に「期限」を指定する場合に,XPath式を評価して得ることができる文字列の例を次に示します。

(例1)2010年1月1日0時0分0秒を待機時間に指定する場合

XPath式を評価して得ることができる文字列は,「2010-01-01T00:00:00」または「2010-01-01T00:00:00.000TZ」になります。

なお,[待機アクティビティ]ダイアログの[式]には,XPath式を指定する代わりに,「'」または「"」で囲むことで,直接待機する期限を指定することもできます。「'」または「"」で直接待機する期限を指定する場合の例を次に示します。

(例2)日本時間の2010年1月1日0時0分0秒を待機時間に指定する場合

[待機アクティビティ]ダイアログの[式]に,「'2010-01-01T00:00:00+09:00'」を直接指定します。

(例3)グリニッジ標準時間(GMT)の2010年1月1日0時0分0秒を待機時間に指定する場合

[待機アクティビティ]ダイアログの[式]に,「'2010-01-01T00:00:00+00:00'」または「'2010-01-01T00:00:00Z'」を直接指定します。

(3) 定義時の注意事項

注※1

エラーにならないケースを次に示します。

(例1)

応答アクティビティよりもあとに,待機アクティビティを設定しています。待機処理以降は,非同期のビジネスプロセスとして実行されるため,エラーになりません。

待機アクティビティで処理を待機し,待機期限の時刻になったら,サービス呼出アクティビティが実行されます。

[図データ]

(例2)

応答アクティビティよりもあとに,待機アクティビティを設定しています。待機処理以降は,非同期のビジネスプロセスとして実行されるため,エラーになりません。

サービスリクエスタからの要求に応じて,並列処理として片方の無操作アクティビティの処理が実行されます。サービスリクエスタからもう一方の要求を受けて,一度サービスリクエスタに応答を返したあと,待機処理が実行されます。

[図データ]

注※2

エラーになるケースを次に示します。

(例1)

応答アクティビティよりも前に,待機アクティビティを設定しています。同期のビジネスプロセス内で待機アクティビティが実行されるため,ビジネスプロセスを実行するとエラーになります。

[図データ]

注※3

エラーになるケースを次に示します。

(例1)

待機アクティビティよりもあとに,受付アクティビティと組になっていない応答アクティビティを設定しています。そのため,ビジネスプロセスを実行するとエラーになります。

[図データ]

(4) HCSC簡易セットアップ機能で構築した環境で多重実行する場合の注意事項

HCSC簡易セットアップ機能で構築した環境では,待機アクティビティ後の処理の多重度がデフォルトで1に設定されているため,複数のプロセスインスタンスの待機アクティビティ後の処理は同時に実行されません。複数のプロセスインスタンスから同時に待機アクティビティ後の処理を行うと,あとから処理を開始したプロセスインスタンスの処理は,1つ前の処理が終了してから実行されます。

複数のプロセスインスタンスの待機アクティビティ後の処理を同時に実行したい場合は,usrconf.propertiesのejbserver.ejb.timerservice.maxCallbackThreadsプロパティを変更して,処理の多重度を調節してください。

複数のプロセスインスタンスを実行している場合で,待機アクティビティ後の処理の多重度が1のときと多重度を上げたときの処理の例を次の図に示します。なお,この例では,複数のプロセスインスタンスの処理が待機アクティビティ(待機1)で13:00まで待機したあと,待機後の処理(無操作2および無操作3)に2分掛かるものとします。

図5‒17 待機後の処理の多重度が1のときと待機後の処理の多重度を上げたときの処理の例

[図データ]

usrconf.propertiesのejbserver.ejb.timerservice.maxCallbackThreadsプロパティの設定方法については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「2.2.3 usrconf.properties(J2EEサーバ用ユーザプロパティファイル)」を参照してください。