2.4.3 同期点取得
- 〈この項の構成〉
(1) コミット
トランザクションが正常終了したときの同期点取得(コミット)は,SPP.NETまたはSUP.NETからTrnクラスのCommitメソッドを呼び出して行います。
グローバルトランザクションは,すべてのトランザクションブランチが正常に終了したことで正常終了となります。
(a) 連鎖,非連鎖モードでのコミット
トランザクション処理の同期点取得には,次の2種類があります。
-
連鎖モードのコミット
連鎖モードのコミットは,TrnクラスのCommitChainedメソッドを呼び出して要求します。
-
非連鎖モードのコミット
非連鎖モードのコミットは,TrnクラスのCommitメソッドを呼び出して要求します。
(b) コミット要求メソッドを呼び出さない場合の処理
次の場合,トランザクションはロールバックされます。
-
TrnクラスのCommitメソッドを呼び出さないでSPP.NETまたはSUP.NETが終了したとき
-
TrnクラスのCommitメソッドを呼び出す前にSPP.NETまたはSUP.NETが異常終了したとき
(2) ロールバック
(a) TP1/Serverの処理でのエラーの場合
トランザクションでエラーが発生すると,TrnクラスのCommitメソッドで例外が発生します。そのトランザクションは部分回復対象としてロールバックされます。グローバルトランザクション内のどれか一つのトランザクションブランチでエラーが発生した場合でも,グローバルトランザクション全体がロールバックの対象となります。
このときTP1/Serverは,トランザクションブランチをロールバック対象とみなして,部分回復処理をします。
(b) ロールバック要求メソッドを呼び出す場合
トランザクションをSPP.NETまたはSUP.NETの判断でロールバックしたいときは,SPP.NETまたはSUP.NETからロールバック要求のメソッドを呼び出します。
トランザクション処理のロールバックには,次の2種類があります。
-
連鎖モードのロールバック
連鎖モードのロールバックは,TrnクラスのRollbackChainedメソッドを呼び出して要求します。RollbackChainedメソッドを呼び出してロールバックすると,このメソッドを呼び出したSPP.NETおよびSUP.NETのプロセスは,ロールバック処理後も,グローバルトランザクションの範囲内にあります。
-
非連鎖モードのロールバック
非連鎖モードのロールバックは,TrnクラスのRollbackメソッドを呼び出して要求します。Rollbackメソッドを呼び出してロールバックすると,このメソッドを呼び出したSPP.NETおよびSUP.NETのプロセスは,ロールバック処理後,グローバルトランザクションの範囲外となります。