Hitachi

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


1.2.3 メッセージを処理するUAP(MHP)

メッセージ送受信で使うUAPをメッセージ処理プログラムMHP)といいます。MHPを使うと,MCFと接続されている他システムとメッセージ送受信形態で通信できます。メッセージ送受信については,「3.6 メッセージ送受信」を参照してください。

MHPでは,OpenTP1のメッセージ送受信機能の関数を使えます。また,MHPの処理からRPCを使ってSPPのサービスを要求できます。

MHPは,同じノードにMCFがあることが前提です。

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

図1‒13 MHPの概要

[図データ]

〈この項の構成〉

(1) MHPの構成

MHPは,SPPと同様にメイン関数とサービス関数から構成されます。

MCFで受信したメッセージにあるアプリケーション名によってスケジュールされるアプリケーションを,サービス関数(COBOL言語の場合はサービスプログラム)として作成します。このサービス関数を複数作成して,メイン関数(COBOL言語の場合はメインプログラム)で一つの実行形式ファイルにまとめます。そして,一つのメイン関数と複数のサービス関数から構成されるMHPの実行形式ファイルを,サービスグループとしてOpenTP1に定義します。

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

注※

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

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

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

[図データ]

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

[図データ]

(2) MHPの開始

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

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

OpenTP1を開始する前に,OpenTP1と一緒に開始する指定をしておきます。ユーザサービス構成定義のdcsvstart定義コマンドに,開始するMHPのユーザサーバ名を指定します。

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

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

MHPはメイン関数から開始します。メイン関数で呼び出す,MHPのサービス開始の関数(dc_mcf_mainloop関数【CBLDCMCF('MAINLOOP')】)が正常に実行されたことで,メッセージを受信できる状態になります。なお,サービス開始の関数が呼び出される前にMHPが異常終了した場合,該当するユーザサービス定義(またはユーザサービスデフォルト定義)のholdオペランドおよびterm_watch_timeオペランドの指定値に従って処理します。

(3) MHPの稼働中

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

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

(a) メッセージを処理するMHPの業務の開始

MCFでメッセージを受信したあとに,該当するMHPのプロセスが起動されます。MHPはメッセージの先頭セグメントにあるアプリケーション名でスケジュールされます。OpenTP1内でUAPのサービスを認識するサービス名と,アプリケーション名は,MCFアプリケーション定義で対応付けます。

ほかのUAP(MHPまたはSPP)からdc_mcf_execap関数【CBLDCMCF('EXECAP ')】でMHPを起動させた場合には,次の2とおりの開始方法があります。

  • dc_mcf_execap関数を呼び出したUAPが正常終了(トランザクションがコミット)してから開始。

  • UAPがdc_mcf_execap関数を呼び出した直後から,設定した秒数が過ぎたあと,または設定した時刻になったら開始。

(b) MCFイベント処理用MHPの業務の開始

MCFの障害やMHPの障害が起こった場合,MCFからエラー内容のデータを通知するためにメッセージが出力されます。これをMCFイベントといいます。MCFイベントが通知された場合に備えて,MCFイベント処理用MHPを作成しておくと,独自の障害対策処理ができます。MCFイベント処理用MHPは,通知されるMCFイベントのイベントコードに対応させて作成します。該当するMCFイベントが通知されたときに,MCFイベント処理用MHPが起動されます。MCFイベントについては,「3.10 MCFイベント」を参照してください。

(4) MHPの終了

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

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

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

(5) MHPの処理の概要

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

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

図1‒16 MHPの処理の概要(C言語の例)

[図データ]

(6) 注意事項

MHPのサービス関数をRPCで呼び出すことはできません。