bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Tuxedo COBOL リファレンス > セクション 3(cbl) - COBOL 関数 |
Tuxedo COBOL リファレンス
|
名前
TPCOMMIT()−現在の BEA Tuxedo ATMI のトランザクションのコミット
形式
01 TPTRXDEF-REC.
COPY TPTRXDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPCOMMIT" USING TPTRXDEF-REC TPSTATUS-REC
機能説明
tpcommit() はトランザクションの終了 (コミット) を示します。tpcommit() は 2 フェーズ・コミット・プロトコルを使用して、パーティシパント間の調整をとります。tpcommit() は、トランザクションのイニシエータからのみ呼び出されます。いずれかのパーティシパントがトランザクションをコミットできない場合 (たとえば、それらが TPFAIL() を設定して TPRETURN() を呼び出す場合など)、そのトランザクション全体がアボートされ、TPCOMMIT() は異常終了します。つまり、そのトランザクションに関連して各プロセスが行ったすべての作業は取り消されます。すべてのパーティシパントがトランザクションの中のそれぞれが担当する部分のコミットを決定した場合、この決定は安定記憶装置に記録された後、すべてのパーティシパントに対して作業のコミットが要求されます。
TP-COMMIT-CONTROL 特性の設定条件に従って (TPSCMT() 参照)、コミットの決定が記録された後、あるいは 2 フェーズ・コミット・プロトコルが完了した後、TPCOMMIT() は正常に終了することができます。コミットの決定が記録された後、第 2 フェーズが完了する前 (TP-CMT-LOGGED) に TPCOMMIT() が終了する場合、すべてのパーティシパントはトランザクションのために行った作業内容をコミットすることに同意していると見なし、第 2 フェーズでトランザクションをコミットする約束を果たす必要があります。ただし、TPCOMMIT() は第 2 フェーズが完了する前に終了してしまうので、パーティシパントの中には、このルーチンが正常終了した場合でも、トランザクションの担当部分をヒューリスティックに (コミットの決定とは矛盾するような方法で) 完了するといった状況が発生してしまいます。
TP-COMMIT-CONTROL 特性が 2 フェーズ・コミット・プロトコルの完了 (TP-CMT-COMPLETE) 後に TPCOMMIT() が終了するように設定されている場合、その戻り値にはトランザクションの正確な状態が反映されます (つまり、トランザクションがヒューリスティックに完了したかどうか)。
なお、トランザクションに 1 つのリソース・マネージャしか関与していない場合には、1 フェーズ・コミットが行われます (つまり、リソース・マネージャには、コミットできるかどうかの確認はされず、単にコミットの指示が出されます)。そして、この場合、TP-COMMIT-CONTROL 特性はコミットには関係せず、TPCOMMIT() はヒューリスティックな結果 (もしあれば) を返します。
未処理の応答の通信ハンドルがあるときに TPCOMMIT() が呼び出されると、TPCOMMIT() の終了時にトランザクションはアボートし、呼び出し元のトランザクションに対応する通信ハンドルがすべて無効になります。呼び出し元のトランザクションに対応していない通信ハンドルは有効なままです。
呼び出し元のトランザクションに対応する接続がすべてクローズしてから、TPCOMMIT() を呼び出さなければなりません。そうでないと、[TPEABORT] が返され、トランザクションはアボートし、TPEV-DISCONIMM イベントを示して各接続が不規則に切断されます。TPBEGIN() の前または TPNOTRAN を設定して (つまり、トランザクション・モードでない状態で) オープンされた接続は、TPCOMMIT() または TPABORT() の影響を受けません。
現時点では、TPCOMMIT() の引数 TPTRXDEF-REC は将来使用するために予約されています。
戻り値
TPCOMMIT() は正常終了時には、TP-STATUS に [TPOK] を設定します。
エラー
次の条件が発生すると、TPCOMMT() は異常終了し、TP-STATUS に次の値を設定します。
注意事項
TPBEGIN()、TPCOMMIT()、および TPABORT() を使用して BEA Tuxedo ATMI のトランザクションを記述する際には、XA インターフェイスに準拠した (および呼び出し元に適切にリンクされている) リソース・マネージャが行う作業のみがトランザクションとしての特性を備えていることを忘れないようにすることが重要です。トランザクションで行われるその他の処理内容は、TPCOMMIT() や TPABORT() の影響を受けません。そのリソース・マネージャが行った処理が BEA Tuxedo ATMI のトランザクションの一部となるよう、XA インターフェイスを満たすリソース・マネージャをサーバにリンクする方法については、buildserver(1) を参照してください。
関連項目
TPABORT(3cbl)、TPBEGIN(3cbl)、TPCONNECT(3cbl)、TPGETLEV(3cbl)、TPRETURN(3cbl)、TPSCMT(3cbl)
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |