Hitachi

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


CBLEERPC('CALLTO ')

〈このページの構成〉

名称

通信先を指定した遠隔サービスの要求

形式

PROCEDURE DIVISIONの指定

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

DATA DIVISIONの指定

01 一意名1.
  02 データ名A  PIC X(8) VALUE 'CALLTO  '.
  02 データ名B  PIC X(5).
  02 FILLER     PIC X(3).
  02 データ名C  PIC S9(9) COMP VALUE ZERO.
  02 データ名D  PIC S9(9) COMP.
  02 データ名E  PIC X(32).
  02 データ名F  PIC X(n).
01 一意名2.
  02 データ名G  PIC S9(9) COMP.
  02 データ名H  PIC X(n).
01 一意名3.
  02 データ名I  PIC S9(9) COMP.
  02 データ名J  PIC X(n).
01 一意名4.
  02 データ名K  PIC X(1).
  02 FILLER     PIC X(1).
  02 データ名L  PIC 9(4) COMP-X.
  02 データ名M  PIC X(5).
  02 FILLER     PIC X(3).
  02 データ名N  PIC X(n).

機能

特定のSPPのサービスを要求します。サービスを要求するには,ホスト名またはノード識別子に加え,「サービスグループ名」と「サービス名」をCBLEERPC('CALLTO ')のデータ領域に設定します。指定したホスト名またはノード識別子は,サービス要求先を特定する検索のキーとして使用します。この設定に該当するサービス関数へサービスが要求されます。ドメイン修飾をしてサービスを要求することはできません。

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

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

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

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

●データ名A

遠隔サービスの要求を示す要求コードを「VALUE 'CALLTO△△'」と設定します。

●データ名C

RPCの形態とオプションを,数値で設定します。

0

同期応答型RPC

1

非応答型RPC

2

非同期応答型RPC

トランザクション処理からのサービス要求で,要求先の処理をトランザクションにしない場合は,RPCの形態を示す数値に32を加算します。32を加算すると,トランザクションの処理からのサービス要求でも,サービスプログラムの処理はトランザクションになりません。

非同期応答型RPCで,サービス関数が設定した応答の長さを参照したい場合は,RPCの形態を示す数値に「512」を加算します。その場合は,CBLEERPC('POLLANYR')の正常終了時に,CBLEERPC('CALLTO')のサービス応答とサービス応答の長さに,サービス関数が設定した応答と応答の長さがそれぞれ設定されます。「512」を加算しない場合は,サービス応答だけ設定されます。

(例)

非応答型RPCでトランザクションにしないサービス要求をする場合

データ名Cには1+32=33を設定します。

●データ名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

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

●データ名I

サービスの応答の長さ(データ名Jの長さ)を設定します(単位:バイト)。1〜EERPC_MAX_MESSAGE_SIZE_EXの範囲の値を指定できます。EERPC_MAX_MESSAGE_SIZE_EXは,eerpc.hで定義してあります。

非応答型RPCの場合も,サービスの応答の長さを設定した領域のアドレスを指定する必要があります。この場合,サービスの応答の長さには,0を設定します。

注※

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

●データ名K

VALUE 'N'

データ名Lにネームサービスのポート番号を指定した場合に指定してください。

VALUE 'S'

サービス要求先(TP1/Server Base)のスケジュールサービスのポート,またはサービス要求先(TP1/EE)のmysvgdefオペランドで指定したポートに対してサービスを要求する場合に指定してください。

VALUE 'D'

上記以外の場合に指定してください。

●データ名L

ホスト名を検索キーとする場合のポート番号(1〜65535)を指定します。

データ名KにVALUE 'N'を指定した場合,サービス要求先ノードのネームサービスのポート番号(TP1/Server Baseのシステム共通定義のname_portオペランドに指定した値)を指定します。

データ名KにVALUE 'D'を指定した場合は,サービス要求元のネームサービスのポート番号と,サービス要求先のネームサービスのポート番号が同じであることが前提となります。

データ名KにVALUE 'S'を指定した場合,サービス要求先がTP1/Server BaseのSPPのときは,要求先のスケジュールサービスのポート番号を指定します。サービス要求先がTP1/EEのときは,要求先の自サービスグループ定義のmysvgdef定義コマンドで指定したポート番号を指定します。

データ名KにVALUE 'S'を指定し,データ名Lに0を指定した場合は,送信先ポート番号の省略値として,最初に定義した自サービスグループ情報のmysvgdef定義コマンドに指定したポート番号の値を仮定します。最初に定義したmysvgdef定義コマンドのポート番号に0を指定している場合は,データ名Lに0を指定できません。

ノード識別子を検索のキーとする場合は,データ名Lに指定した値は無視されます。

●データ名M

ノード識別子を検索のキーにする場合,サービス要求先のノード識別子を指定します。文字列の最後には空白文字を設定してください。この空白文字は文字列の長さに数えません。

ノード識別子は,OpenTP1システム共通定義のnode_idオペランドに指定した名称で,かつサービス要求先ノードのホスト名がグローバルドメイン内にあることが前提です。相手先がTP1/EEの場合も親TP1/Server Baseのノード識別子を指定してください。

ノード識別子を検索のキーにしない場合には,データ名Mに空白を指定してください。

データ名KにVALUE 'S'を指定した場合は,データ名Mに空白を指定してください。

●データ名N

ホスト名を検索のキーにする場合,サービス要求先ノードのホスト名を指定します。データ名KにVALUE 'D'以外を指定した場合は,データ名Nを必ず指定してください。

指定できるホスト名は1〜255文字の文字列です。文字列に使用できる文字は,英数字,ピリオド,およびハイフンです。ただし,IPアドレス形式は除きます。文字列の最後には空白を設定してください。この空白は文字列の長さに数えません。指定するホスト名は,/etc/hostsファイル,DNSなどで,IPアドレスとのマッピングができる名称です。

なお,サービス要求先ノードのホスト名はグローバルドメインに指定されていても,指定されていなくても,どちらでもかまいません。

ホスト名を検索キーにしない場合には,データ名Nに空白を指定してください。

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

●データ名B

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

●データ名D

非同期応答型RPCの場合に,記述子が返されます。

サーバUAPから値が返されるデータ領域

●データ名I

サービスプログラムが設定した応答の長さ(データ名Jの長さ)が返されます。

●データ名J

サービスプログラムが設定した応答が返されます。

ステータスコード

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

ステータスコード

意味

00000

正常に終了しました。非同期応答型RPCの場合は,データ名Dに記述子が設定されました。

00001

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

00004

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

00005

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

00301

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

要求コード(データ名A)が間違っている場合も含みます。

データ名Nに指定されたホスト名が,/etc/hostsファイル,DNSなどで,IPアドレスとのマッピングができません。

00304

メモリが不足しました。要求先がTP1/EEの場合は,データ名Iの設定値がOMAサイズを超過しているおそれがあります。

00305

ネットワークの障害などによってサービス要求できるコネクションの取得に失敗しました。

00306

ネットワークに障害が起こりました。

00307

処理が時間切れ(タイムアウト)になりました。

サービスを要求されたSPPが,処理を完了する前に異常終了しました。

非トランザクショナルRPC(データ名Cに32以上を設定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1mode_downオペランド設定値がJの場合,サーバ側のトランザクション決着結果がロールバック以外です。

00308

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

00309

返ってきた応答が,クライアントUAPで用意した領域に入り切りません。

00310

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

データ名Nで指定されたノード識別子が,グローバルドメイン(システム共通定義のall_nodeオペランドで指定したノード名の集合)内にありません。

00311

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

サービスの要求先がTP1/EEであり,かつ要求先の転送機能が無効(rpc_loadbalanceオペランド設定値がN,かつrpc_transfer_othersvgオペランド設定値がN)の場合は,サービスグループ名が不正のおそれがあります。

00312

データ名Eに設定したサービス名があるサービスグループは,閉塞しています。

00313

データ名Eに設定したサービスは,終了処理中です。

00314

データ名Eに設定したサービスのUAPプロセスが,稼働していません。

サービス要求の応答待ち時間に0を指定した場合に,サービスを要求されたSPPが,処理を完了する前に異常終了しました。

00315

データ名Eに設定したサービスがあるノードのTP1/Server BaseまたはTP1/EEが稼働していません。異常終了,停止中,終了処理中,または通信障害が起こったことが考えられます。

00316

設定したサービスで,システムエラーが起こりました。

00317

設定したサービスで,メモリが不足しました。

非トランザクショナルRPC(データ名Cに32以上を設定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1modeオペランドまたはrpc_reply_tp1mode_downオペランド設定値がNの場合,サーバ側のトランザクションがコミットしましたが,応答を返せませんでした。次に示す原因が考えられます。

  • UAPリターン後の同期点処理でトランザクション決着できない状態で,かつrpc_replymsg_saveオペランド設定値がN

  • UAPリターン後の同期点処理以降にプロセスダウン

00318

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

00319

サービスプログラムがTP1/EEに返した応答の長さが,1〜EERPC_MAX_MESSAGE_SIZE_EXで定義されている値の範囲にありません。

00320

サービスを要求されたノードにあるTP1/Server BaseまたはTP1/EEは,開始処理中です。

00323

メモリが不足しました。このステータスコードが返った場合は,トランザクションブランチをコミットできません。

00324

システムエラーが起こりました。このステータスコードが返った場合は,トランザクションブランチをコミットできません。

00325

設定したサービスで,システムエラーが起こりました。このステータスコードが返った場合は,トランザクションブランチをコミットできません。

00326

返ってきた応答が,クライアントUAPで用意した領域に入り切りません。このステータスコードが返った場合は,トランザクションブランチをコミットできません。

00327

ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で,複数のSPPのトランザクション属性が一致していません。または,負荷を分散する先のノードにあるTP1/Server BaseまたはTP1/EEのバージョンが,クライアントのTP1/Server BaseまたはTP1/EEのバージョンよりも古いため,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を実行できません。このステータスコードは,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPPにサービスを要求した場合にだけリターンされます。

00331

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

00332

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

00334

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

00336

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

00337

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

00338

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

  • RPC関連定義のname_useオペランドにYが設定されていません。

00339

サービスを要求されたSPPのメッセージ格納領域に十分な空きがないため,サービス要求を受け付けられませんでした。

00340

非同期応答型RPC(データ名Cに2を設定)の場合は,rpc_nowait_cntオペランドで指定した同時要求最大数をオーバしました。

00356

サービスを要求されたソケット受信型サーバが,サービス要求を受け取れません。

00366

オンラインテスタを使っている環境で,テストモードのUAPからテストモードでないSPPへサービスを要求しています。または,テストモードでないUAPからテストモードのSPPへサービスを要求しています。

00370

リモートAPI機能を使用した場合に,代理実行要求先で発生したエラーリターンです。エラーリターンの原因は,代理実行要求先のマニュアルを参照してください。

00372

同時に起動できるトランザクションブランチの数を超えたため,トランザクションブランチを開始できません。

一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため,トランザクションブランチを開始できません。

データ名KにVALUE 'S'を指定し,非トランザクション属性(ユーザサービス定義のatomic_updateオペランドにNを指定,またはシステム共通定義のjnl_fileless_optionオペランドにYを指定)のTP1/Server Baseユーザサーバに対し,データ名Cに32を加算しないでサービスを要求しました。

リソースマネジャでエラーが発生したため,トランザクションブランチを開始できません。

非トランザクショナルRPC(データ名Cに32以上を設定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1modeオペランドまたはrpc_reply_tp1mode_downオペランド設定値がNの場合,サーバ側のトランザクションがコミットできませんでした。

非トランザクショナルRPC(データ名Cに32以上を設定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1mode_downオペランド設定値がJの場合,サーバ側のトランザクションがロールバックしました。

00378

リモートAPI機能を使用した場合に,代理実行要求先で発生したエラーリターンです。エラーリターンの原因は,代理実行要求先のマニュアルを参照してください。

注意事項

  1. ホスト名(データ名N)とノード識別子(データ名M)を同時に指定した場合,ホスト名の指定が有効になり,ノード識別子の指定は無視されます。

  2. ホスト名(データ名N),ノード識別子(データ名M)ともに空白を指定した場合,CBLEERPC('CALL ')と同様に動作します。

  3. データ名KにVALUE 'S'を指定し,ソケット受信型(ユーザサービス定義のreceive_fromオペランドにsocketを指定)のTP1/Server Baseユーザサーバへサービスを要求した場合,CBLEERPC('CALLTO ')はステータスコード「00314」でリターンします。

  4. データ名KにVALUE 'S'を指定してCBLEERPC('CALLTO ')を呼び出した場合,rpc_retryオペランドは無効になります。

  5. RPC関連定義のname_useオペランドにNを設定して,CBLEERPC('CALLTO ')を呼び出した場合,ステータスコード「00338」でリターンします。

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

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

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

  8. その他の注意事項は,CBLEERPC('CALL ')の注意事項を参照してください。