ee_rpc_call_to
- 〈このページの構成〉
形式
ANSI C,C++の形式
#include <eerpc.h> int ee_rpc_call_to(struct EERPC_BINDING_TBL *direction, char *group, char *service, char *in, EEULONG *in_len, char *out, EEULONG *out_len, EELONG flags)
機能
特定のSPPにサービスを要求します。サービスを要求するには,ホスト名またはノード識別子を指定したEERPC_BINDING_TBL構造体に加え,「サービスグループ名」と「サービス名」を引数に設定します。EERPC_BINDING_TBL構造体に指定したホスト名またはノード識別子は,サービス要求先を特定する検索のキーとして使用します。この設定に該当するサービス関数へサービスが要求されます。ドメイン修飾をしてサービスを要求することはできません。
この関数を使う場合,サーバUAPがあるノードのTP1/Server BaseまたはTP1/EEが稼働していることが前提です。
【TP1/FSP限定】RPC関連定義のrpc_output_messageオペランドが設定されている場合,またはユーザサービス関連定義service_attr定義コマンドが設定されている場合に,送信データをUAP履歴情報のデータ種別「OJ(出力メッセージ)」として取得します。
オペランドについては,TP1/FSPの関連ドキュメントを参照してください。
UAPで値を設定する引数
●direction
サービス要求先を特定する検索キーを格納するEERPC_BINDING_TBL構造体のアドレスを指定します。検索のキーはホスト名またはノード識別子のどちらかです。
EERPC_BINDING_TBL構造体の形式を次に示します。
struct EERPC_BINDING_TBL { char *nid ; /*ノード識別子格納アドレス*/ char *hostnm ; /*ホスト名格納アドレス */ unsigned short portno ; /*ポート番号 */ short filler1 ; /*予備 */ EELONG flags ; /*属性 */ EELONG filler2[4] ; /*予備 */ };
-
nid
ノード識別子を検索キーにする場合,サービス要求先のノード識別子を格納した領域のアドレスを指定します。文字列の最後にはNULL文字を設定してください。このNULL文字は文字列の長さに数えません。
ノード識別子は,OpenTP1システム共通定義のnode_idオペランドに指定した名称で,かつサービス要求先ノードのホスト名がグローバルドメイン内にあることが前提です。相手先がTP1/EEの場合も親TP1/Server Baseのノード識別子を指定してください。
ノード識別子を検索のキーにしない場合には,nidにアドレス0を指定してください。
EERPC_BINDING_TBL構造体のflagsにEERPC_SCDPORTを指定した場合は,nidにアドレス0を指定してください。
-
hostnm
ホスト名を検索キーにする場合,サービス要求先ノードのホスト名を格納した領域のアドレスを指定します。EERPC_BINDING_TBL構造体のflagsにEENOFLAGS以外を指定した場合は,hostnmを必ず指定してください。
指定できるホスト名は1〜255文字の文字列です。文字列に使用できる文字は,英数字,ピリオド,およびハイフンです(ただし,IPアドレス形式は除く)。文字列の最後にはNULL文字を設定してください。このNULL文字は文字列の長さに数えません。指定するホスト名は,/etc/hostsファイルまたはDNSなどで,IPアドレスとのマッピングができる名称です。
なお,サービス要求先ノードのホスト名はグローバルドメインに指定されていても,指定されていなくてもかまいません。
ホスト名を検索キーにしない場合には,hostnmにアドレス0を指定してください。
-
portno
ホスト名を検索キーとする場合のポート番号(1〜65535)を指定します。
EERPC_BINDING_TBL構造体のflagsにEERPC_NAMPORTを指定した場合,サービス要求先ノードのネームサービスのポート番号(TP1/Server Baseのシステム共通定義のname_portオペランドに指定した値)を指定します。
EERPC_BINDING_TBL構造体のflagsにEENOFLAGSを指定した場合は,サービス要求元のネームサービスのポート番号と,サービス要求先のネームサービスのポート番号が同じであることが前提となります。
EERPC_BINDING_TBL構造体のflagsにEERPC_SCDPORTを指定した場合,サービス要求先がTP1/Server BaseのSPPのときは,要求先のスケジュールサービスのポート番号を指定します。サービス要求先がTP1/EEのときは,要求先の自サービスグループ定義のmysvgdefオペランドで指定したポート番号を指定します。
EERPC_BINDING_TBL構造体のflagsにEERPC_SCDPORTを指定し,portnoに0を指定した場合は,送信先ポート番号の省略値として,最初に定義した自サービスグループ情報のmysvgdef定義コマンドに指定したポート番号の値を仮定します。最初に定義したmysvgdef定義コマンドのポート番号に0を指定している場合は,portnoに0を指定できません。
ノード識別子を検索のキーとする場合は,portnoに指定した値は無視されます。
-
filler1
0を指定します。
-
flags
- EERPC_NAMPORT
-
portnoにネームサービスのポート番号を指定した場合に指定してください。
- EERPC_SCDPORT
-
サービス要求先(TP1/Server Base)のスケジュールサービスのポート,またはサービス要求先(TP1/EE)のmysvgdef定義コマンドで指定したポートに対してサービスを要求する場合に指定してください。
- EENOFLAGS
-
上記以外の場合に指定してください。
-
filler2
すべて0を指定します。
●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の使用をお勧めします。
●out
サービス関数から返ってくる応答を格納する領域を設定します。outで指す領域に,サービス関数からの応答が設定されます。
●out_len
サービスの応答の長さを設定します(単位:バイト)。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の使用をお勧めします。
●flags
RPCの形態とオプションを次に示す形式で設定します。
{EENOFLAGS|EERPC_NOWAIT|EERPC_NOREPLY}〔|EERPC_TPNOTRAN〕〔|EERPC_NOWAIT_OUTLEN〕
- EENOFLAGS
-
同期応答型RPC
- EERPC_NOWAIT
-
非同期応答型RPC
- EERPC_NOREPLY
-
非応答型RPC
- EERPC_TPNOTRAN
-
トランザクション処理からのサービス要求で,要求先の処理をトランザクションにしない場合に設定します。
この値はRPCの形態との論理和で設定してください。
- EERPC_NOWAIT_OUTLEN
-
非同期応答型RPCで,サービス関数が設定した応答の長さを参照したい場合に設定します。EERPC_NOWAIT_OUTLENを設定した場合,ee_rpc_poll_any_replies関数の正常終了時,ee_rpc_call_to関数で設定したoutとout_lenに,サービス関数が設定した応答と応答の長さがそれぞれ設定されます。EERPC_NOWAIT_OUTLENを設定しない場合,outだけ設定されます。
EERPC_NOWAIT_OUTLENはEERPC_NOWAITと論理和で指定してください。EERPC_NOWAITを指定していない場合,EERPC_NOWAIT_OUTLENは無視されます。
サーバUAPから値が返される引数
●out
サービス関数が設定した応答が返されます。
●out_len
サービス関数が設定した応答の長さが返されます。
リターン値
ここで示すリターン値は,TP1/EEが返す値です。サービス関数から返される値ではありません。
リターン値 |
意味 |
---|---|
EE_OKまたは正の整数 |
正常に終了しました。非同期応答型RPCの場合は,正の整数は記述子です。 |
EECOMER_CNDBPP |
オフラインバッチプロセスから発行しているため,この機能は使用できません。 |
EECOMER_CNDUOC |
UOCから発行しているため,この機能は使用できません。 |
EECOMER_ENVIRON |
TP1/EEの環境下にありません。 |
EERPCER_AGAIN |
サービスを要求されたSPPのメッセージ格納領域に十分な空きがないため,サービス要求を受け付けられませんでした。 |
EERPCER_ARGUMENT |
引数に設定した値が間違っています。 EERPC_BINDING_TBL構造体のhostnmに指定されたホスト名が,/etc/hostsファイルまたはDNSなどで,IPアドレスとのマッピングができません。 |
EERPCER_CONDITION |
関数の呼び出し条件が不正です。
|
EERPCER_INVALID_REPLY |
サービス関数がOpenTP1に返した応答の長さが,1〜EERPC_MAX_MESSAGE_SIZE_EXで定義されている値の範囲にありません。 |
EERPCER_LIMITS_OVER |
非同期応答型RPC(flagsにEERPC_NOWAIT指定)の場合は,rpc_nowait_cntオペランドで指定した同時要求最大数をオーバしました。 |
EERPCER_MEMORY_SHORT |
メモリが不足しました。要求先がTP1/EEの場合は,out_lenの設定値がOMAサイズを超過しているおそれがあります。 |
EERPCER_MESSAGE_TOO_BIG |
in_lenに設定した入力パラメタ長が,最大値を超えています。 |
EERPCER_NET_DOWN |
ネットワークに障害が起こりました。 |
EERPCER_NO_BUFS_AT_SERVER |
設定したサービスで,メモリが不足しました。 |
非トランザクショナルRPC(EERPC_TPNOTRAN指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1modeオペランドまたはrpc_reply_tp1mode_downオペランド設定値がNの場合,サーバ側のトランザクションがコミットしましたが,応答を返せませんでした。次に示す原因が考えられます。
|
|
EERPCER_NO_BUFS_RB |
メモリが不足しました。このリターン値が返った場合は,トランザクションブランチをコミットできません。 |
EERPCER_NO_SERVICE_SOCKET |
ネットワークの障害などによってサービス要求できるコネクションの取得に失敗しました。 |
EERPCER_NO_SUCH_SERVICE |
serviceに設定したサービス名は,定義されていません。 |
サービスの要求先がTP1/EEであり,かつ要求先の転送機能が無効(rpc_loadbalanceオペランド設定値がN,かつrpc_transfer_othersvgオペランド設定値がN)の場合は,サービスグループ名が不正のおそれがあります。 |
|
EERPCER_NO_SUCH_SERVICE_GROUP |
groupに設定したサービスグループ名は,定義されていません。 |
EERPC_BINDING_TBL構造体のnidに指定されたノード識別子が,グローバルドメイン(システム共通定義のall_nodeオペランドで指定したノード名の集合)内にありません。 |
|
EERPCER_OLTF_INITIALIZING |
サービスを要求されたノードにあるTP1/Server BaseまたはTP1/EEは,開始処理中です。 |
EERPCER_OLTF_NOT_UP |
serviceに設定したサービスがあるノードのTP1/Server BaseまたはTP1/EEが稼働していません。異常終了,停止中,終了処理中,および通信障害が起こったことが考えられます。 |
EERPCER_PARAM_FLAGS |
flagsに設定した値が間違っています。 |
EERPCER_PARAM_GROUP |
groupに設定した値が間違っています。 |
EERPCER_PARAM_IN |
inに設定した値が間違っています。 |
EERPCER_PARAM_IN_LEN |
in_lenに設定した値が間違っています。 |
EERPCER_PARAM_OUT |
outに設定した値が間違っています。 |
EERPCER_PARAM_OUT_LEN |
out_lenに設定した値が間違っています。 |
EERPCER_PARAM_SERVICE |
serviceに設定した値が間違っています。 |
EERPCER_REPLY_TOO_BIG |
返ってきた応答が,クライアントUAPで用意した領域に入り切りません。 |
EERPCER_REPLY_TOO_BIG_RB |
返ってきた応答が,クライアントUAPで用意した領域に入り切りません。このリターン値が返った場合は,トランザクションブランチをコミットできません。 |
EERPCER_SECCHK |
リモートAPI機能を使用した場合に,代理実行要求先で発生したエラーリターンです。エラーリターンの原因は,代理実行要求先のマニュアルを参照してください。 |
EERPCER_SERVER_BUSY |
サービスを要求されたソケット受信型サーバが,サービス要求を受け取れません。 |
EERPCER_SERVICE_CLOSED |
serviceに設定したサービス名があるサービスグループは,閉塞しています。 |
EERPCER_SERVICE_NOT_UP |
serviceに設定したサービスのUAPプロセスが,稼働していません。 |
サービス要求の応答待ち時間に0を指定した場合に,サービスを要求されたSPPが,処理を完了する前に異常終了しました。 |
|
EERPCER_SERVICE_TERMINATED |
リモートAPI機能を使用した場合に,代理実行要求先で発生したエラーリターンです。エラーリターンの原因は,代理実行要求先のマニュアルを参照してください。 |
EERPCER_SERVICE_TERMINATING |
serviceに設定したサービスは,終了処理中です。 |
EERPCER_SYSERR |
システムエラーが起こりました。 |
EERPCER_SYSERR_AT_SERVER |
設定したサービスで,システムエラーが起こりました。 |
EERPCER_SYSERR_AT_SERVER_RB |
設定したサービスで,システムエラーが起こりました。このリターン値が返った場合は,トランザクションブランチをコミットできません。 |
EERPCER_SYSERR_RB |
システムエラーが起こりました。このリターン値が返った場合は,トランザクションブランチをコミットできません。 |
EERPCER_TESTMODE |
オンラインテスタを使っている環境で,テストモードのUAPからテストモードでないSPPへサービスを要求しています。または,テストモードでないUAPからテストモードのSPPへサービスを要求しています。 |
EERPCER_TIMED_OUT |
ee_rpc_call_to関数の処理が時間切れ(タイムアウト)になりました。 |
サービスを要求されたSPPが,処理を完了する前に異常終了しました。 |
|
非トランザクショナルRPC(flagsにEERPC_TPNOTRANを指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1mode_downオペランド設定値がJの場合,サーバ側のトランザクション決着結果がロールバック以外です。 |
|
EERPCER_TRNCHK |
ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で,複数のSPPのトランザクション属性が一致していません。または,負荷を分散する先のノードにあるTP1/Server BaseまたはTP1/EEのバージョンが,クライアントのTP1/Server BaseまたはTP1/EEのバージョンよりも古いため,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を実行できません。 このリターン値は,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPPにサービスを要求した場合にだけリターンされます。 |
EERPCER_TRNCHK_EXTEND |
同時に起動できるトランザクションブランチの数を超えたため,トランザクションブランチを開始できません。 |
一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため,トランザクションブランチを開始できません。 |
|
EERPC_BINDING_TBL構造体のflagsにEERPC_SCDPORTを指定し,非トランザクション属性(ユーザサービス定義のatomic_updateオペランドに'N'を指定,またはシステム共通定義のjnl_fileless_optionオペランドに'Y'を指定)のTP1/Server Baseユーザサーバに対し,ee_rpc_call_to関数のflagsにEERPC_TPNOTRANとの論理和を指定しないでサービスを要求しました。 |
|
リソースマネジャでエラーが発生したため,トランザクションブランチを開始できません。 |
|
非トランザクショナルRPC(flagsにEERPC_TPNOTRANを指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1modeオペランドまたはrpc_reply_tp1mode_downオペランド設定値がNの場合,サーバ側のトランザクションがコミットできませんでした。 |
|
非トランザクショナルRPC(flagsにEERPC_TPNOTRANを指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1mode_downオペランド設定値がJの場合,サーバ側のトランザクションがロールバックしました。 |
注意事項
-
EERPC_BINDING_TBL構造体にホスト名とノード識別子を同時に指定した場合,ホスト名の指定が有効になり,ノード識別子の指定は無視されます。
-
EERPC_BINDING_TBL構造体にホスト名,ノード識別子ともに0を指定した場合,ee_rpc_call関数と同様に動作します。
-
EERPC_BINDING_TBL構造体のflagsにEERPC_SCDPORTを指定し,ソケット受信型(ユーザサービス定義のreceive_fromオペランドにsocketを指定)のTP1/Server Baseユーザサーバへサービスを要求した場合,ee_rpc_call_to関数はEERPCER_SERVICE_NOT_UPでエラーリターンします。
-
EERPC_BINDING_TBL構造体のflagsにEERPC_SCDPORTを指定して,ee_rpc_call_to関数を呼び出した場合,rpc_retryオペランドは無効になります。
-
RPC関連定義のname_useオペランドにNを設定して,ee_rpc_call_to関数を呼び出した場合,EERPCER_CONDITIONでエラーリターンします。
-
リモート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_OUT,EERPCER_PARAM_OUT_LEN,EERPCER_PARAM_FLAGS,EERPCER_MESSAGE_TOO_BIG
-
その他の注意事項は,ee_rpc_call関数の注意事項を参照してください。