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

Tuxedo C リファレンス

 Previous Next Contents View as PDF  

tpcommit(3c)

名前

tpcommit()−現在のトランザクションをコミットするルーチン

形式

#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 を次のいずれかの値に設定します。

[TPEABORT]

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

[TPEHAZARD]

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

[TPEHEURISTIC]

ヒューリスティックな決定により、トランザクションの代わりに行われた処理は部分的に完了し、部分的にアボートされました。

[TPEINVAL]

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

[TPEOS]

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

[TPEPROTO]

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

[TPESYSTEM]

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

[TPETIME]

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

注意事項

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)

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy