TXSETCOMMITRET
形式
DATA DIVISION. * Include TX definitions. 01 TX-RETURN-STATUS. COPY TXSTATUS. * 01 TX-INFO-AREA. COPY TXINFDEF. PROCEDURE DIVISION. CALL "TXSETCOMMITRET" USING TX-INFO-AREA TX-RETURN-STATUS.
機能
TXSETCOMMITRETは,commit_return特性をwhen_returnに指定した値に設定します。commit_return特性は,TXCOMMITが呼び出し元に制御を戻す方法に対して影響します。
TXSETCOMMITRETは,呼び出し元がトランザクションモードかどうかに関係なく呼び出せます。設定したcommit_return特性は,あとから呼び出されるTXSETCOMMITRETで変更されるまで引き継がれて,効力を発揮します。commit_return特性の初期設定値は,製品の仕様に依存します。『OpenTP1の場合は,TX-COMMIT-COMPLETEDです。』
『データ領域』
『●TX-INFO-AREA
次の二つのどちらかの値が,COMMIT-RETURNの妥当な設定です。
{TX-COMMIT-DECISION-LOGGED|TX-COMMIT-COMPLETED}』
-
TX-COMMIT-DECISION-LOGGED『この値は,OpenTP1の該当バージョンでは使えません。TX-INFO-AREAにTX-COMMIT-DECISION-LOGGEDを設定した場合は,リターン値TX-NOT-SUPPORTEDでエラーリターンします。』
このフラグは,コミット決定を2相コミットプロトコルの1相目にジャーナルに書いたが,2相目がまだ完了していないときに,TXCOMMITがリターンすることを示します。このフラグを設定すれば,TXCOMMITの呼び出し元に早くリターンできますが,トランザクションの参加者がヒューリスティック決定をしてしまう危険性があります。この場合,TXCOMMITはすでにリターンしているので『トランザクションマネジャは,それ独自の方法でリソースマネジャがヒューリスティック決定をしたことを示すことに注意』,ヒューリスティック決定が発生すると,呼び出し元にリターンコードで示すことはできません。
通常の条件では,1相目にコミットを約束した参加者は,2相目の処理の間にコミットをします。一定の特殊な条件下では,長期間のネットワーク,サイト障害などによって,2相目の完了ができないで,ヒューリスティック決定が発生するようなこともあります。トランザクションマネジャは,このフラグは選択しないことにした場合,この値が設定されていないことを示すため,TX-NOT-SUPPORTEDを返します。
-
TX-COMMIT-COMPLETED
このフラグは,2相コミットプロトコルが完全に終了したあとでTXCOMMITがリターンすることを示します。このフラグを設定すると,コミットの2相目でヒューリスティックな決着が起こっても,TXCOMMITの呼び出し元にリターンコードで知らせることができます。トランザクションマネジャは,この機能を使えないようにできます。そしてTX-NOT-SUPPORTEDを返す理由にこのフラグを使えない意味を含めることができます。
リターン値
『リターン値が0で』成功した場合,TXSETCOMMITRETはTX-OKを返します。これは,負ではないリターン値です。『この場合,commit_return特性の設定は,TX-INFO-AREAに設定した値に変更されます。』
『リターン値が正の値で』成功した場合,TXSETCOMMITRETは TX-NOT-SUPPORTEDを返します。これは,負ではないリターン値です。
『 TX-INFO-AREAに設定した値は,システムのトランザクションマネジャでは使えません。』この場合のcommit_return特性は,変更されません。トランザクションマネジャはTX-COMMIT-COMPLETEDまたはX-COMMIT-DECISION-LOGGEDのどちらかは,COMMIT-RETURNの値として使えるようにしておく必要があります。『OpenTP1の場合は,TX-COMMIT-RETURNです。』
エラー
次のような場合,TXSETCOMMITRETはエラーリターンして,次のうちどれか一つの値を返します。これは,負のリターン値です。負のリターン値が返った場合は,TXSETCOMMITRETはcommit_return特性を変更しません。
- TX-EINVAL
-
TX-INFO-AREAに設定した値は,TX-COMMIT-DECISION-LOGGEDでも,TX-COMMIT-COMPLETEでもありません。
- TX-PROTOCOL-ERROR
-
TXSETCOMMITRETは,適切でないコンテクストで呼ばれました(例えば,呼び出し元がTXOPENを呼び出していない)。
- TX-FAIL
-
トランザクションマネジャで,回復できないエラーが起こりました。トランザクションマネジャが,すでにアプリケーションに代わって作業できないことが,エラーの原因です。
参照
TXCOMMIT,TXOPEN,TXINFORM
『OpenTP1で使う場合の注意事項』
-
『TXSETCOMMITRETと,OpenTP1の CBLDCTRN は併用できません。』