TXROLLBACK

名称

トランザクションのロールバック

形式

DATA DIVISION.
* Include TX definitions.
01 TX-RETURN-STATUS.
   COPY TXSTATUS.

PROCEDURE DIVISION.
CALL "TXROLLBACK" USING TX-RETURN-STATUS.

機能

TXROLLBACKは,呼び出しスレッドのトランザクションの作業をロールバックします。

transaction_control特性が,TX-UNCHAINEDに設定されていた場合で,TXROLLBACKがリターンすると,呼び出し元スレッドはトランザクションモードにはいません。しかし,transaction_control特性がTX-CHAINEDに設定されていた場合で,TXROLLBACKがリターンすると,呼び出し元スレッドは新しいトランザクション下のトランザクションモードにとどまります。transaction_control特性については,TXSETTRANCTLを参照してください。

『次に示すAPIで設定した値は,TXROLLBACKの処理に影響を与えます。』

『TXROLLBACKはMHPからは呼び出せません。』

『データ領域』

『●TX-RETURN-STATUS

TXROLLBACKの実行結果が返されます。』

リターン値

成功した場合,TXROLLBACKはTX-OKを返します。これは,負ではないリターン値です。『0が返ります。』『transaction_control特性がTX-CHAINEDに設定されていた場合は,新しいトランザクションが開始されます。』『TXROLLBACKを呼び出したSPPがルートトランザクションブランチでない場合は,実際のロールバック処理はしないで,そのトランザクションブランチをrollback_only状態にするだけです。ルートトランザクションブランチの同期点処理でロールバックの指示があるまで,トランザクションモードのままとどまります。』

エラー

次のような場合,TXROLLBACKはエラーリターンして,次のうちどれか一つの値を返します。これは,負のリターン値です。

TX-NO-BEGIN
トランザクションはロールバックしましたが,新しいトランザクションを開始できないで,呼び出し元はすでにトランザクションモードにいません。
このリターン値は,transaction_control特性がTX-CHAINEDのときだけ発生します。
TX-MIXED
トランザクションは部分的にコミット,部分的にロールバックしました。transaction_control特性がTX-CHAINEDと設定されていれば,新しいトランザクションが開始されます。
TX-MIXED-NO-BEGIN
トランザクションは部分的にコミット,部分的にロールバックしました。新しいトランザクションは開始できないで,呼び出し元は,すでにトランザクションモードにはいません。
このリターン値は,transaction_control特性がTX-CHAINEDのときだけ返ります。
TX-HAZARD
障害が原因で,トランザクションは部分的にコミット,部分的にロールバックした可能性があります。transaction_control特性がTX-CHAINEDに設定されていれば,新しいトランザクションが開始されます。
TX-HAZARD-NO-BEGIN
障害が原因で,トランザクションは部分的にコミット,部分的にロールバックした可能性があります。新しいトランザクションは開始できないで,呼び出し元はすでにトランザクションモードではありません。
このリターン値は,transaction_control特性がTX-CHAINEDのときだけ返ります。
TX-COMMITTED
トランザクションは,ヒューリスティックにコミットしました。transaction_control特性がTX-CHAINEDに設定されていれば,新しいトランザクションが開始されます。
TX-COMMITTED-NO-BEGIN
トランザクションは,ヒューリスティックにコミットしました。新しいトランザクションは開始できないで,呼び出し元はすでにトランザクションモードにはいません。このリターン値は,transaction_control特性がTX-CHAINEDのときだけ返ります。
TX-PROTOCOL-ERROR
TXROLLBACKは,適切でないコンテクストで呼ばれました(例えば,呼び出し元がトランザクションモードでない)。
TX-FAIL
トランザクションマネジャ,または一つ以上のリソースマネジャで,回復できないエラーが起こりました。トランザクションマネジャ,または一つ以上のリソースマネジャのどちらか,またはその両方が,すでにアプリケーションに代わって作業できないことがエラーの原因です。呼び出し元のトランザクションに対する状態は不明です。

参照

TXBEGIN,TXSETTRANCTL,TXSETTIMEOUT

『OpenTP1で使う場合の注意事項』

  1. 『transaction_control特性がTX-CHAINEDに設定されていた場合,TXROLLBACKを呼び出せるのはルートトランザクションブランチ(TXBEGINを呼び出したUAP)だけです。』
  2. 『transaction_control特性がTX-UNCHAINEDに設定されていた場合,TXROLLBACKはルートトランザクションブランチでなくても呼び出せますが,呼び出したトランザクションブランチによって処理が異なります。TXROLLBACKの呼び出し元がルートブランチの場合,非ルートブランチに対して,RPCを介してロールバック要求をしますが,非ルートブランチでTXROLLBACKを呼び出した場合,呼び出し元の非ルートブランチはrollback_onlyを記録するだけで,ルートブランチに対してRPCを介してロールバック要求をしません。呼び出し元の非ルートブランチは,ルートブランチの指示を待ったあと,ロールバック処理をします。』
  3. 『TXROLLBACKと,OpenTP1の CBLDCTRN は併用できません。』