5.2.2 TX_関数の使用方法
(1) トランザクションの開始
TX_関数でトランザクションを開始させるときは,UAPからは次のように関数を呼び出してください。この順で関数を呼び出すと,ユーザサービス定義のatomic_updateオペランドの指定に関係なく,トランザクションを開始できます。また,ユーザサービス定義でatomic_updateオペランドにYを指定していれば,tx_open()【TXOPEN】とtx_close()【TXCLOSE】を呼び出さなくても,トランザクション処理を開始できます。
- SUPでトランザクションを開始する場合
dc_rpc_open() tx_open() tx_begin() : : tx_commit()(同期点処理) tx_close() : …この間で,再びtx_open()とtx_close()を呼び出せます。 dc_rpc_close()
- SPPでトランザクションを開始する場合
-
(サービス関数でトランザクションを開始)
dc_rpc_open() tx_open() dc_rpc_mainloop() : (サービス関数の処理) tx_begin() : : tx_commit()(同期点処理) : (メイン関数のdc_rpc_mainloop()リターン) tx_close() : dc_rpc_close()
SPPのサービス関数内でトランザクションを開始させる場合には,dc_rpc_mainloop関数を呼び出す前に,tx_open()を呼び出してください。
(2) 同期点の取得
tx_begin()【TXBEGIN】で開始したトランザクション処理は,同期点を取得する関数(tx_commit()【TXCOMMIT】,またはtx_rollback()【TXROLLBACK】)で必ず完了させてください。
tx_commit()とtx_rollback()には,連鎖モード(TX_CHAINED)と非連鎖モード(TX_UNCHAINED)があります。同期点の取得後に新しいグローバルトランザクションを開始する場合は連鎖モード,開始しないでトランザクション処理を終了させる場合は非連鎖モードを設定します。連鎖モード/非連鎖モードはtransaction_control特性として設定します。transaction_control特性は,tx_set_transaction_control()【TXSETTRANCTL】で設定します。
(3) トランザクション特性の設定
TX_関数を呼び出すことで,トランザクション処理の特性を設定できます。
(a) commit_return特性
トランザクションを2相コミットするときに,1相目が完了したときにリターンするか,または2相目まで完了してからリターンするかを設定できます。ただし,OpenTP1の該当バージョンでは2相目まで完了しないうちにリターンする設定はできません。設定した場合はエラーリターンします。commit_return特性は,tx_set_commit_return()【TXSETCOMMITRET】で設定します。
(4) トランザクションの情報取得
tx_info()【TXINFORM】で,トランザクションブランチIDや,トランザクション特性を格納されている構造体を参照できます。
参照できる構造体の形式を次に示します。
XID xid; COMMIT_RETURN when_return; TRANSACTION_CONTROL transaction_control; TRANSACTION_TIMEOUT transaction_timeout; TRANSACTION_STATE transaction_state;
(5) ユーザサービス定義との関連
tx_open(),tx_close()を使うと,ユーザサービス定義のatomic_updateオペランドの値に関係なく,tx_begin()以降の処理をトランザクションとして処理できます。
ただし,tx_begin()を呼び出したUAPからのサービス要求先でトランザクションとして処理する場合は,呼び出し先のサーバUAPのatomic_updateオペランドにYを指定してください。