Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成の手引


1.2.2 サービスを提供するUAP(SPP)

要求されたサービスを処理するUAPを,サービス提供プログラム(SPP)といいます。SPPはOpenTP1が稼働している間,クライアントUAPから要求されたサービスを処理します。クライアントUAPからは関数呼び出しと同様の方法で,SPPのサービスを要求します。SPPがどのノードにあるかは,クライアントUAPで意識する必要はありません。

SPPは,サービスを要求されてから業務を開始します。サービスを要求されない間は,要求されるのを待っている状態となります。

SPPでは,OpenTP1のノードにあるユーザファイルへアクセスして,サーバの業務をします。OpenTP1専用のファイルへライブラリ関数でアクセスしたり,ORACLEなどのDBMSへSQL文でアクセスしたりできます。

SPPからさらに別のSPPへサービスを要求して,業務処理をネストさせることもできます。

SPPの概要を次の図に示します。

図1‒9 SPPの概要

[図データ]

〈この項の構成〉

(1) SPPの構成

各種クライアントUAPの要求に対応するサービスを複数作成して,SPPとして一つの実行形式ファイルにまとめます。一つ一つのサービスを,C言語の場合はサービス関数(COBOL言語の場合はサービスプログラム)といいます。SPPとして一つの実行形式ファイルにするために,複数のサービスをメイン関数(COBOL言語の場合はメインプログラム)でまとめます。そして,一つのメイン関数と複数のサービス関数から構成されるSPPの実行形式ファイルを,サービスグループとしてOpenTP1に定義します。

サービス関数動的ローディング機能は,複数のサービスを UAP共用ライブラリ化して使うため,複数のサービスをメイン関数にまとめる作業は不要です。

注※

UAP共用ライブラリ化とは,UAPのソースファイルを翻訳(コンパイル)して作成したUAPオブジェクトファイルを結合(リンケージ)して,共用ライブラリとしてまとめることです。

SPPの構成を,スタブを使う場合とサービス関数動的ローディング機能を使う場合に分けて,それぞれ以降の図に示します。

図1‒10 SPPの構成(スタブを使う場合)

[図データ]

図1‒11 SPPの構成(サービス関数動的ローディング機能を使う場合)

[図データ]

(2) SPPの開始

SPPを実行する場合,OpenTP1の開始と一緒に開始する方法と,OpenTP1の開始後に任意に開始する方法の2とおりがあります。OpenTP1の開始と一緒に開始すると,OpenTP1の開始と同時に,SPPの業務を開始できます。SPPの業務内容に応じて,開始する時期を選べます。

(a) OpenTP1の開始と一緒に開始する場合

OpenTP1を開始する前に,OpenTP1と一緒に開始する指定をしておきます。指定方法を次に示します。

  • TP1/Server Baseの場合

    ユーザサービス構成定義のdcsvstart定義コマンドに,開始するSPPのユーザサーバ名を指定します。

  • TP1/LiNKの場合

    ユーザサーバ環境を設定する操作で,開始するSPPが自動起動するように設定します。

(b) OpenTP1の開始後に任意に開始する場合

OpenTP1の開始後に任意に開始する場合は,dcsvstartコマンドの引数にSPPのユーザサーバ名を指定して実行します。

SPPのプロセスはメイン関数から開始します。メイン関数で呼び出す,SPPのサービス開始の関数(dc_rpc_mainloop関数【CBLDCRSV('MAINLOOP')】)が正常に実行されたことで,サービスを提供できる状態になります。

(3) SPPの稼働中

開始させたSPPは,メモリを効率的に使うため,事前に指定したプロセスの状態で稼働しています。開始させたSPPを常駐プロセスで稼働させる場合と,非常駐プロセスで稼働させる場合があります。常駐プロセスとした場合は,サービス要求が来るとSPPの処理を開始します。非常駐プロセスとしてある場合でも,サービス要求が来るとプロセスを自動的に起動してSPPの処理を開始します。

UAPプロセスに関する設定内容については,「1.3.5 アプリケーションプログラムの環境設定」を参照してください。

(4) SPPの終了

SPPが正常終了するのは,次に示す場合です。

上記のどちらかの事象が起こると,メイン関数で呼び出したdc_rpc_mainloop関数がリターンして,SPPは終了します。

SPPのプロセスを,killコマンドで終了させないでください。

(5) SPPの処理の概要

SPPのメイン関数では,次に示す関数を呼び出してください。

SPPでトランザクションを開始しているときは,トランザクションをコミット(同期点を取得)してから,SPPを終了させてください。

また,SPPからMCFの関数を呼び出すときは,メイン関数でMCF環境のオープン(dc_mcf_open関数CBLDCMCF('OPEN ')】)とMCF環境のクローズ(dc_mcf_close関数CBLDCMCF('CLOSE ')】)を呼び出してください。

SPPの処理の概要を次の図に示します。

図1‒12 SPPの処理の概要(C言語の例)

[図データ]