トランザクションが正常終了したときの同期点取得(コミット)は,CUPからコミット要求のメソッドを呼び出して行います。グローバルトランザクションは,すべてのトランザクションブランチが正常に終了したことで正常終了となります。
トランザクション処理の同期点取得には,一つのトランザクションの終了後,同期点を取得して次のトランザクションを続けて起動する連鎖モードのコミットと,トランザクションの終了で同期点を取得したあと,新たなトランザクションを起動しない非連鎖モードのコミットがあります。
連鎖モードのコミットは,trnChainedCommitメソッドを呼び出して要求します。
非連鎖モードのコミットは,trnUnchainedCommitメソッドを呼び出して要求します。
トランザクションの連鎖,非連鎖モードを次の図に示します。
図2-12 トランザクションの連鎖,非連鎖モード
コミット要求のメソッドを呼び出さないでCUPが終了したとき,またはコミット要求のメソッドを呼び出す前にCUPが異常終了したときは,トランザクションはロールバックされます。
トランザクションでエラーが発生すると,コミット要求のメソッドがエラーリターンされます。そのトランザクションは部分回復対象としてロールバックされます。グローバルトランザクション内のどれか一つのトランザクションブランチでエラーが発生した場合でも,グローバルトランザクション全体がロールバックの対象となります。このときTP1/Serverは,トランザクションブランチをロールバック対象とみなして,部分回復処理をします。
TP1/Serverの処理でエラーが発生した場合のトランザクションのロールバックを,次の図に示します。
図2-13 トランザクションのロールバック(TP1/Serverの処理でエラーが発生した場合)
トランザクションをCUPの判断でロールバックしたいときは,CUPからロールバック要求のメソッドを呼び出します。
ロールバックには,連鎖モードのロールバックと非連鎖モードのロールバックがあります。
連鎖モードのロールバックは,trnChainedRollbackメソッドを呼び出して要求します。trnChainedRollbackメソッドを呼び出してロールバックすると,このメソッドを呼び出したCUPのプロセスは,ロールバック処理後も,グローバルトランザクションの範囲内にあります。
非連鎖モードのロールバックは,trnUnchainedRollbackメソッドを呼び出して要求します。trnUnchainedRollbackメソッドを呼び出してロールバックすると,このメソッドを呼び出したCUPのプロセスは,ロールバック処理後,グローバルトランザクションの範囲外となります。
ロールバック要求のメソッドを呼び出した場合のトランザクションのロールバックを,次の図に示します。
図2-14 トランザクションのロールバック(ロールバック要求のメソッドを呼び出した場合)
トランザクション処理でヒューリスティックが発生すると,CUPの同期点取得時にエラーリターンされます。この場合の例外について次に示します。
これらの例外が返される原因,およびグローバルトランザクションの同期点の結果については,TP1/Serverのメッセージログファイルを参照してください。
ヒューリスティック発生時の処置の詳細については,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。
トランザクションに関する,次に示す時間をTP1/Client/J環境定義で指定できます。詳細については「5.2 TP1/Client/J環境定義の詳細」を参照してください。
トランザクションブランチごとに取得するトランザクション統計情報の取得タイプを,TP1/Client/J環境定義で指定できます。詳細については「5.2 TP1/Client/J環境定義の詳細」を参照してください。