tx_rollback
形式
ANSI C ,C++ の形式
#include <tx.h> int tx_rollback(void)
K&R版 Cの形式
#include <tx.h> int tx_rollback()
機能
関数tx_rollback()は,呼び出しスレッドのトランザクションの作業をロールバックします。
transaction_control特性が,TX_UNCHAINEDに設定されていた場合で,tx_rollback()がリターンすると,呼び出し元スレッドはトランザクションモードにはいません。しかし,transaction_control特性が TX_CHAINEDに設定されていた場合で,tx_rollback()がリターンすると,呼び出し元スレッドは新しいトランザクション下のトランザクションモードにとどまります。transaction_control特性については,tx_set_transaction_control()を参照してください。
『次に示す関数で設定した値は,tx_rollback()の処理に影響を与えます。』
-
tx_set_commit_control()
-
tx_set_transaction_timeout()
『tx_rollback()は,MHPでは使えません。』
リターン値
成功した場合,tx_rollback()はTX_OKを返します。これは,負ではないリターン値です『0が返ります』『transaction_control特性がTX_CHAINEDに設定されていた場合は,新しいトランザクションが開始されます』『tx_rollback()を呼び出したSPPがルートトランザクションブランチでない場合は,実際のロールバック処理はしないで,そのトランザクションブランチをrollback_only状態にするだけです。ルートトランザクションブランチの同期点処理でロールバックの指示があるまで,トランザクションモードのままとどまります。』
エラー
次のような場合,tx_rollback()はエラーリターンして,次のうちどれか一つの値を返します。これは,負のリターン値です。
リターン値 |
リターン値(数値) |
意味 |
---|---|---|
TX_MIXED |
-3 |
トランザクションは部分的にコミット,部分的にロールバックしました。transaction_control特性がTX_CHAINEDと設定されていれば,新しいトランザクションが開始されます。 |
TX_HAZARD |
-4 |
障害が原因で,トランザクションは部分的にコミット,部分的にロールバックした可能性があります。transaction_control特性がTX_CHAINEDに設定されていれば,新しいトランザクションが開始されます。 |
TX_PROTOCOL_ERROR |
-5 |
関数は,適切でないコンテクストで呼ばれました(例えば,呼び出し元がトランザクションモードでない)。 |
TX_FAIL |
-7 |
トランザクションマネジャ,または一つ以上のリソースマネジャで,回復できないエラーが起こりました。トランザクションマネジャ,または一つ以上のリソースマネジャのどちらか,またはその両方が,すでにアプリケーションに代わって作業できないことがエラーの原因です。呼び出し元のトランザクションに対する状態は不明です。 |
TX_COMMITTED |
-9 |
トランザクションは,ヒューリスティックにコミットしました。 transaction_control特性がTX_CHAINEDに設定されていれば,新しいトランザクションが開始されます。 |
TX_NO_BEGIN |
-100 |
トランザクションはロールバックしましたが,新しいトランザクションを開始できないで,呼び出し元はすでにトランザクションモードにいません。 このリターン値は,transaction_control特性がTX_CHAINEDのときだけ返ります。 |
TX_MIXED_NO_BEGIN |
-103 |
トランザクションは部分的にコミット,部分的にロールバックしました。新しいトランザクションは開始できないで,呼び出し元は,すでにトランザクションモードにはいません。 このリターン値は,transaction_control特性がTX_CHAINEDのときだけ返ります。 |
TX_HAZARD_NO_BEGIN |
-104 |
障害が原因で,トランザクションは部分的にコミット,部分的にロールバックした可能性があります。新しいトランザクションは開始できないで,呼び出し元はすでにトランザクションモードではありません。 このリターン値は,transaction_control特性がTX_CHAINEDのときだけ返ります。 |
TX_COMMITTED_NO_BEGIN |
-109 |
トランザクションは,ヒューリスティックにコミットしました。新しいトランザクションは開始できないで,呼び出し元はすでにトランザクションモードにはいません。このリターン値は,transaction_control特性がTX_CHAINEDのときだけ返ります。 |
参照
tx_begin(),tx_set_transaction_control(),tx_set_transaction_timeout()
『指定例』
『if (tx_info(NULL) == 1 && tx_rollback() < 0) fputs("cannot rollback transaction\n",stderr);』
『OpenTP1で使う場合の注意事項』
-
『transaction_control特性がTX_CHAINEDに設定されていた場合,tx_rollback()を使えるのはルートトランザクションブランチ(tx_begin()を呼び出したUAP)だけです。』
-
『transaction_control特性がTX_UNCHAINEDに設定されていた場合,tx_rollback()はルートトランザクションブランチでなくても呼び出せますが,呼び出したトランザクションブランチによって処理が異なります。tx_rollback()の呼び出し元がルートブランチの場合,非ルートブランチに対して,RPCの関数を介してロールバック要求をしますが,非ルートブランチでtx_rollback()を呼び出した場合,呼び出し元の非ルートブランチはrollback_onlyを記録するだけで,ルートブランチに対してRPCの関数を介してロールバック要求をしません。呼び出し元の非ルートブランチは,ルートブランチの指示を待ったあと,ロールバック処理をします。』
-
『tx_rollback()とdc_trn_〜の関数は併用できません。』