ee_rpc_cmtsend
- 〈このページの構成〉
形式
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のリターン値でエラーリターンします。
注意事項
-
引数に設定するサービスグループ名およびサービス名は,サーバUAPの環境設定で設定しておいてください。
-
SPPへのサービス要求時にエラーが発生した場合,プロセス関連定義のrpc_cmtsend_retryオペランドの指定に従って,別処理スレッドによる再送信,またはエラートランザクション(ERRTRNS)の起動のどちらかの処理が実行されます。ただし,サービス要求元のトランザクションがエラートランザクションの場合は,エラーメッセージ出力後,これらの処理は実行されません。また,別処理スレッドによる再送信でエラーとなった場合は,エラートランザクション(ERRTRNS)が起動されます。
-
この関数を呼び出したトランザクションでは,トランザクションは最適化されません。
-
この関数は,トランザクションのコミット時に実行されます。したがって,トランザクションの同期点を取得する処理でエラーが起こった場合,この関数の処理は無効となります。
-
リモートAPI機能を使用したRPCはできません。
-
【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
-
次の条件をすべて満たす場合は,自TP1/EEのサービスグループ名を指定したRPCはできません。
-
実行系連絡トランザクション(UI)である
-
name_useオペランドにYを指定
-
flagsにEERPC_CMTSEND_MYPROCを指定していない
-