bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

Tuxedo COBOL リファレンス

 Previous Next Contents View as PDF  

TPCOMMIT(3cbl)

名前

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 に次の値を設定します。

[TPEINVAL]

TPTRXDEF-REC0 でありません。呼び出し元のトランザクションは影響を受けません。

[TPETIME]

トランザクションがタイムアウトし、トランザクションの状態が不明です (つまり、コミットされている可能性もあれば、中途終了している可能性もあります)。トランザクションがタイムアウトし、その状態が中途終了であることが分かっている場合には、TPEABORT が返されます。

[TPEABORT]

トランザクションの実行元あるいはそのパーティシパントが行った作業をコミットできなかったために、そのトランザクションをコミットできませんでした。また、このエラーは、tpcommit() が、未終了の応答が残っているか会話型接続をオープンしたまま呼び出された場合にも返されます。

[TPEHEURISTIC]

ヒューリスティックな判断のため、トランザクションの一部としてなされた作業が一部はコミットされ、一部は中途終了しています。

[TPEHAZARD]

ある種の障害のため、トランザクションの一部としてなされた作業がヒューリスティックに完了している可能性があります。

[TPEPROTO]

tpcommit() が不正なコンテキストで呼び出されました (たとえば、パーティシパントにより呼び出されるなど)。

[TPESYSTEM]

BEA Tuxedo システムのエラーが発生しました。エラーの正確な内容がログ・ファイルに書き込まれます。

[TPEOS]

オペレーティング・システムのエラーが発生しました。

注意事項

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)

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy