3.3.7 MHPの起動
MCFは,次に示す場合にMHPを起動させます。
-
MCFがメッセージを受信した場合
-
UAPがアプリケーションを起動する関数(dc_mcf_execap関数)を呼び出した場合
-
MCFイベントが通知された場合
-
MHPを起動させるコマンド(mcfuevtコマンド)を実行した場合
- 〈この項の構成〉
(1) メッセージ受信によるMHPの起動
MCFは,入力メッセージを基に,MHPを起動する名前(アプリケーション名)を決めます。
アプリケーション名の決定方法を次の図に示します。
アプリケーション名を決定する方法には,アプリケーション名決定ユーザオウンコーディング(UOC)を組み込まない方法と,組み込む方法の二つがあります。
(a) アプリケーション名決定UOCを組み込んでいない場合
MCFは,入力メッセージの先頭から最初に空白が現れるまでの8文字以内の文字列をアプリケーション名と見なします。OpenTP1はアプリケーション名をMHPのサービスグループ名とサービス名に変換し,該当するMHPを起動します。先頭から9文字目まで空白の場合は,アプリケーション名不正としてエラーとなります。
アプリケーション名と,サービスグループ名およびサービス名の対応は,MCFアプリケーション定義のアプリケーション属性定義で指定します。
(b) アプリケーション名決定UOCを組み込んでいる場合
MCFは,UOCを呼び,そのUOCが設定した名称をアプリケーション名と見なします。OpenTP1はアプリケーション名をMHPのサービスグループ名とサービス名に変換し,該当するMHPを起動します。
アプリケーション名と,サービスグループ名・サービス名の対応は,MCFアプリケーション定義のアプリケーション属性定義で指定します。なお,UOCを組み込んでいてもUOCでアプリケーション名を設定しなければ,入力メッセージの先頭から最初に空白が現れるまでの8文字以内の文字列をアプリケーション名と見なします。先頭から9文字目まで空白の場合は,アプリケーション名不正としてエラーとなります。
(2) UAPからの関数発行によるMHPの起動
MHPやSPPから関数(dc_mcf_execap関数)を呼び出して,ほかのMHPを起動できます。MHPやSPPからMHPを起動する機能を,アプリケーション起動機能といいます。
起動されるMHPは,起動要求元のMHPやSPPが正常終了したあと,または指定された時間が経過したあとに,アプリケーション起動プロセスが起動します。
MHPから関数(dc_mcf_rollback関数)を呼び出してトランザクションをロールバックするとき,関数の引数にリトライを指定すると,ロールバックしたMHPを再び起動して処理を再実行します。この場合もアプリケーション起動プロセスが起動します。
このように,UAPから関数を呼び出してアプリケーションを起動,または再起動するときには,アプリケーション起動プロセスを起動する必要があります。MCF通信プロセスとは別に,アプリケーション起動プロセスのMCF通信構成定義を作成してください。アプリケーション起動プロセスでプロトコルに依存しない処理をすることで,MCF通信プロセスの負荷を軽減します。
起動要求元のMHPやSPPがMCFにデータを渡す,MCF内部の論理的な通信路を内部通信路といい,アプリケーション起動環境定義で指定します。MCFが,起動されるアプリケーションにデータを渡すときにも,内部通信路を使用します。
(3) MCFイベントによるMHPの起動
エラーや障害の発生,コネクションの確立や解放などを通知するためのメッセージをMCFイベントといいます。このMCFイベントに対応して起動させるMHPを作成できます。MCFイベントに対応して起動させるMHPを,MCFイベント処理用MHPといいます。MCFイベント処理用MHPを作成しておくと,オンライン中に発生した現象を特定の端末に通知するなど,ユーザ独自の対応がとれます。
(a) MCFイベントの種類
MCFイベントには,エラーや障害発生などのエラーイベントと,コネクションの確立や解放などプロトコルに依存する通信イベントの2種類があります。
2種類のイベントには,発生した現象の内容に応じてMCFイベントコードがあります。MCFイベントコードと,MCFイベント処理用MHPのサービスグループ名とサービス名は,アプリケーション属性定義で対応づけます。各MCFイベントに対応したMHPのサービスを,アプリケーション起動プロセス,またはMCF通信プロセスが起動します。エラーイベント用のMCFイベント処理用MHPはアプリケーション起動プロセスまたはMCF通信プロセスで,通信イベント用のMCFイベント処理用MHPはMCF通信プロセスで起動します。エラーイベント用のMCFイベント処理用MHPを使用する場合は,アプリケーション起動プロセス用のMCF通信構成定義も作成してください。
通信イベントが障害となった場合に,エラーイベントを通知できます。この通知の有無はアプリケーション属性定義のerrevtオペランドで指定できます。ただし,エラーイベントの障害によるエラーイベントは通知できません。
MCFイベントの一覧を次の表に示します。MCFイベントについては,マニュアル「OpenTP1 プログラム作成の手引」および「OpenTP1 プロトコル」の該当するプロトコル編を参照してください。
MCFイベント名 |
MCFイベントコード |
MCFイベントが通知された原因 |
MCFイベント処理用MHPで実行する処理の例 |
---|---|---|---|
不正アプリケーション名検出通知イベント |
ERREVT1 |
メッセージのアプリケーション名がMCFアプリケーション定義にありません。 |
該当するアプリケーション名がなかったことを知らせます。 受信したメッセージが問い合わせメッセージの場合は,応答メッセージを送信できます。 |
メッセージ廃棄通知イベント |
ERREVT2 |
次に示す理由で,MCFで受信した入力キューのメッセージ,または即時指定のアプリケーション起動機能によって入力キューに入力されたメッセージを廃棄しました。
|
メッセージを廃棄したことを知らせます。 受信したメッセージが問い合わせメッセージの場合は,応答メッセージを送信できます。 |
UAP異常終了通知イベント |
ERREVT3 |
MHPで呼び出すdc_mcf_receive関数にセグメントを渡したあとで,MHPが異常終了,またはロールバック※しました。 |
UAPが異常終了,またはロールバックしたことを知らせます。 受信したメッセージが問い合わせメッセージの場合は,応答メッセージを送信できます。 |
タイマ起動メッセージ廃棄通知イベント |
ERREVT4 |
タイマ指定のアプリケーション起動機能によって入力キューに入力されたメッセージをERREVT2に示す理由で破棄しました。 |
メッセージを廃棄したことを知らせます。 受信したメッセージが問い合わせメッセージの場合は,応答メッセージを送信できます。 |
未処理送信メッセージ廃棄通知イベント |
ERREVTA |
次に示す理由で,UAPから送信した未処理送信メッセージを廃棄しました。
|
未処理送信メッセージを廃棄したことを知らせます。 受信した未処理送信メッセージは,任意のファイルへ退避します。 |
送信障害通知イベント |
SERREVT |
メッセージを送信する途中で,通信プロトコルの障害が起こりました。 |
通信プロトコルの障害でメッセージを送信できなかったことを知らせます。 |
送信完了通知イベント |
SCMPEVT |
相手システムへ,メッセージを正常に送信できました。 |
相手システムまでメッセージを正常に送信できたことを知らせます。 |
障害通知イベント |
CERREVT(VERREVT) |
通信管理プログラムで,コネクション障害,または論理端末障害が起こりました。コネクション確立再試行を定義している場合は,通知されません。 |
コネクション,または論理端末に障害が起こったことを知らせます。 |
状態通知イベント |
COPNEVT(VOPNEVT) |
コネクションが確立しました。 |
メッセージを送受信できることを知らせます。 |
CCLSEVT(VCLSEVT) |
コネクションが正常に解放されました。 |
メッセージを送受信できないことを知らせます。 |
(b) 通信イベント障害時のエラーイベント通知
通信イベント障害時のエラーイベント通知は,通信イベントの障害をエラーイベントによってユーザに通知する機能です。通信イベント障害時のエラーイベント通知を使用することによって通信イベントの障害の回復手段にMCFイベント処理用MHPを使用でき,通信イベントのメッセージは第2セグメントで受信できます。
通信イベント障害時のエラーイベント通知の機能を使用するには,アプリケーション属性定義の-nオプションのerrevtオペランドにyesを指定します。
次の図にCOPNEVT障害時のERREVT2通知の概要を示します。
-
COPNEVTが入力キューの障害によって破棄される。
-
制御がMCFに戻り,ERREVT2が通知されて,ERREVT2のMCFイベント処理用MHPがスケジュールされる。
-
ERREVT2のMCFイベント情報を先頭セグメントで受信できる。障害となったCOPNEVTのMCFイベント情報を第2セグメントで受信できる。受信したMCFイベント情報を参照し,COPNEVTのMCFイベント処理用MHPで実行する予定であった処理を,ERREVT2のMCFイベント処理用MHPで実行することによって,障害に対処できる。
(4) コマンドを使用したMHPの起動
コマンドを入力して,MHPを起動できます。メッセージ受信を契機に起動するMHPでも,コマンドで直接MHPを起動することで他システムへのメッセージ送信ができるようになります。
起動できるMHPは,非応答型(noans型)だけです。コマンドで起動するMHPには,MCFアプリケーション定義のアプリケーション属性定義でnoans型を指定してください。
(a) コマンドで起動するMHPの定義
コマンドで起動するMHPのアプリケーション名は,UCMDEVTとします。MCFアプリケーション定義のアプリケーション属性定義mcfaalcapコマンドの-nオプションに,次の値を指定しておきます。
-
nameオペランド:UCMDEVT
-
kindオペランド:user(または省略)
-
typeオペランド:noans(または省略)
(b) MHPの起動方法
MHPを起動するときは,mcfuevtコマンドを実行します。mcfuevtコマンドの引数として,MCF通信プロセス識別子とMHPに渡す入力メッセージを指定します。
UCMDEVTを定義していない場合にmcfuevtコマンドを実行したときは,mcfuevtコマンドはエラーリターンします。このとき,ERREVT1は通知されません。
コマンドで起動するMHPは通信プロトコルに依存しないので,mcfuevtコマンドに指定するMCF通信プロセスには,アプリケーション起動プロセスを指定することをお勧めします。
(5) MCFがMHPを起動させる要因
MCFがMHPを起動させる要因を次の図に示します。