Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成の手引


2.1.13 サービス関数のリトライ

デッドロックなど,リトライすれば正常に実行できるトラブルが起こった場合に,クライアントUAPにエラーを返さないでサーバUAPのプロセスをリトライできます。サービス関数をリトライして,クライアントUAPからのサービス要求をやり直す手間を省きたいときに使います。

サービス関数をリトライする場合は,サービス関数でdc_rpc_service_retry関数【CBLDCRPC('SVRETRY ')】を呼び出します。その後サービス関数をリターンすると,同じプロセスで同じサービス関数が再起動されます。

サービス関数をリトライした場合は,リトライする前のサービス関数が設定した内容(応答を格納する領域と応答の長さ)は無効になります。

サービス関数をリトライする回数は,ユーザサービス定義のrpc_service_retry_countオペランドに指定します。このオペランドに指定した回数を超えた場合は,dc_rpc_service_retry関数はエラーリターンします。このあとにリターンしたサービス関数はリトライされないで,応答の領域に設定した内容をクライアントUAPに返します。

dc_rpc_service_retry関数を使う場合は,次に示す条件を満たしてください。この条件を満たさない場合は,関数がエラーリターンします。

サービス関数のリトライの概要を次の図に示します。

図2‒12 サービス関数のリトライの概要

[図データ]