Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


TXSETCOMMITRET

〈このページの構成〉

名称

commit_return 特性の設定

形式

 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で使う場合の注意事項』

  1. 『TXSETCOMMITRETと,OpenTP1の CBLDCTRN は併用できません。』