2.1.19 サービス関数とスタブの関係
SPPまたはMHPでサービス関数を作成する方法は,次の二つです。
-
スタブを使用して,該当するサービス関数を作成する方法
-
サービス関数動的ローディング機能を使用して,サービス関数を作成する方法
ここでは,上記の二つの方法について説明します。
(1) スタブを使用する場合
RPCを使ってUAP間で通信するときには,スタブが必要です。スタブとは,クライアントUAPが指定した「サービスグループ名+サービス名」とサーバUAPのサービスとを対応づけるプログラムです。
スタブではUAPの各サービスの入り口点(エントリポイント)を指定します。
エントリポイント名とは,C言語の関数名であり,COBOL言語のプログラム名または入り口名のことです。
サービス名とエントリポイント名は,1対1で対応させてください。複数のサービス名に1つのエントリポイント名を対応させることはできません。
サービス名とエントリポイント名は,ユーザサービス定義で指定しているserviceオペランドの名称と合わせてください。
スタブはサーバUAPの作成時に,サーバUAPのオブジェクトファイルと結合させます。
クライアント専用のUAPであるSUPと,オフラインの業務をするUAPには,スタブを定義して結合させる必要はありません。
スタブを使用してサービス関数を作成する方法について,SPPの場合とMHPの場合に分けてそれぞれ以降の図に示します。
|
-
RPCインタフェース定義にサービス関数のエントリポイントを指定して,スタブを生成するコマンドでスタブを生成します。
ユーザサービス定義では,サービスグループ名とサービス名を指定します。
-
実行時には,サービスを要求されたサーバUAPの実行形式ファイルでは,スタブとユーザサービス定義によって作成されたライブラリ部で,該当のサービスを検索します。その後サービスの処理をしてクライアントUAPに結果を返します。
|
-
RPCインタフェース定義にサービス関数のエントリポイントを指定して,スタブを生成するコマンドでスタブを生成します。
MCFアプリケーション定義では,アプリケーション名,サービスグループ名,およびサービス名を対応づけます。ユーザサービス定義では,サービスグループ名とサービス名を指定します。
-
実行時には,TP1/Message Controlの処理によって,MCFアプリケーション定義に基づきアプリケーション名に対応するサービス名が検索され,該当するサーバUAPを起動します。サービスを要求されたサーバUAPの実行形式ファイルでは,スタブとユーザサービス定義によって作成されたライブラリ部で,該当のサービスを検索します。その後サービスの処理をし,処理の完了をTP1/Message Controlに通知します。
(2) サービス関数動的ローディング機能を使用する場合
サービス関数動的ローディング機能を使う場合,UAPの各サービスの入り口点(エントリポイント)を指定したUAPライブラリからサービス関数を取得するため,スタブは不要です。その代わりに,サービス関数を共用ライブラリ化してUAP共用ライブラリ※を作成する必要があります。これによって,UAP共用ライブラリからサービス関数を取得できるとともに,複数のサービスをメイン関数にまとめる作業は不要になります。
- 注※
-
UAP共用ライブラリとは,UAPのソースファイルを翻訳(コンパイル)して作成したUAPオブジェクトファイルを結合(リンケージ)して,共用ライブラリとしてまとめたものです。
サービス関数動的ローディング機能を使用してサービス関数を作成する方法について,SPPの場合とMHPの場合に分けてそれぞれ以降の図に示します。
|
|
なお,サービス関数動的ローディング機能は,スタブを使ったUAPでも使用できます。この場合,スタブを使ったUAPを変更しないで,サービス関数を追加できます。
サービス関数動的ローディング機能とスタブを併用してサービス関数を作成する方法について,SPPの場合とMHPの場合に分けてそれぞれ以降の図に示します。
|
|