ネームサービスを使用したRPCは,JavaアプリケーションおよびJavaサーブレットから実行できるサービス要求です。Javaアプレットのセキュリティの制約があるため,Javaアプレットからは実行できません。
ネームサービスを使用したRPCの流れと,RPCごとにサービス要求先スケジューラを分散させる場合の定義について説明します。
ネームサービスを使用したRPCを行う場合は,TP1/Client/J環境定義にdcnamuse=Yを指定します。さらに,TP1/Client/J環境定義にdchostオペランド,およびdcnamportオペランドを指定するか,またはsetDchostメソッドでnamサーバを指定します。また,rpcCallメソッドを呼び出す前にはrpcOpenメソッドを呼び出す必要があります。CUPの最後にはrpcCloseメソッドを呼び出す必要があります。
ネームサービスを使用した場合のサービス要求の流れを次の図に示します。
図2-7 ネームサービスを使用した場合のサービス要求の流れ
なお,この機能の使用時は,ソケット受信型SPPに対してRPCを発行できません。また,TP1/Client/J環境定義のdccltrpcmaxmsgsizeオペランドに2以上を指定した場合,ネームサービスを使用したRPCは,システム共通定義のrpc_max_message_sizeオペランドをサポートするTP1/Server上で稼働しているサービスの情報だけを取得します。サービスの入力パラメタ長が,サービス要求先のシステム共通定義のrpc_max_message_sizeオペランドの値を超える場合もサービス要求は実行されます。システム共通定義のrpc_max_message_sizeオペランドをサポートしないTP1/Server上のSPPに対してはRPCを発行できません。
ネームサービスを使用したRPCでは,サービス要求先スケジューラの情報をネームサーバからキャッシュに格納し,キャッシュの情報を参照してRPCごとにサービス要求先スケジューラを分散させることができます。RPCごとにサービス要求先スケジューラを分散させる場合のTP1/Client/J側,TP1/Server側の関連する定義について説明します。
RPCごとにサービス要求先スケジューラを分散させる場合は,TP1/Client/J環境定義にdccltloadbalance=Yを指定します。
これによって,TP1/Client/Jは,ネームサーバから複数のサービス要求先スケジューラの情報を取得し,負荷レベルが最も低いサービス要求先スケジューラの情報をキャッシュに格納します。キャッシュに格納されるサービス要求先スケジューラは,一つだけではなく,複数の場合もあります。
キャッシュに格納されたサービス要求先スケジューラが複数ある場合,最初のサービス要求先スケジューラは,ランダムに選択されます。RPCでのサービス要求が2度目以降の場合は,サービス要求先スケジューラの情報を取得するためにキャッシュを参照し,RPCごとにラウンドロビン方式でサービス要求先スケジューラを切り替え,分散させます。
次に示すTP1/Server側の定義のオペランドを指定すると,ネームサーバからサービス要求先スケジューラの情報を取得するときに,スケジューラの負荷情報も同時に取得します。
ネームサービスを使用したRPCでは,通信先TP1/Serverがマルチホームドホスト形態の場合に通信障害が発生することがあります。これは,CUPが存在するネットワークから,通信先TP1/Serverのシステム共通定義のmy_hostオペランドで指定したホスト名(IPアドレス)に対応するネットワークアダプタに通信できないことが原因です。
これを回避するためには,TP1/Client/J環境定義にdccltnammlthost=Yを指定します。ネットワークの構成例を次の図に二つ示し,それぞれのネットワーク構成でのTP1/Client/J環境定義のdccltnammlthostオペランドの要否を示します。
図2-8 マルチホームドホスト形態のTP1/Serverに対してRPCを行う場合の例
ネットワーク構成例2のCUPがIPアドレス4と通信するには,TP1/Client/J環境定義にdccltnammlthost=Yの指定が必要です。この指定がない場合,CUPとIPアドレス4との間では通信障害が発生します。
通信先TP1/Serverがマルチホームドホスト形態で,かつ同じTP1/Server上にサービス要求先のSPPが存在しているときは,TP1/Client/J環境定義にdccltnammlthost=Yを指定することでRPCが行えるようになります。通信先TP1/Serverのシステム共通定義のall_nodeオペランドに,CUPが接続されていないネットワーク上に存在するTP1/Serverが指定されている場合,このTP1/Server上のSPPに対してRPCを行うと通信障害が発生します。なお,通信先TP1/Serverがマルチホームドホスト形態でない場合,TP1/Client/J環境定義のdccltnammlthostオペランドの指定に関係なくRPCを行えます。