2.4.7 トランザクションを制御するときの注意事項
-
トランザクションの範囲内でタイムアウトが発生した場合,次に実行する関数がDCCLTER_OLTF_NOT_UP,またはDCRPCER_OLTF_NOT_UPでエラーリターンする場合があります。これは,サーバ側の処理中にクライアントの最大応答待ち時間が満了し,クライアント側が先にタイムアウトした場合に,サーバとのコネクションが切断されるため,この現象が発生します。
この現象を回避するためには,クライアント環境定義DCWATCHTIMに指定する値を,トランザクショナルRPC実行プロセスのwatch_timeに指定する値よりも大きくする必要があります。
トランザクショナルRPC実行プロセスのwatch_timeは,次に示す方法で指定できます。
-
TP1/Server Base 03-02以前システム共通定義,またはユーザサービスデフォルト定義のwatch_timeオペランドで指定します。
-
TP1/Server Base 03-03以降クライアントサービス定義のwatch_timeオペランドで指定します。
また,クライアント環境定義DCWATCHTIMINHERITおよびDCCLTDELAYを指定することでも,この現象を回避できます。
-
-
CUPからトランザクションを起動した場合は,必ず非連鎖モードのコミット,またはロールバック要求をしてからCUPを終了させてください。トランザクションを完結させずにCUPを終了すると,同期点でのトランザクションの結果が検証できなくなります。このとき,トランザクショナルRPC実行プロセスは,トランザクションブランチ限界経過時間またはトランザクション問い合わせ間隔最大時間に達するまで,実行中のままとなります。経過時間に達すると,トランザクションはロールバックされます。
CUPが非連鎖モードのコミット,ロールバック要求をしないでCUPの終了,またはdc_clt_cltout_s関数を実行した場合には,自動的に非連鎖モードのコミットが行われます。ただし,CUPには同期点の結果は通知されません。
-
実時間監視タイムアウトになったあと,CUPからdc_rpc_call_s関数を実行すると,DCRPCER_SYSERRになる場合があります。
-
サーバ側で監視している各種タイマ値のどれかが満了となった場合,サーバがダウンする場合があります。サーバがダウンした場合,タイミングによっては,CUPから実行した関数が最大応答待ち時間分待ち状態となり,タイムアウトとなります。これは,クライアント側から送信するパケットをサーバ側が認識できないため,この現象が発生します。この現象を回避するために,各種タイマ値には適切な値を設定してください。