3.4.5 スコープの開始時および終了時にコミットする設定を選択した場合のトランザクション
スコープアクティビティは,[スコープアクティビティ]ダイアログで,[このスコープの開始と終了時のみコミットする]を選択した場合,スコープの開始時および終了時にトランザクションを制御します。
トランザクションを制御するスコープアクティビティのトランザクションについて説明します。
- 〈この項の構成〉
(1) スコープアクティビティが正常終了した場合
スコープアクティビティの開始処理で,スコープアクティビティの状態を実行中状態(待ち受け)にし,トランザクションをコミットしたあと,新たなトランザクションを開始します。そのあと,スコープアクティビティ内部に定義されたアクティビティを実行します。このとき,スコープアクティビティ内に定義されたアクティビティではトランザクションの制御は行われません。
スコープアクティビティの終了処理で,スコープアクティビティの状態を完了状態(待ち受け)にし,トランザクションをコミットしたあと,新たなトランザクションを開始します。そのあと,スコープアクティビティの状態を完了状態にします。このとき,状態は遷移しますが,トランザクションはコミットしません。
スコープアクティビティが正常終了した場合のトランザクションの範囲を次の図に示します。
- 参考
-
トランザクションを制御するスコープアクティビティのトランザクション制御の範囲について説明します。
-
トランザクションを制御するスコープアクティビティ内部に定義されているアクティビティでは,トランザクションの制御は行われません。
-
トランザクションを制御するスコープアクティビティのフォルト処理を行うアクティビティでは,トランザクションの制御は行われます。
-
トランザクションを制御するスコープアクティビティ以降に定義されたアクティビティでは,トランザクションの制御は行われます。
トランザクションを制御するスコープアクティビティのトランザクション制御の範囲を次の図に示します。
図3‒39 トランザクションを制御するスコープアクティビティのトランザクション制御の範囲 -
(2) スコープアクティビティ内部でシステム例外が発生した場合
スコープアクティビティ内部でシステム例外が発生した場合,スコープアクティビティは,トランザクションがコミットした時点(受付:完了状態,スコープ:実行中状態(待ち受け)までロールバックしたあと,スコープの状態にエラー発生(Error)を設定して,トランザクションをコミットします。
スコープアクティビティ内部でシステム例外が発生した場合のトランザクションの範囲を次の図に示します。
(3) スコープアクティビティ以降のアクティビティでシステム例外が発生した場合
スコープアクティビティ以降に定義されたアクティビティでシステム例外が発生した場合,トランザクションがコミットした時点(スコープアクティビティ:完了状態(待ち受け))までロールバックします。
スコープアクティビティ以降に定義されたアクティビティでシステム例外が発生した場合のトランザクションの範囲を次の図に示します。
(4) スコープアクティビティ内部でフォルトが発生した場合
トランザクション制御を行うスコープアクティビティの内部に定義されたアクティビティでフォルトが発生し,トランザクション制御を行うスコープアクティビティにフォルトが通知された場合,トランザクションがコミットした時点(受付:完了状態,スコープ:実行中状態(待ち受け)までロールバックしたあと,スコープアクティビティ内部に定義されたアクティビティの処理はキャンセルされます。
フォルトハンドラの定義を基に,対応するアクティビティを実行する場合は,スコープアクティビティの状態をフォルト中状態(Faulting)にします。このとき,状態は遷移しますが,トランザクションはコミットしません。
上位のスコープアクティビティにフォルトを通知する場合は,スコープアクティビティの状態をフォルト終了状態(Faulted)にします。この場合も状態は遷移しますが,トランザクションはコミットしません。上位のスコープアクティビティにフォルトを通知したあとの動作は,トランザクションを制御しないスコープアクティビティの動作と同じです。
スコープアクティビティ内部でフォルトが発生した場合のトランザクションの範囲を次の図に示します。
(5) フォルト発生後にシステム例外が発生した場合
フォルトハンドラの定義を基に対応するアクティビティを実行し,システム例外が発生した場合,スコープアクティビティは実行中状態(待ち受け)までロールバックします。
フォルト発生後にシステム例外が発生した場合のトランザクションの範囲を次の図に示します。