11.26 tpreturn()およびtpforward()関数
トランザクション・モードで実行中にプロセスを呼び出すと、tpreturn()
およびtpforward()
は、トランザクションのサービス部分をそのトランザクションの完了時にコミットまたは中断できる状態にします。同じトランザクションでサービスを何度も呼び出すことができます。システムは、トランザクションのイニシエータによってtpcommit()
またはtpabort()
が呼び出されないかぎり、トランザクションを完全にはコミットまたは中断しません。
サービス内で行われた通信呼出しのすべての未処理の記述子が取得されるまで、tpreturn()
またはtpforward()
を呼び出すことはできません。rval
にTPSUCCESS
を設定して、未処理の記述子でtpreturn()
を呼び出すと、プロトコル・エラーが発生し、tpgetrply()
を待機中のプロセスにTPESVCERR
が戻されます。そのプロセスがトランザクション・モードになっている場合、呼出し側は「中断のみ」にマークされます。トランザクションのイニシエータがtpcommit()
を呼び出した場合も、トランザクションが暗黙的に中断されます。rval
にTPFAIL
を設定して、未処理の記述子でtpreturn()
を呼び出すと、tpgetrply()
を待機中のプロセスにTPESVCFAIL
が戻されます。トランザクションへの影響は同じです。
トランザクション・モードで実行中にtpreturn()
を呼び出すと、tpreturn()で発生したプロセス・エラー、またはアプリケーションによってrval
に設定された値で示されるエラーにより、トランザクションの結果に影響することがあります。
tpforward()
を使用すると、ある時点までは要求が正しく処理されていることを示すことができます。アプリケーション・エラーが検出されない場合、システムはtpforward()
を呼び出します。アプリケーション・エラーが検出された場合、システムはTPFAIL
を設定してtpreturn()
を呼び出します。tpforward()
を正しく呼び出さないと、システムはその呼出しをプロセス・エラーとみなし、エラー・メッセージをリクエスタに返します。
親トピック: エラーの管理