Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


CBLDCRPC('SVRETRY ')

〈このページの構成〉

名称

サービスプログラムのリトライ

形式

PROCEDURE DIVISIONの指定

CALL  'CBLDCRPC'  USING 一意名1

DATA DIVISIONの指定

01 一意名1.
   02 データ名A  PIC X(8) VALUE 'SVRETRY '.
   02 データ名B  PIC X(5).
   02 FILLER    PIC X(3).
   02 データ名C  PIC S9(9) COMP VALUE ZERO.

機能

実行中のサービスプログラムの処理をリトライします。リトライする場合は,サービスプログラムでCBLDCRPC('SVRETRY ')を呼び出したあとで,リトライするサービスプログラムをリターンしてください。リターンしたあと,同じプロセスで同じサービスプログラムが再起動されます。

応答型RPCで呼ばれたサービスプログラムがリトライされた場合は,リトライ前のサービスプログラムが設定した値(応答を格納する領域と応答の長さ)は無効になります。

ユーザサービス定義のrpc_service_retry_countオペランドに指定した回数を超えた(rpc_service_retry_countオペランドに0を指定した場合も含む)あとでCBLDCRPC('SVRETRY ')を呼び出した場合,CBLDCRPC('SVRETRY ')は「00377」でエラーリターンします。このとき,サービスプログラムはリトライされません。応答型RPCで呼ばれたサービスプログラムの場合は,応答を格納する領域の内容をクライアントUAPに返します。

UAPで値を設定するデータ領域

●データ名A

サービスプログラムのリトライを示す要求コードを「VALUE 'SVRETRY△'」と設定します。

●データ名C

0を設定します。

OpenTP1から値が返されるデータ領域

●データ名B

ステータスコードが,5けたの数字で返されます。

ステータスコード

ステータスコード

意味

00000

正常に終了しました。

00301

要求コード(データ名A)が間違っています。

00377

ユーザサービス定義のrpc_service_retry_countオペランドに指定したサービスリトライ回数の最大値を超えて,CBLDCRPC('SVRETRY ')を呼び出しています。これ以上サービスプログラムをリトライできません。

00302

CBLDCRPC('SVRETRY ')を呼び出す条件が間違っています。要因としては次のことが考えられます。

  • サービスプログラムの中で呼び出していません。

  • グローバルトランザクションの範囲の中で呼び出しています。

注意事項

  1. CBLDCRPC('SVRETRY ')を呼び出す場合は,次に示す条件を満たしてください。この条件を満たしていない場合,CBLDCRPC('SVRETRY ')はエラーリターンします。

    • サービスプログラムの中で CBLDCRPC('SVRETRY ')を呼び出していること。

    • 実行中のサービスプログラムが,グローバルトランザクションの範囲でないこと。

  2. CBLDCRPC('SVRETRY ')を呼び出すサービスプログラムでは,クライアントUAPから渡されたデータは参照できますが,変更できません。入力データ領域の内容を変更した場合,システムの動作は保証しません。

  3. CBLDCRPC('SVRETRY ')は,OpenTP1独自のリモートプロシジャコール(CBLDCRPC('CALL '))でサービスを要求されたサービスプログラムでだけ呼び出せます。それ以外のサービスプログラムの処理は,CBLDCRPC('SVRETRY ')でリトライできません。