Hitachi

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


5.6.10 補償アクティビティ

補償処理を実行するアクティビティを定義するアクティビティです。補償アクティビティは,ビジネスプロセス実行中にフォルトが発生した場合に,実行完了していた処理を取り消すときに使用します。

補償アクティビティは,[補償アクティビティ]ダイアログで詳細を定義します。

〈この項の構成〉

(1) 定義手順

定義の手順を次に示します。

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

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

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

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

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

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

  3. [補償アクティビティ]ダイアログで補償するアクティビティを設定します。

    [補償アクティビティ]ダイアログの表示・入力内容の詳細については,マニュアル「サービスプラットフォーム リファレンス」の「1.4.16 補償アクティビティダイアログ」を参照してください。

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

(2) 定義時の注意事項

(3) 補償範囲の定義

補償範囲とは,補償アクティビティと連結したフォルトハンドラまたは補償ハンドラを設定している,スコープ直下の領域のことです。ただし,フォルトハンドラ内,および補償ハンドラ内は,補償範囲から除外されます。

補償範囲にどこまでのアクティビティが含まれるのか,6つの例を使って説明します。

(a) 基本的なパターン

次の図の場合,「サービス呼出1」および「サービス呼出2」が「補償1」の補償範囲に含まれます。

図5‒11 補償範囲:基本的なパターン

[図データ]

(b) 補償ハンドラの定義されたアクティビティが,分岐の中にあるパターン

次の図の場合,「分岐開始1」,「無操作1」,「サービス呼出1」,「分岐終了1」および「サービス呼出2」が「補償1」の補償範囲に含まれます。

図5‒12 補償範囲:補償ハンドラの定義されたアクティビティが,分岐の中にあるパターン

[図データ]

また,この図のうち,「分岐開始1」「分岐終了1」が並列アクティビティの場合でも,同様に「分岐開始1」,「無操作1」,「サービス呼出1」,「分岐終了1」および「サービス呼出2」が「補償1」の補償範囲に含まれます。

(c) 補償ハンドラの定義されたアクティビティが,繰り返しの中にあるパターン

次の図の場合,「繰り返し1」,「サービス呼出1」および「サービス呼出2」が「補償1」の補償範囲に含まれます。

図5‒13 補償範囲:補償ハンドラの定義されたアクティビティが,繰り返しの中にあるパターン

[図データ]

(d) 補償ハンドラの定義されたアクティビティが,スコープの中にあるパターン

次の図の場合,「補償1」の補償範囲に含まれるのは「スコープ2」と「サービス呼出1」であり,「サービス呼出2」は「補償1」の補償範囲に含まれません。「補償1」の補償範囲は,「スコープ1」直下の領域であるためです。もし「補償1」を起点として「サービス呼出2」の補償ハンドラを起動させたい場合は,「スコープ2」に補償コネクションと補償アクティビティを定義する必要があります。

図5‒14 補償範囲:補償ハンドラの定義されたアクティビティが,スコープの中にあるパターン

[図データ]

(e) 補償ハンドラの定義されたアクティビティが,フォルトハンドラ内または補償ハンドラ内にあるパターン

次の図の場合,「補償1」の補償範囲に含まれるのは「スコープ2」と「サービス呼出2」であり,「サービス呼出1」は「補償1」の補償範囲に含まれません。「サービス呼出1」は,「スコープ2」のフォルトハンドラ内に配置されているので,「補償1」の補償範囲から除外されるためです。

図5‒15 補償範囲:補償ハンドラの定義されたアクティビティが,フォルトハンドラ内または補償ハンドラ内にあるパターン

[図データ]

また,この図のうち,「スコープ2」と「サービス呼出1」が補償コネクションで連結されている場合でも,同様に「サービス呼出1」は補償範囲に含まれません。

(f) 補償アクティビティがスコープに囲われているパターン

次の図の場合,「サービス呼出1」および「サービス呼出2」が「補償1」の補償範囲に含まれます。

図5‒16 補償範囲:補償アクティビティがスコープに囲われているパターン

[図データ]

「補償1」がスコープに囲われている場合でも,「サービス呼出1」および「サービス呼出2」は「スコープ1」の直下に配置されているため,補償範囲に含まれます。なお,「補償1」が,分岐アクティビティや並列アクティビティ,繰り返しアクティビティなどに囲われている場合でも,同様に「サービス呼出1」および「サービス呼出2」は「補償1」の補償範囲に含まれます。