TX_関数でトランザクションを開始させるときは,UAPからは次のように関数を呼び出してください。この順で関数を呼び出すと,ユーザサービス定義のatomic_updateオペランドの指定に関係なく,トランザクションを開始できます。また,ユーザサービス定義でatomic_updateオペランドにYを指定していれば,tx_open()【TXOPEN】とtx_close()【TXCLOSE】を呼び出さなくても,トランザクション処理を開始できます。
dc_rpc_open()
tx_open()
tx_begin()
:
:
tx_commit()(同期点処理)
tx_close()
: …この間で,再びtx_open()とtx_close()を呼び出せます。
dc_rpc_close()
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()を呼び出してください。
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】で設定します。
TX_関数を呼び出すことで,トランザクション処理の特性を設定できます。
トランザクションを2相コミットするときに,1相目が完了したときにリターンするか,または2相目まで完了してからリターンするかを設定できます。ただし,OpenTP1の該当バージョンでは2相目まで完了しないうちにリターンする設定はできません。設定した場合はエラーリターンします。commit_return特性は,tx_set_commit_return()【TXSETCOMMITRET】で設定します。
同期点(tx_commit(),tx_rollback())のあとで,新しいトランザクションを開始させるかどうか(連鎖モードか非連鎖モードか)を設定します。transaction_control特性は,tx_set_transaction_control()【TXSETTRANCTL】で,TX_CHAINEDまたはTX_UNCHAINEDのどちらかを設定します。
トランザクションの監視時間を設定できます。transaction_timeout特性は,tx_set_transaction_timeout()【TXSETTIMEOUT】で設定します。システム定義のtrn_expiration_timeの値よりも,tx_set_transaction_timeout()で設定したtransaction_timeout特性が優先されます。
tx_info()【TXINFORM】で,トランザクションブランチIDや,トランザクション特性を格納されている構造体を参照できます。
参照できる構造体の形式を次に示します。
XID xid;
COMMIT_RETURN when_return;
TRANSACTION_CONTROL transaction_control;
TRANSACTION_TIMEOUT transaction_timeout;
TRANSACTION_STATE transaction_state;
tx_open(),tx_close()を使うと,ユーザサービス定義のatomic_updateオペランドの値に関係なく,tx_begin()以降の処理をトランザクションとして処理できます。
ただし,tx_begin()を呼び出したUAPからのサービス要求先でトランザクションとして処理する場合は,呼び出し先のサーバUAPのatomic_updateオペランドにYを指定してください。