3.5.1 TP1/Clientのリモートプロシジャコール
CUPから,TP1/Client/WまたはTP1/Client/Pのライブラリ関数を使って,OpenTP1のサーバUAP(SPP)へサービスを要求します。
TP1/Client/WまたはTP1/Client/Pを使用する場合は,CUPからトランザクションを開始することもできます。
TP1/Client/WまたはTP1/Client/PとOpenTP1との通信を次の図に示します。
Javaアプレット,Javaアプリケーション,またはJavaサーブレットからは,TP1/Client/Jのクラスライブラリを使って,OpenTP1のサーバUAP(SPP)へサービスを要求します。
TP1/Client/JとOpenTP1との通信を次の図に示します。
(1) OpenTP1の定義が必要なTP1/Clientの機能
TP1/Client/WまたはTP1/Client/Pで次に示す機能を使う場合,サーバとなるOpenTP1にはクライアントサービス定義が必要です。
-
CUPからトランザクションを開始する場合
クライアントサービス定義を作成したOpenTP1では,TP1/Client/WまたはTP1/Client/Pから開始したトランザクションを管理するシステムサービスが起動します。このシステムサービスを,クライアントサービスといいます。起動したクライアントサービスは,TP1/ClientのCUPが開始したトランザクションを管理します。
-
常設コネクションを使用する場合
クライアントサービス定義を作成したOpenTP1では,TP1/Client/WまたはTP1/Client/Pとの間に常設コネクションを接続するためのシステムサービスが起動します。このシステムサービスを,クライアント拡張サービスといいます。起動したクライアント拡張サービスは,TP1/ClientのCUPとの間に常設コネクションを確立します。
また,TP1/Client/WまたはTP1/Client/PでリモートAPI機能を使用する場合や,TP1/Client/JでOpenTP1のSPPへサービスを要求する場合には,OpenTP1側にrapリスナーサービス定義が必要です。
(2) サーバの開始をTP1/Clientへ通知
OpenTP1のサーバUAPから,TP1/Client/WまたはTP1/Client/Pのアプリケーションプログラム(CUP)へUAPが開始したことを通知できます。CUPへは,dc_rpc_cltsend関数でデータを送って,サーバUAPの開始を通知します。この機能を使って,サーバの起動完了を一斉にクライアントへ知らせることができます。
dc_rpc_cltsend関数で通知したデータは,CUPのdc_clt_chained_accept_notification関数,またはdc_clt_accept_notification関数で受け取ります。CUPがデータを受け取ることで,TP1/Client/WまたはTP1/Client/Pはサーバが稼働中であることがわかります。その後,CUPからサーバへサービスを要求します。dc_clt_chained_accept_notification関数,およびdc_clt_accept_notification関数については,マニュアル「OpenTP1 クライアント使用の手引 TP1/Client/W,TP1/Client/P編」を参照してください。
OpenTP1のサーバUAPからTP1/Client/WまたはTP1/Client/PのCUPへの通信を次の図に示します。
(3) ソケット用ファイル記述子の見積もり計算式
トランザクショナルRPC実行プロセス(clttrnd)のソケット用ファイル記述子の最大数は,ユーザサービスデフォルト定義のmax_socket_descriptorsオペランドに指定します。
トランザクショナルRPC実行プロセスのソケット用ファイル記述子の最大数の計算式を次に示します。
↑(トランザクショナルRPC実行プロセスが通信するUAPプロセス+1 +システムサービスプロセス数)/0.8↑
- (凡例)
-
↑↑:小数点以下を切り上げます。
なお,ここに指定した値は,すべてのUAPおよび一部のシステムサーバにも有効になりますので注意してください。