Hitachi

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


ee_trn_chained_rollback

〈このページの構成〉

名称

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

形式

ANSI C,C++の形式

#include <eetrn.h>
int  ee_trn_chained_rollback(EEULONG thkind, EEULONG ecode)

機能

トランザクションをロールバックさせます。thkindにEETRN_KEEPを設定した場合,ee_trn_chained_rollback関数を呼び出したあとには,続けてトランザクションが開始します。thkindにEETRN_KEEP以外を設定した場合,新たなトランザクションを開始しないで強制終了します。

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

thkindにEETRN_KEEPを設定したee_trn_chained_rollback関数が正常に終了すると,関数を呼び出したスレッドはロールバックしてリターンします。そのあとで新しいグローバルトランザクションが開始します。関数を呼び出したスレッドはこのトランザクションの範囲内です。ただし,この関数を呼び出したUAP以外のトランザクションモードに対しての指定を意味しません。

ee_trn_chained_rollback関数を呼び出せるのは,ルートトランザクションブランチからだけです。それ以外のUAPから呼び出した場合は,リターン値EETRNER_CONDITIONでエラーリターンします。ただし,thkindにEETRN_PRCS,EETRN_KILL,またはEETRN_ABRTを指定した場合は,トランザクションブランチから呼び出せます。

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

ee_trn_chained_rollback関数は,同期点処理が完了したときに正常に終了,エラーリターン,または強制終了します。

サービス関数リターン時に明示的にee_trn_chained_commit関数またはee_trn_chained_rollback関数を呼び出さない場合は,トランザクションの同期点を取得します。

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

UAPで値を設定する引数

●thkind

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

EETRN_PRCS

コアファイルとCOBOL異常終了時要約リスト(COBOLプログラムがある場合)を出力してプロセスを強制終了させます。

EETRN_KILL

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

EETRN_ABRT

メモリダンプファイルとCOBOL異常終了時要約リスト(COBOLプログラムがある場合)を出力してスレッドを強制終了させます。

EETRN_KEEP

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

●ecode

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

thkindにEETRN_KILLまたはEETRN_ABRTを設定したときだけ有効です。

リターン値

リターン値

意味

EE_OK

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

EECOMER_CNDBPP

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

EECOMER_CNDUOC

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

EECOMER_ENVIRON

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

EETRNER_ARGUMENT

引数に設定した値が間違っています。

EETRNER_COMPLETION

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

EETRNER_CONDITION

ee_trn_chained_rollback関数を不正なコンテクスト(ルートトランザクションブランチではないなど)で呼び出しています。トランザクションモードに対する影響はありません。

EETRNER_HAZARD

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

EETRNER_HEURISTIC

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

指定例

if (ee_trn_chained_rollback(EETRN_KILL,100) != EE_OK)
  fputs("cannot rollback transaction\n",stderr);

注意事項

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

  2. 次の状態のとき,ee_trn_chained_rollback関数は正常終了します。

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

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

    必要に応じてee_trn_getinfo関数を呼び出してリソースマネジャの状態を確認してください。