tx_set_commit_return
形式
ANSI C ,C++ の形式
#include <tx.h> int tx_set_commit_return(COMMIT_RETURN when_return)
K&R版 Cの形式
#include <tx.h> int tx_set_commit_return(when_return) COMMIT_RETURN when_return;
機能
関数tx_set_commit_return()は,commit_return特性をwhen_returnに指定した値に設定します。commit_return特性は,tx_commit()が呼び出し元に制御を戻す方法に対して影響します。
tx_set_commit_return()は,呼び出し元がトランザクションモードかどうかに関係なく呼び出せます。when_returnに設定したcommit_return特性は,あとから呼び出されるtx_set_commit_return()で変更されるまで引き継がれて,効力を発揮します。
commit_return特性の初期設定値は,製品の仕様に依存します。『OpenTP1の場合は,TX_COMMIT_COMPLETEDです。』
『引数』
『●when_return』
次の二つのどちらかの値が,when_returnの妥当な設定です。
{TX_COMMIT_DECISION_LOGGED|TX_COMMIT_COMPLETED}
-
TX_COMMIT_DECISION_LOGGED『この引数は,OpenTP1の該当バージョンでは使えません。when_returnにTX_COMMIT_DECISION_LOGGEDを設定した場合は,リターン値TX_NOT_SUPPORTEDでエラーリターンします。』
このフラグは,コミット決定を2相コミットプロトコルの1相目でジャーナルに書いたが,2相目がまだ完了していないときに,tx_commit()がリターンすることを示します。このフラグを設定すれば,tx_commit()の呼び出し元に早くリターンできますが,トランザクションの参加者がヒューリスティック決定をしてしまう危険性があります。この場合,tx_commit()はすでにリターンしているので『トランザクションマネジャは,それ独自の方法でリソースマネジャがヒューリスティック決定をしたことを示すことに注意』,ヒューリスティック決定が起こると,呼び出し元にリターンコードで示すことはできません。
通常の条件では,1相目にコミットを約束した参加者は,2相目の処理の間にコミットをします。一定の特殊な条件下では,長期間のネットワーク,サイト障害などによって,2相目の完了ができないで,ヒューリスティック決定が起こるようなこともあります。トランザクションマネジャは,このフラグは選択しないことにした場合,この値が設定されていないことを示すため,TX_NOT_SUPPORTEDを返します。
-
TX_COMMIT_COMPLETED
このフラグは,2相コミットプロトコルが完全に終了したあとでtx_commit()がリターンすることを示します。このフラグを設定すると,コミットの2相目でヒューリスティックな決着が起こっても,tx_commit()の呼び出し元にリターンコードで知らせることができます。トランザクションマネジャは,この機能を使えないようにできます。そしてTX_NOT_SUPPORTEDを返す理由にこのフラグを使えない意味を含めることができます。
リターン値
『リターン値が0で』成功した場合,tx_set_commit_return()はTX_OKを返します。これは,負ではないリターン値です。『この場合,commit_return特性の設定は,when_returnに設定した値に変更されます。』
『リターン値が正の値で』成功した場合,tx_set_commit_return()はTX_NOT_SUPPORTEDを返します。これは,負ではないリターン値です。『when_returnに設定した値は,システムのトランザクションマネジャでは使えません。』
この場合のcommit_return特性は,変更されません。トランザクションマネジャはTX_COMMIT_COMPLETEDまたはTX_COMMIT_DECISION_LOGGEDのどちらかは,when_returnの値として使えるようにしておく必要があります。『OpenTP1の場合は,TX_COMMIT_RETURNです。』
エラー
次のような場合,tx_set_commit_return()はエラーリターンして,次のうちどれか一つの値を返します。これは,負のリターン値です。負のリターン値が返った場合は,tx_set_commit_return()はcommit_return特性を変更しません。
リターン値 |
リターン値(数値) |
意味 |
---|---|---|
TX_PROTOCOL_ERROR |
-5 |
関数は,適切でないコンテクストで呼ばれました(例えば,呼び出し元がtx_open()を呼び出していない)。 |
TX_FAIL |
-7 |
トランザクションマネジャで,回復できないエラーが起こりました。トランザクションマネジャが,すでにアプリケーションに代わって作業できないことが,エラーの原因です。 |
TX_EINVAL |
-8 |
when_returnに設定した値が,TX_COMMIT_DECISION_LOGGEDでも,TX_COMMIT_COMPLETEDでもありません。 |
参照
tx_commit(),tx_open(),tx_info()
『指定例』
『if (tx_set_commit_return(TX_COMMIT_COMPLETED) == 0 && tx_commit() < 0 ) fputs("cannot commit transaction\n",stderr);』
『OpenTP1で使う場合の注意事項』
-
『tx_set_commit_return()とdc_trn_〜の関数は併用できません。』