Hitachi

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


ee_rpc_cmtsend

〈このページの構成〉

名称

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

形式

ANSI C,C++の形式

#include <eerpc.h>
int ee_rpc_cmtsend(char *group, char *service,
                   char *in, EEULONG *in_len,
                   EELONG flags)

機能

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

サービスを要求するときには,「サービスグループ名」と「サービス名」を引数に設定します。この名称に該当するサービス関数へサービスが要求されます。ドメイン修飾をしてサービスを要求することはできません。

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

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

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

UAPで値を設定する引数

●group

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

●service

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

●in

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

●in_len

サービスの入力パラメタ長を設定します(単位:バイト)。1〜EERPC_MAX_MESSAGE_SIZE_EXの範囲の値を指定できます。EERPC_MAX_MESSAGE_SIZE_EXは,eerpc.hで定義してあります。

サービス要求先がTP1/EEの場合,相手先のTP1/EEのIMAサイズ以下の値を設定してください。

注※

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

●flags

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

EERPC_CMTSEND_MYPROC

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

EENOFLAGS

上記以外

リターン値

ここで示すリターン値は,TP1/EEが返す値です。サービス関数から返される値ではありません。

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_CNDBPP

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

EECOMER_CNDUOC

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

EECOMER_ENVIRON

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

EERPCER_CONDITION

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

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

EERPCER_MEMORY_SHORT

メモリが不足しました。

EERPCER_MESSAGE_TOO_BIG

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

EERPCER_NO_SUCH_SERVICE

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

EERPCER_NO_SUCH_SERVICE_GROUP

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

EERPCER_PARAM_FLAGS

flagsに設定した値が間違っています。

EERPCER_PARAM_GROUP

groupに設定した値が間違っています。

EERPCER_PARAM_IN

inに設定した値が間違っています。

EERPCER_PARAM_IN_LEN

in_lenに設定した値が間違っています。

EERPCER_PARAM_SERVICE

serviceに設定した値が間違っています。

EERPCER_SYSERR

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

ee_rpc_cmtsend関数がエラーになる場合

ee_rpc_cmtsend関数がエラーリターンする場合について説明します。

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

ee_rpc_cmtsend関数はEERPCER_CONDITIONのリターン値でエラーリターンします。

すでにee_trn_rollback_mark関数を呼び出している場合

ee_rpc_cmtsend関数はEERPCER_CONDITIONのリターン値でエラーリターンします。

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

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

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

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

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

ee_rpc_cmtsend関数はEERPCER_NO_SUCH_SERVICEのリターン値でエラーリターンします。

注意事項

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

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

  3. この関数を呼び出したトランザクションでは,トランザクションは最適化されません。

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

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

  6. 【TP1/FSP限定】次のリターン値の場合,出力メッセージ(OJ)は取得されません。

    EECOMER_ENVIRON,EECOMER_CNDUOC,EECOMER_CNDBPP,EERPCER_ARGUMENT,EERPCER_PARAM_GROUP,EERPCER_PARAM_SERVICE,EERPCER_PARAM_IN,EERPCER_PARAM_IN_LEN,EERPCER_PARAM_FLAGS,EERPCER_MESSAGE_TOO_BIG

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

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

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

    • flagsにEERPC_CMTSEND_MYPROCを指定していない