分散トランザクション処理機能 OpenTP1 解説

[目次][用語][索引][前へ][次へ]

3.3.7 MHPの起動

MCFは,次に示す場合にMHPを起動させます。

<この項の構成>
(1) メッセージ受信によるMHPの起動
(2) UAPからの関数発行によるMHPの起動
(3) MCFイベントによるMHPの起動
(4) コマンドを使用したMHPの起動
(5) MCFがMHPを起動させる要因

(1) メッセージ受信によるMHPの起動

MCFは,入力メッセージを基に,MHPを起動する名前(アプリケーション名)を決めます。

アプリケーション名の決定方法を次の図に示します。

図3-32 アプリケーション名の決定方法

[図データ]

アプリケーション名を決定する方法には,アプリケーション名決定ユーザオウンコーディング(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 プロトコル」の該当するプロトコル編を参照してください。

表3-5 MCFイベントの一覧

MCFイベント名 MCFイベントコード MCFイベントが通知された原因 MCFイベント処理用MHPで実行する処理の例
不正アプリケーション名検出通知イベント ERREVT1 メッセージのアプリケーション名がMCFアプリケーション定義にありません。 該当するアプリケーション名がなかったことを知らせます。
受信したメッセージが問い合わせメッセージの場合は,応答メッセージを送信できます。
メッセージ廃棄通知イベント ERREVT2 次に示す理由で,MCFで受信した入力キューのメッセージ,または即時指定のアプリケーション起動機能によって入力キューに入力されたメッセージを廃棄しました。
  • 入力キューに障害が起こりました。
  • MHPのサービス,サービスグループ,またはアプリケーションが閉塞しました。
  • MHPのサービス,サービスグループ,またはアプリケーションがセキュア状態です。
  • MHPで呼び出すdc_mcf_receive関数にセグメントを渡す前に,MHPが異常終了しました。
  • アプリケーション名に相当するMHPのサービスがありません。
  • MCFからSPPを起動できません。
  • MHPが開始されていません。
メッセージを廃棄したことを知らせます。
受信したメッセージが問い合わせメッセージの場合は,応答メッセージを送信できます。
UAP異常終了通知イベント ERREVT3 MHPで呼び出すdc_mcf_receive関数にセグメントを渡したあとで,MHPが異常終了,またはロールバックしました。 UAPが異常終了,またはロールバックしたことを知らせます。
受信したメッセージが問い合わせメッセージの場合は,応答メッセージを送信できます。
タイマ起動メッセージ廃棄通知イベント ERREVT4 タイマ指定のアプリケーション起動機能によって入力キューに入力されたメッセージをERREVT2に示す理由で破棄しました。 メッセージを廃棄したことを知らせます。
受信したメッセージが問い合わせメッセージの場合は,応答メッセージを送信できます。
未処理送信メッセージ廃棄通知イベント ERREVTA 次に示す理由で,UAPから送信した未処理送信メッセージを廃棄しました。
  • MCFの正常終了処理時に,未処理送信メッセージの滞留時間監視の時間切れ(タイムアウト)が起こりました。
  • mcftdlqleコマンドまたはdc_mcf_tdlqle関数で,出力キューが削除されました。
  • タイマ起動要求が残った状態で,dcstopコマンドが実行されました。
未処理送信メッセージを廃棄したことを知らせます。
受信した未処理送信メッセージは,任意のファイルへ退避します。
送信障害通知イベント SERREVT メッセージを送信する途中で,通信プロトコルの障害が起こりました。 通信プロトコルの障害でメッセージを送信できなかったことを知らせます。
送信完了通知イベント SCMPEVT 相手システムへ,メッセージを正常に送信できました。 相手システムまでメッセージを正常に送信できたことを知らせます。
障害通知イベント CERREVT(VERREVT) 通信管理プログラムで,コネクション障害,または論理端末障害が起こりました。コネクション確立再試行を定義している場合は,通知されません。 コネクション,または論理端末に障害が起こったことを知らせます。
状態通知イベント COPNEVT(VOPNEVT) コネクションが確立しました。 メッセージを送受信できることを知らせます。
CCLSEVT(VCLSEVT) コネクションが正常に解放されました。 メッセージを送受信できないことを知らせます。
ERREVT1,ERREVT2,ERREVT3,ERREVT4,ERREVTAはエラーイベントを示します。
SERREVT,SCMPEVT,CERREVT,COPNEVT,CCLSEVTは通信イベントを示します。
注※
MCFアプリケーション定義(mcfaalcap -g)のrecvmsgオペランドにrを指定した場合,またはdc_mcf_rollbackのactionにDCMCFRTRYもしくはDCMCFRRTNを指定した場合は除きます。

(b) 通信イベント障害時のエラーイベント通知

通信イベント障害時のエラーイベント通知は,通信イベントの障害をエラーイベントによってユーザに通知する機能です。通信イベント障害時のエラーイベント通知を使用することによって通信イベントの障害の回復手段にMCFイベント処理用MHPを使用でき,通信イベントのメッセージは第2セグメントで受信できます。

通信イベント障害時のエラーイベント通知の機能を使用するには,アプリケーション属性定義の-nオプションのerrevtオペランドにyesを指定します。

次の図にCOPNEVT障害時のERREVT2通知の概要を示します。

図3-33 COPNEVT障害時のERREVT2通知の概要

[図データ]

  1. COPNEVTが入力キューの障害によって破棄される。
  2. 制御がMCFに戻り,ERREVT2が通知されて,ERREVT2のMCFイベント処理用MHPがスケジュールされる。
  3. 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オプションに,次の値を指定しておきます。

(b) MHPの起動方法

MHPを起動するときは,mcfuevtコマンドを実行します。mcfuevtコマンドの引数として,MCF通信プロセス識別子とMHPに渡す入力メッセージを指定します。

UCMDEVTを定義していない場合にmcfuevtコマンドを実行したときは,mcfuevtコマンドはエラーリターンします。このとき,ERREVT1は通知されません。

コマンドで起動するMHPは通信プロトコルに依存しないので,mcfuevtコマンドに指定するMCF通信プロセスには,アプリケーション起動プロセスを指定することをお勧めします。

(5) MCFがMHPを起動させる要因

MCFがMHPを起動させる要因を次の図に示します。

図3-34 MCFがMHPを起動させる要因

[図データ]