|
|
tpcommit(3c)
名前
TPCOMMIT(3cbl)-現在のトランザクションをコミットするルーチン
形式
#include <atmi.h>
int tpcommit(long flags)
機能説明
tpcommit() はトランザクションの終了 (コミット) を示します。tpcommit() は2 フェーズ・コミット・プロトコルを使用して、パーティシパント間の調整をとります。tpcommit() は、トランザクションのイニシエータからのみ呼び出されます。いずれかのパーティシパントがトランザクションをコミットできない場合 (たとえば、それらが tpreturn() を呼び出したときに TPFAIL が返された場合など)、そのトランザクション全体がアボートし、tpcommit() は異常終了します。つまり、そのトランザクションに関連して各プロセスが行ったすべての作業は取り消されます。すべてのパーティシパントがトランザクションの中のそれぞれが担当する部分のコミットを決定した場合、この決定は安定記憶装置に記録された後、すべてのパーティシパントに対して作業のコミットが要求されます。
コミットの決定が記録された後、あるいは 2 フェーズ・コミット・プロトコルが完了した後、TP_COMMIT_CONTROL 特性の設定条件に従って (tpscmt(3c) を参照)、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() は、呼び出し元のトランザクションに関連しているすべての接続をクローズしたあと呼び出されなければなりません (そうでないと、TPEABORT が返され、トランザクションはアボートし、これらの接続は、TPEV_DISCONIMM イベントを使用して不規則に切断されます)。tpbegin() の前あるいは TPNOTRAN フラグの指定を付けてオープンされた接続 (つまり、トランザクション・モードでない状態での接続) は、tpcommit() または tpabort() の影響を受けません。
現時点では、tpcommit() の唯一の引数 flags は、将来の用途のために予約されており、0 を設定しておかなければなりません。
マルチスレッドのアプリケーションの場合、TPINVALIDCONTEXT 状態のスレッドは tpcommit() の呼び出しを発行できません。
戻り値
異常終了すると、tpcommit() は -1 を返し、tperrno() を設定してエラー条件を示します。
エラー
異常終了時には、tpcommit() は tperrno() を次のいずれかの値に設定します。
注意事項
BEA Tuxedo ATMI システムのトランザクションを記述するために tpbegin()、tpcommit()、および tpabort() を使用する場合、XA インターフェイスに準拠した (呼び出し元に妥当にリンクされている) リソース・マネージャが行う作業のみがトランザクションの特性を備えていることを記憶しておくことが重要です。トランザクションにおいて実行される他のすべての操作は、tpcommit() あるいは tpabort() のいずれにも影響されません。リソース・マネージャによって実行される操作が、BEA Tuxedo ATMI システムのトランザクションの一部となるように、XA インターフェイスを満たすリソース・マネージャをサーバにリンクします。詳細については buildserver(1) を参照してください。
関連項目
tpabort(3c)、 tpbegin(3c)、 tpconnect(3c)、 tpgetlev(3c)、 tpreturn(3c)、 tpscmt(3c)
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|