5.4.5 補償処理を定義する
補償処理とは,ビジネスプロセス実行中にフォルトが発生した場合に,実行完了していた処理を打ち消す処理のことです。
補償処理は,補償処理の対象となるアクティビティと,補償処理を実行するアクティビティを連結して定義します。連結には補償コネクションを利用します。
- 〈この項の構成〉
(1) 補償処理の定義手順
補償処理の定義手順を次に示します。
-
スコープアクティビティを配置します。
操作の詳細は次の個所を参照してください。
-
アクティビティの配置方法
-
各アクティビティの定義方法の詳細
-
スコープアクティビティの詳細
-
-
スコープアクティビティの中に,補償処理の対象となるアクティビティと,補償処理を実行するアクティビティを配置します。
-
手順2.のアクティビティを補償コネクションで連結します。
アクティビティの連結方法については,「5.4.2(2) 連結の設定方法」を参照してください。また,補償コネクションを利用できるアクティビティについては,「5.4.2(5) アクティビティの連結条件」を参照してください。
-
スコープアクティビティと同一の階層に戻り,補償アクティビティを配置します。
-
スコープアクティビティと補償アクティビティをフォルトコネクションで連結します。
-
補償アクティビティをダブルクリックします。
[補償アクティビティ]ダイアログが表示されます。
[補償アクティビティ]ダイアログの入力・表示内容の詳細については,マニュアル「サービスプラットフォーム リファレンス」の「1.4.16 補償アクティビティダイアログ」を参照してください。
-
補償するアクティビティを設定します。
[補償するアクティビティ]ラジオボタンで,次のどちらかを選択します。
-
「すべて」:補償範囲内に存在する,補償ハンドラが定義されたすべてのアクティビティに対し,補償処理を実行します。補償範囲の詳細については「5.6.10(3) 補償範囲の定義」を参照してください。
-
「1つのみ」:コンボボックスで選択したアクティビティに対し,補償処理を実行します。
-
-
[OK]ボタンをクリックします。
(2) 補償処理の定義例
補償処理の定義例について,図を使って説明します。
次の図に示すとおり,「サービス呼出1」には補償処理として「サービス呼出1のキャンセル」,「サービス呼出2」には補償処理として「サービス呼出2のキャンセル」と,各アクティビティに補償処理をそれぞれ定義すると,これらの補償処理をまとめて「補償1」の補償範囲に含められます。1つの補償アクティビティの実行を契機に,複数の補償処理がまとめて実行されるので,補償アクティビティでの定義が簡単にできます。
図で示したアクティビティの遷移の詳細を,処理が正常終了した場合と,処理の実行中にフォルトが発生した場合に分けて説明します。なお,図中の矢印や部品に付記した番号は,説明文の番号に対応しています。
- 処理が正常終了した場合のアクティビティの遷移
-
1-1. 「受付1」を実行し,「スコープ1」へ遷移する。
1-2. 「スコープ1」を実行し,「サービス呼出1」へ遷移する。
1-3. 「サービス呼出1」を実行し,「サービス呼出2」へ遷移する。
1-4. 「サービス呼出2」を実行し,「サービス呼出3」へ遷移する。
- 「サービス呼出2」でフォルトが発生した場合のアクティビティの遷移
-
2-1. 「サービス呼出2」でフォルトが発生し,「スコープ1」のフォルトハンドラでキャッチする。
2-2. 「補償1」で「サービス呼出1のキャンセル」のアクティビティを呼び出し,実行する。
- 「サービス呼出3」でフォルトが発生した場合のアクティビティの遷移
-
3-1. 「サービス呼出3」でフォルトが発生し,「スコープ1」のフォルトハンドラでキャッチする。
3-2. 「補償1」で「サービス呼出1のキャンセル」と「サービス呼出2のキャンセル」のアクティビティを呼び出し,実行する。