ee_trn_chained_commit
形式
ANSI C,C++の形式
#include <eetrn.h> int ee_trn_chained_commit(void)
機能
トランザクションの同期点を取得します。グローバルトランザクションのルートトランザクションブランチとして,処理が正常に終了したこと(コミット)を,トランザクションを構成するトランザクションブランチのUAP,トランザクションサービス,およびリソースマネジャに知らせます。
ee_trn_chained_commit関数が正常に終了すると,新しいグローバルトランザクションが開始します。関数を呼び出したスレッドは,このトランザクションの範囲内です。
グローバルトランザクションが複数のトランザクションブランチから構成されるとき(関数を呼び出したUAPだけではないとき)は,それぞれのトランザクションブランチの処理結果がコミットとならないかぎりコミットされません。
ee_trn_chained_commit関数を呼び出せるのはルートトランザクションブランチだけです。それ以外のUAPから呼び出した場合は,リターン値EETRNER_CONDITIONでエラーリターンします。
ee_trn_chained_commit関数を呼び出すスレッドは,このマニュアルの記述に従って正しく作成されたUAPを稼働させたものでなければなりません。
ee_trn_chained_commit関数は,同期点処理が完了したときに正常に終了,またはエラーリターンのどちらかで返ります。
サービス関数リターン時に明示的にee_trn_chained_commit関数またはee_trn_chained_rollback関数を呼び出さない場合は,トランザクションの同期点を取得します。
トランザクション起動後にUAPをリターンするまでの,ee_trn_chained_commit関数の呼び出し回数の上限値を,トランザクション関連定義のtrn_max_commit_countオペランドで指定できます。ee_trn_chained_commit関数の呼び出し回数が,trn_max_commit_countオペランドで指定した上限値に達した場合,トランザクション関連定義のtrn_max_commit_downmodeオペランドの指定に従って,異常終了するか,またはKFSB50927-Eメッセージを出力します。異常終了時にサービスを閉塞するかどうかは,プロセス関連定義のservice_holdオペランドで指定します。
リターン値
リターン値 |
意味 |
---|---|
EE_OK※ |
正常に終了しました。ee_trn_chained_commit関数が終了したあとも,このスレッドはトランザクション下にあって,グローバルトランザクションの範囲内です。 |
EECOMER_CNDBPP |
オフラインバッチプロセスから発行しているため,この機能は使用できません。 |
EECOMER_CNDUOC |
UOCから発行しているため,この機能は使用できません。 |
EECOMER_ENVIRON |
TP1/EEの環境下にありません。 |
EETRNER_COMPLETION |
通信障害やリソースマネジャ障害などによってトランザクション決着に失敗したため,トランザクション回復処理を行います。このリターン値が返ったあとも,このスレッドはトランザクション下にあって,グローバルトランザクションの範囲内です。 |
EETRNER_CONDITION |
ee_trn_chained_commit関数を不正なコンテクスト(ルートトランザクションではないなど)で呼び出しています。トランザクションモードに対する影響はありません。 |
EETRNER_HAZARD |
グローバルトランザクションのトランザクションブランチがヒューリスティックに決着しました。しかし,障害のため,ヒューリスティックに決着したトランザクションブランチの同期点の結果がわかりません。このリターン値が返る原因になったUAP,リソースマネジャ,およびグローバルトランザクションの同期点の結果は,メッセージログファイルを参照してください。このリターン値が返ったあとも,このスレッドはトランザクション下にあって,グローバルトランザクションの範囲内です。 |
EETRNER_HEURISTIC |
ee_trn_chained_commit関数を呼び出したグローバルトランザクションは,ヒューリスティック決着のため,あるトランザクションブランチはコミットとなり,あるトランザクションブランチはロールバックとなりました。このリターン値は,ヒューリスティック決着の結果が,グローバルトランザクションの同期点の結果と一致しなかった場合にリターンします。このリターン値が返る原因になったUAP,リソースマネジャ,およびグローバルトランザクションの同期点の結果は,メッセージログファイルを参照してください。このリターン値が返ったあとも,このスレッドはトランザクション下にあって,グローバルトランザクションの範囲内です。 |
EETRNER_ROLLBACK_OK |
コミット処理に失敗した,またはee_trn_rollback_mark関数呼び出し済みのため,ロールバックを行いました。 |
- 注※
-
次の要求がある場合は,要求を実行します。
-
ee_mch_cmtsend関数によるトランザクション非同期の一方送信メッセージの送信要求(TP1キャッシュ機能を使用する場合)
-
ee_mch_cmtsend_sync関数によるトランザクション同期の一方送信メッセージの送信要求(TP1キャッシュ機能を使用する場合)
-
ee_mcp_send関数による非同期一方送信メッセージの送信要求(MCPを使用する場合)
-
ee_rpc_cmtsend関数によるトランザクションと同期して送信する非応答型RPC要求
-
ee_rpc_cmtsend_to関数による通信先を指定したトランザクションと同期して送信する非応答型RPC要求
-
ee_tim_execap関数(acttypeにEETIM_COMTを設定)によるタイマトランザクション起動要求
-
指定例
if(ee_trn_chained_commit() != EE_OK) fputs("cannot commit transaction\n",stderr);
注意事項
-
次の状態のとき,ee_trn_chained_commit関数は正常終了します。
-
リソースマネジャ接続失敗によるトランザクション縮退起動
-
新しいグローバルトランザクション生成時にリソースマネジャ接続失敗
必要に応じてee_trn_getinfo関数を呼び出してリソースマネジャの状態を確認してください。
-
-
【TP1/FSP限定】DBキューの交替用メッセージ表書き込み機能使用時に,この関数内で行うDBキューのメッセージ表へのアクセスで障害が発生すると,この関数はリターンしないでトランザクションがリトライロールバックする場合があります。