Hitachi

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


tx_commit

〈このページの構成〉

名称

トランザクションのコミット

形式

ANSI C ,C++ の形式

#include <tx.h>
int  tx_commit(void)

K&R版 Cの形式

#include <tx.h>
int  tx_commit()

機能

関数tx_commit()は,呼び出し元のスレッドのトランザクションの作業をコミットします。

transaction_control特性が,TX_UNCHAINEDに設定されていた場合に,tx_commit()がリターンすると,呼び出し元スレッドはトランザクションモードにはいません。しかし,transaction_control特性がTX_CHAINEDに設定されていた場合は,tx_commit()がリターンすると,呼び出し元スレッドは新しいトランザクションのためにトランザクションモードにとどまります。transaction_control特性については,tx_set_transaction_control()を参照してください(リターン値を参照)。

『次に示す関数で設定した値は,tx_commit()の処理に影響を与えます。』

リターン値

成功した場合,tx_commit()はTX_OKを返します。これは,負ではないリターン値です。『0が返ります。』『transaction_control特性がTX_CHAINEDに設定されていた場合,新しいグローバルトランザクションが開始します。』

エラー

次のような場合,tx_commit()はエラーリターンして,次のうちどれか一つの値を返します。これは,負のリターン値です。

リターン値

リターン値(数値)

意味

TX_ROLLBACK

-2

トランザクションはコミットできないで,ロールバックしました。

transaction_control特性がTX_CHAINEDに設定されている場合は,新しいトランザクションが開始されます。

TX_MIXED

-3

トランザクションは部分的にコミット,部分的にロールバックしました。transaction_control特性がTX_CHAINEDが設定されている場合は,新しいトランザクションが開始されます。

TX_HAZARD

-4

障害が原因で,トランザクションは部分的にコミット,部分的にロールバックされた可能性があります。

transaction_control特性がTX_CHAINEDに設定されている場合は,新しいトランザクションが開始されます。

トランザクションサービス定義で,trn_extend_functionオペランドに00000001を指定し,1相コミット時にリソースマネジャからのリターン値がXAER_NOTAの場合も,TX_HAZARDを返します。

TX_PROTOCOL_ERROR

-5

関数は,適切でないコンテクストで呼ばれました(例えば,呼び出し元がトランザクションモードにいない場合)。呼び出し元のトランザクションに対する状態は変わりません。

TX_FAIL

-7

トランザクションマネジャ,または一つ以上のリソースマネジャで,回復できないエラーが起こりました。トランザクションマネジャ,または一つ以上のリソースマネジャのどちらか,またはその両方が,すでにアプリケーションに代わって作業できないことがエラーの原因です。呼び出し元のトランザクションに対する状態は不明です。

TX_NO_BEGIN

-100

トランザクションはコミット終了しましたが,新しいトランザクションは開始できないで,呼び出し元はすでにトランザクションモードにいません。

このリターン値は,トランザクション特性がTX_CHAINEDのときだけ返ります。

TX_ROLLBACK_NO_BEGIN

-102

トランザクションはコミットできないで,ロールバックしました。新しいトランザクションは開始できないで,呼び出し元はすでにトランザクションモードではありません。

このリターン値は,トランザクション特性がTX_CHAINEDのときだけ返ります。

TX_MIXED_NO_BEGIN

-103

トランザクションは部分的にコミット,部分的にロールバックしました。新しいトランザクションは開始できないで,呼び出し元はすでにトランザクションモードにはいません。

このリターン値は,トランザクション特性がTX_CHAINEDのときだけ返ります。

TX_HAZARD_NO_BEGIN

-104

障害が原因で,トランザクションは部分的にコミット,部分的にロールバックしました。新しいトランザクションは開始できないで,呼び出し元はすでにトランザクションモードにはいません。

このリターン値は,トランザクション特性がTX_CHAINEDのときだけ返ります。

トランザクションサービス定義で,trn_extend_functionオペランドに00000001を指定し,1相コミット時にリソースマネジャからのリターン値がXAER_NOTAの場合も,TX_HAZARD_NO_BEGINを返します。

参照

tx_begin(),tx_set_commit_return(),tx_set_transaction_control(),tx_set_transaction_timeout()

『指定例』

『if (tx_info(NULL) == 1 && tx_commit() < 0)
    fputs("cannot commit transaction\n",stderr);』

『OpenTP1で使う場合の注意事項』

  1. 『tx_commit()は,グローバルトランザクションを開始したUAP(tx_begin()を呼び出したUAP)のプロセスからだけ呼び出せます。』

  2. 『tx_commit()を呼び出すプロセスは,このマニュアルの記述に従って正しく結合されたUAPの実行形式ファイルを起動したものでなければなりません。』

  3. 『tx_commit()とdc_trn_〜の関数は併用できません。』