Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引


CBLEETRN('C-ROLL ')

〈このページの構成〉

名称

連鎖モードのロールバック

形式

PROCEDURE DIVISIONの指定

CALL  'CBLEETRN' USING 一意名1

DATA DIVISIONの指定

01 一意名1.
  02 データ名A  PIC  X(8) VALUE 'C-ROLL  '.
  02 データ名B  PIC  X(5).
  02 FILLER     PIC  X(3).
  02 データ名C  PIC  X(4).
  02 データ名D  PIC  9(9) COMP-X.

機能

トランザクションをロールバックします。データ名Cに'KEEP'を設定した場合,連鎖モードでロールバックしたあとには続けてトランザクションが開始します。データ名Cに'KEEP'以外を設定した場合,新たなトランザクションを開始しないで強制終了します。

CBLEETRN('C-ROLL ')を呼び出すことで,ルートトランザクションブランチから,トランザクションブランチ,トランザクションサービス,およびリソースマネジャにロールバックを知らせます。

データ名Cに'KEEP'を設定したCBLEETRN('C-ROLL ')が正常に終了すると,CBLEETRN('C-ROLL ')を呼び出したスレッドはロールバックしてリターンします。そのあとで新しいグローバルトランザクションが開始します。CBLEETRN('C-ROLL ')を呼び出したスレッドは,トランザクションの範囲内です。

CBLEETRN('C-ROLL ')を呼び出せるのは,ルートトランザクションブランチだけです。それ以外のUAPから呼び出した場合は,ステータスコード「00941」でエラーリターンします。ただし,データ名Cに'PRCS','KILL',または'ABRT'を指定した場合は,トランザクションブランチから呼び出せます。

CBLEETRN('C-ROLL ')を呼び出すスレッドは,このマニュアルの記述に従って正しく作成されたUAPを稼働させたものでなければなりません。

CBLEETRN('C-ROLL ')は,同期点処理が完了したときに正常に終了,エラーリターン,または強制終了します。

サービスプログラムリターン時に明示的にCBLEETRN('C-COMMIT')またはCBLEETRN('C-ROLL ')を呼び出さない場合は,トランザクションの同期点を取得します。

トランザクション起動後にUAPをリターンするまでの,CBLEETRN('C-ROLL ')またはCBLEETRN('ROLLMARK')の呼び出し回数の上限値を,トランザクション関連定義のtrn_max_rollback_countオペランドで指定できます。CBLEETRN('C-ROLL ')またはCBLEETRN('ROLLMARK')の呼び出し回数が,trn_max_rollback_countオペランドで指定した上限値に達した場合,トランザクション関連定義のtrn_max_rollback_downmodeオペランドの指定に従って,異常終了するか,またはKFSB50927-Eメッセージを出力します。異常終了時にサービスを閉塞するかどうかは,プロセス関連定義のservice_holdオペランドで指定します。

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

●データ名A

連鎖モードのロールバックを示す要求コードを「VALUE 'C-ROLL△△'」と設定します。連鎖モードのロールバックをした処理以降も,この内容は変わりません。

●データ名C

ロールバック時,プロセスまたはスレッドを強制終了するかどうかを設定します。

VALUE 'PRCS'

コアファイルとCOBOL異常終了時要約リストを出力してプロセスを強制終了させます。

VALUE 'KILL'

スレッドを強制終了させます。

VALUE 'ABRT'

メモリダンプファイルとCOBOL異常終了時要約リストを出力してスレッドを強制終了させます。

VALUE 'KEEP'

プロセスおよびスレッドを強制終了させません。

●データ名D

トランザクション情報としてエラートランザクション(ERRTRN3)へ引き渡すエラー要因コードを設定します。

データ名Cに'KILL'または'ABRT'を設定したときだけ有効です。

TP1/EEから値が返されるデータ領域

●データ名B

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

ステータスコード

ステータスコード

意味

00000

正常に終了しました。CBLEETRN('C-ROLL ')が終了したあとも,このスレッドはトランザクション下にあって,グローバルトランザクションの範囲内です。

00001

TP1/EEの環境下にありません。

00004

UOCから発行しているため,この機能は使用できません。

00005

オフラインバッチプロセスから発行しているため,この機能は使用できません。

00901

データ名に設定した値が間違っています。要求コード(データ名A)が間違っている場合も含みます。

00903

CBLEETRN('C-ROLL ')を呼び出したグローバルトランザクションは,ヒューリスティック決着のため,あるトランザクションブランチはコミットとなり,あるトランザクションブランチはロールバックとなりました。このステータスコードは,ヒューリスティック決着の結果が,グローバルトランザクションの同期点の結果と一致しなかった場合にリターンします。このステータスコードが返る原因になったUAP,リソースマネジャ,およびグローバルトランザクションの同期点の結果は,メッセージログファイルを参照してください。このステータスコードが返ったあとも,このスレッドはトランザクション下にあって,グローバルトランザクションの範囲内です。

00904

グローバルトランザクションのトランザクションブランチがヒューリスティックに決着しました。しかし,障害のため,ヒューリスティックに決着したトランザクションブランチの同期点の結果がわかりません。このステータスコードが返る原因になったUAP,リソースマネジャ,およびグローバルトランザクションの同期点の結果は,メッセージログファイルを参照してください。このステータスコードが返ったあとも,このスレッドはトランザクション下にあって,グローバルトランザクションの範囲内です。

00941

CBLEETRN('C-ROLL ')を不正なコンテクスト(例えば,すでにトランザクション中にいない)で呼び出しています。トランザクションモードに対する影響はありません。

00942

通信障害やリソースマネジャ障害などによってトランザクション決着に失敗したため,トランザクション回復処理を行います。このステータスコードが返ったあとも,このスレッドはトランザクション下にあって,グローバルトランザクションの範囲内です。

指定例

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

注意事項

  1. トランザクション種別がMI(初期化トランザクション),ME(終了トランザクション),JI(共有リソース初期化トランザクション),およびUT(ユーザ初期化トランザクション)の場合,データ名Cに'ABRT'を設定してもメモリダンプファイルは出力されません。また,データ名Cに'KILL'または'ABRT'を設定してもスレッドは強制終了しないでプロセスダウンになり,コアファイルが出力されます。

  2. 次の状態のとき,CBLEETRN('C-ROLL ')は正常終了します。

    • リソースマネジャ接続失敗によるトランザクション縮退起動

    • 新しいグローバルトランザクション生成時にリソースマネジャ接続失敗

    必要に応じてCBLEETRN('GETINFO ')を呼び出してリソースマネジャの状態を確認してください。