Hitachi

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


CBLEERPC('CMTSND ')

〈このページの構成〉

名称

トランザクションと同期して送信する非応答型RPC要求

形式

PROCEDURE DIVISIONの指定

CALL 'CBLEERPC' USING 一意名1 一意名2

DATA DIVISIONの指定

01 一意名1.
  02 データ名A  PIC X(8) VALUE 'CMTSND  '.
  02 データ名B  PIC X(5).
  02 FILLER      PIC X(3).
  02 データ名C  PIC S9(9) COMP.
  02 FILLER      PIC S9(9) COMP.
  02 データ名E  PIC X(32).
  02 データ名F  PIC X(n).
01 一意名2.
  02 データ名G  PIC 9(9) COMP.
  02 データ名H  PIC X(n).

機能

SPPにサービスを要求します。CBLEERPC('CMTSND ')を使うときは,要求するサービスがどのノードにあるかを意識する必要はありません。

サービスを要求するときには,「サービスグループ名」と「サービス名」をCBLEERPC('CMTSND ')のデータ領域に設定します。この名称に該当するサービスプログラムへサービスが要求されます。ドメイン修飾をしてサービスを要求することはできません。

CBLEERPC('CMTSND ')を使う場合,サーバUAPがあるノードのTP1/Server BaseまたはTP1/EEが稼働していることが前提です。

【TP1/FSP限定】RPC関連定義のrpc_output_messageオペランドが設定されている場合,またはユーザサービス関連定義のservice_attr定義コマンドが設定されている場合に,送信データをUAP履歴情報のデータ種別「OJ(出力メッセージ)」として取得します。

オペランドについては,TP1/FSPの関連ドキュメントを参照してください。

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

●データ名A

トランザクションと同期して送信する非応答型RPC要求を示す要求コードを「VALUE 'CMTSND△△'」と設定します。

●データ名C

次のフラグを設定します。

65536

ネームサービスを使用している場合,データ名Fに自サービスグループ名を設定したときに明示的に自プロセス送信(通信レス)をします。

0

上記以外

●データ名E

SPPのサービス名を31バイト以内のアスキー文字列で設定します。文字列の末尾には空白を付けてください。この空白は文字列の長さに数えません。

●データ名F

SPPのサービスグループ名を31バイト以内のアスキー文字列で設定します。文字列の末尾には空白を付けてください。この空白は文字列の長さに数えません。

●データ名G

サービスの入力パラメタ長(データ名Hの長さ)を設定します。1〜EERPC_MAX_MESSAGE_SIZE_EXの範囲の値を指定できます。EERPC_MAX_MESSAGE_SIZE_EXは,eerpc.hで定義してあります。

注※

従来のEERPC_MAX_MESSAGE_SIZEは,eerpc.hで定義してありますが,EERPC_MAX_MESSAGE_SIZE_EXの使用をお勧めします。

●データ名H

サービスの入力パラメタを設定します。

TP1/EEから値が返されるデータ領域

●データ名B

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

ステータスコード

ここで示すステータスコードは,TP1/EEが返す値です。サービスプログラムが返す値ではありません。

ステータスコード

意味

00000

正常に終了しました。

00001

TP1/EEの環境下にありません。

00004

UOCから発行しているため,この機能は使用できません。

00005

オフラインバッチプロセスから発行しているため,この機能は使用できません。

00301

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

00304

メモリが不足しました。

00308

データ名Gに設定した入力パラメタ長が,最大値を超えています。

00310

データ名Fに設定したサービスグループ名は,定義されていません。

00311

自プロセスのTP1/EEへのサービス要求時,データ名Eに設定したサービス名は,定義されていません。

00318

システムエラーが起こりました。

00331

データ名Fに設定した値が間違っています。

00332

データ名Eに設定した値が間違っています。

00334

データ名Gに設定した値が間違っています。

00337

データ名Cに設定した値が間違っています。

00338

関数の呼び出し条件が不正です。

rpc_tcp_communication_useオペランドにNを指定しているため,TCP/IPを使用してRPC要求できません。

CBLEERPC('CMTSND ')がエラーになる場合

CBLEERPC('CMTSND ')がエラーリターンする場合について説明します。

初期化トランザクション(MI),終了トランザクション(ME),共有リソース初期化トランザクション(JI),またはユーザ初期化トランザクション(UT)からRPC要求された場合

CBLEERPC('CMTSND ')は「00338」でエラーリターンします。

すでにCBLEETRN('ROLLMARK')を呼び出している場合

CBLEERPC('CMTSND ')は「00338」でエラーリターンします。

ネームサービスを使用しない場合,または,ネームサービスを使用して自プロセス送信をする場合で,サービスグループ情報関連定義のmysvgdef定義コマンドまたはeesvgdef定義コマンドにサーバUAPのサービスグループ名が設定されていないとき

ネームサービスを使用しない場合,または,ネームサービスを使用して自プロセス送信をする(データ名Cに65536を設定)場合は,サービスグループ情報関連定義のmysvgdef定義コマンドまたはeesvgdef定義コマンドの指定値を基にサービス要求先を取得します。mysvgdef定義コマンドまたはeesvgdef定義コマンドにサーバUAPのサービスグループ名が設定されていない場合,CBLEERPC('CMTSND ')は「00310」でエラーリターンします。

ネームサービスを使用する場合で,該当するサービスグループ名が見つからなかったとき

ネームサービスを使用する場合は,RPC関連定義のrpc_destination_modeオペランドの指定値に従ってサービス要求先を取得します。該当するサービスグループ名が見つからなかった場合,CBLEERPC('CMTSND ')は「00310」でエラーリターンします。

ユーザサービス関連定義のserviceオペランドに自TP1/EEのサービス名を指定しないで自プロセスのTP1/EEへRPC要求をした場合

CBLEERPC('CMTSND ')は「00311」でエラーリターンします。

注意事項

  1. データ領域に設定するサービスグループ名およびサービス名は,サーバUAPの環境設定で設定しておいてください。

  2. SPPへのサービス要求時にエラーが発生した場合,プロセス関連定義のrpc_cmtsend_retryオペランドの指定に従って,別処理スレッドによる再送信,またはエラートランザクション(ERRTRNS)の起動のどちらかの処理が実行されます。ただし,サービス要求元のトランザクションがエラートランザクションの場合は,エラーメッセージ出力後,これらの処理は実行されません。また,別処理スレッドによる再送信でエラーとなった場合は,エラートランザクション(ERRTRNS)が起動されます。

  3. CBLEERPC('CMTSND ')を呼び出したトランザクションでは,トランザクションは最適化されません。

  4. CBLEERPC('CMTSND ')の要求は,プロセスダウン時やスレッドダウン時の回復対象にはなりません。CBLEERPC('CMTSND ')の要求後に次の状態になったときは,回復処理でのトランザクション決着結果に関係なく,CBLEERPC('CMTSND ')の要求は破棄されます。

    • TP1/EEプロセスダウン

    • UAP異常発生によるスレッドダウン

    • 通信障害やリソースマネジャ障害などによるトランザクション未決着

  5. この関数は,トランザクションのコミット時に実行されます。したがって,トランザクションの同期点を取得する処理でエラーが起こった場合,この関数の処理は無効となります。

  6. リモートAPI機能を使用したRPCはできません。

  7. 【TP1/FSP限定】次のステータスコードの場合,出力メッセージ(OJ)は取得されません。

    00001,00004,00005,00301,00308,00331,00332,00334,00337

  8. 次の条件をすべて満たす場合は,自TP1/EEのサービスグループ名を指定したRPCはできません。

    • 実行系連絡トランザクション(UI)である

    • name_useオペランドにYを指定

    • データ名Cに65536を指定していない