CBLDCTRN('U-COMMIT')

名称

非連鎖モードのコミット

形式

PROCEDURE DIVISIONの指定

CALL 'CBLDCTRN' USING 一意名1

DATA DIVISIONの指定

01 一意名1.
  02 データ名A PIC X(8) VALUE 'U-COMMIT'.
  02 データ名B PIC X(5).

機能

グローバルトランザクションが正常に終了したこと(コミット)を,トランザクションを構成するトランザクションブランチ,トランザクションサービス,リソースマネジャに知らせます。

CBLDCTRN('U-COMMIT')が正常に終了したあとには,新しいグローバルトランザクションは開始しません。

グローバルトランザクションが複数のトランザクションブランチから構成される(CBLDCTRN('U-COMMIT')を呼び出したUAPだけではない)場合は,それぞれのトランザクションブランチの処理結果がコミットにならないかぎり,コミットされません。

CBLDCTRN('U-COMMIT')を呼び出せるのは,ルートトランザクションブランチ(トランザクションを開始したUAP)だけです。それ以外のUAPから呼び出した場合は,ステータスコード「00905」でエラーリターンします。

CBLDCTRN('U-COMMIT')を呼び出すプロセスは,このマニュアルの記述に従って正しく作成されたUAPを稼働させたものでなければなりません。

CBLDCTRN('U-COMMIT')は,同期点処理が完了したときに正常に終了,またはエラーリターンのどちらかで返ります。CBLDCTRN('U-COMMIT')を呼び出すサービスが正常終了するためには,UAPの実行環境を設定するときに,トランザクション属性を指定していることが前提です。

UAPで値を設定するデータ領域

●データ名A

非連鎖モードのコミットを示す要求コードを「VALUE 'U-COMMIT'」と設定します。非連鎖モードのコミットをした処理以降も,この内容は変わりません。

OpenTP1から値が返されるデータ領域

●データ名B

ステータスコードが,5けたの数字で返されます。

ステータスコード

ステータスコード意味
00000正常に終了しました。このプロセスはトランザクション下にありません。プロセスはグローバルトランザクションの範囲の外です。
00902現在のトランザクションは,コミットできないでロールバックしました。プロセスはトランザクションの範囲の外です。
00903CBLDCTRN('U-COMMIT')を呼び出したグローバルトランザクションは,ヒューリスティック決定のため,あるトランザクションブランチはコミットとなり,あるトランザクションブランチはロールバックとなりました。
このステータスコードは,ヒューリスティック決定の結果が,グローバルトランザクションの同期点の結果と一致しなかった場合にリターンします。
このステータスコードが返る原因になったUAP,リソースマネジャ,およびグローバルトランザクションの同期点の結果は,メッセージログファイルを参照してください。
このステータスコードが返ったあとは,このプロセスはトランザクション下にはありません。プロセスはグローバルトランザクションの範囲の外です。
00904グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし,障害のため,ヒューリスティックに完了したトランザクションブランチの同期点の結果が判明しません。
このステータスコードが返る原因になったUAP,リソースマネジャ,およびグローバルトランザクションの同期点の結果は,メッセージログファイルを参照してください。
このステータスコードが返ったあと,このプロセスはトランザクション下にはありません。プロセスはグローバルトランザクションの範囲の外です。
トランザクションサービス定義で,trn_extend_functionオペランドに00000001​を指定し,1相コミット時にリソースマネジャからのリターン値がXAER_NOTAの場合も,ステータスコード00904を返します。
00905CBLDCTRN('U-COMMIT')を,正しくないコンテクスト(例えば,すでにトランザクション中にいない)から呼び出しています。トランザクションモードに対する影響はありません。
00908要求コード(データ名A)が間違っています。

指定例

01 MISC.
  02 CMD-CODE     PIC X(8).
  02 STATUS-CODE  PIC X(5).
    :
    :
MOVE 'U-COMMIT' TO CMD-CODE OF MISC.
CALL 'CBLDCTRN' USING MISC.
IF STATUS-CODE OF MISC NOT EQUAL TO '00000' THEN
   MOVE 'CANNOT COMMIT TRANSACTION' TO ERRMSG OF OUT-ERROR-REC
   WRITE OUT-ERROR-REC
END IF.