11.26 tpreturn()およびtpforward()関数

トランザクション・モードで実行中にプロセスを呼び出すと、tpreturn()およびtpforward()は、トランザクションのサービス部分をそのトランザクションの完了時にコミットまたは中断できる状態にします。同じトランザクションでサービスを何度も呼び出すことができます。システムは、トランザクションのイニシエータによってtpcommit()またはtpabort()が呼び出されないかぎり、トランザクションを完全にはコミットまたは中断しません。

サービス内で行われた通信呼出しのすべての未処理の記述子が取得されるまで、tpreturn()またはtpforward()を呼び出すことはできません。rvalTPSUCCESSを設定して、未処理の記述子でtpreturn()を呼び出すと、プロトコル・エラーが発生し、tpgetrply()を待機中のプロセスにTPESVCERRが戻されます。そのプロセスがトランザクション・モードになっている場合、呼出し側は「中断のみ」にマークされます。トランザクションのイニシエータがtpcommit()を呼び出した場合も、トランザクションが暗黙的に中断されます。rvalTPFAILを設定して、未処理の記述子でtpreturn()を呼び出すと、tpgetrply()を待機中のプロセスにTPESVCFAILが戻されます。トランザクションへの影響は同じです。

トランザクション・モードで実行中にtpreturn()を呼び出すと、tpreturn()で発生したプロセス・エラー、またはアプリケーションによってrvalに設定された値で示されるエラーにより、トランザクションの結果に影響することがあります。

tpforward()を使用すると、ある時点までは要求が正しく処理されていることを示すことができます。アプリケーション・エラーが検出されない場合、システムはtpforward()を呼び出します。アプリケーション・エラーが検出された場合、システムはTPFAILを設定してtpreturn()を呼び出します。tpforward()を正しく呼び出さないと、システムはその呼出しをプロセス・エラーとみなし、エラー・メッセージをリクエスタに返します。