Hitachi

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


tx_begin

〈このページの構成〉

名称

トランザクションの開始

形式

ANSI C ,C++ の形式

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

K&R版 の形式

#include <tx.h>
int  tx_begin()

機能

関数tx_begin()は,呼び出し元スレッドをトランザクションモードにします。呼び出しスレッドは,まずリンクされたリソースマネジャがオープンされていることを(tx_open()で)保証しなければなりません。そのあとで,トランザクションの開始が可能になります。

関数tx_begin()の呼び出し元が,すでにトランザクションモードに入っているか,またはtx_open()をまだ呼び出していない場合,関数tx_begin()はエラーリターンします(TX_PROTOCOL_ERRORが返ります)。

tx_begin()でトランザクションモードに入ったスレッドは,tx_commit(),tx_rollback()を発行して現在のトランザクションを必ず完了させてください。

トランザクションの開始では,呼び出し元が明示的にtx_begin()の呼び出しを必要としない,トランザクション連鎖にかかわる場合があります。

トランザクション連鎖の詳細は,tx_commit(),tx_rollback()を参照してください。

『tx_begin()はMHPから呼び出せません。』

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

リターン値

成功した場合,tx_begin()はTX_OKを返します。これは,負ではないリターン値です。『0が返ります。』

エラー

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

リターン値

リターン値(数値)

意味

TX_OUTSIDE

-1

呼び出し元のスレッドが現在,グローバルトランザクションの外部で,一つ以上のリソースマネジャに関連する作業をしています。この場合トランザクションマネジャはグローバルトランザクションを開始できません。このような作業は,グローバルトランザクションが開始される前に完了していなければなりません。

呼び出し元の状態が,ローカルトランザクション中にあることに変わりはありません。

TX_PROTOCOL_ERROR

-5

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

呼び出し元の状態がトランザクションモードになっているかどうかは変わりません。

TX_ERROR

-6

トランザクションマネジャ,または一つ以上のリソースマネジャが,トランザクションを開始しようとした際に一時的なエラーが起こりました。

このエラーが返った場合は,呼び出し元の状態はトランザクションモードではありません。

TX_FAIL

-7

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

このエラーが返った場合は,呼び出し元はトランザクションモードではありません。

参照

tx_commit(),tx_open(),tx_rollback(),tx_set_transaction_timeout()

『指定例』

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

注意事項

グローバルトランザクションに参加するには,XAに準拠したリソースマネジャが正常にオープンされていることが前提です。詳細はtx_open()を参照してください。

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

  1. 『SPPからトランザクション処理を開始する場合は,tx_begin()を必ず呼び出します。SPPの場合は,呼び出し元でtx_begin()を呼び出していれば,トランザクション処理になります。』

  2. 『tx_begin()でトランザクションを生成するプロセスは,このマニュアルの記述に従って正しく結合されたUAPの実行形式ファイルを起動したものでなければなりません。』

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