3.8.1 アプリケーションプログラムの起動
MHPまたはSPPから,MHPを起動できます。アプリケーションプログラムを起動する関数(dc_mcf_execap関数【CBLDCMCF('EXECAP ')】)に,起動させたいMHPのアプリケーション名と,引き渡すメッセージのセグメントを設定します。
- 〈この項の構成〉
(1) アプリケーションプログラムを起動するときに使用するMCFのプロセス
アプリケーション起動機能(dc_mcf_execap関数)を使う場合,メッセージ送受信の関数(dc_mcf_receive関数,dc_mcf_send関数など)とは別のMCFのプロセスを使います。メッセージ送受信で使うMCFのプロセスをMCF通信プロセス,dc_mcf_execap関数で使うMCFのプロセスをアプリケーション起動プロセスといいます。アプリケーション起動プロセスは,通信プロトコルには依存しません。
(2) アプリケーションプログラムを起動する方法
dc_mcf_execap関数でアプリケーションプログラムを起動できるのは,MHPとSPPです。dc_mcf_execap関数を呼び出すと,MHPを起動できます。
dc_mcf_execap関数で送信したセグメントは,MHPで呼び出すdc_mcf_receive関数で受け取ります。起動できるのは,dc_mcf_execap関数を呼び出したUAPと同じノードにあるMHPだけです。他ノードのMHPは,dc_mcf_execap関数で起動できません。※
(3) 起動するタイミング
起動させるMHPが実際に起動するのは,次の場合です。
-
MHPからdc_mcf_execap関数を呼び出した場合
MHPのトランザクションがコミット(MHPが正常に終了,またはdc_mcf_commit関数が正常に終了)してから,起動します。
-
SPPからdc_mcf_execap関数を呼び出した場合
トランザクションがコミットとなったときに,起動します。
SPPからdc_mcf_execap関数を呼び出す場合は,SPPがトランザクションとして処理していることと,そのSPPのメイン関数でdc_mcf_open関数を呼び出していることが前提です。
(4) アプリケーションプログラムの起動の種類
MHPを起動する方法は,次の2種類があります。
(b) タイマ起動
dc_mcf_execap関数を呼び出した直後から,設定した時間に起動します。タイマ起動には,次の2とおりの指定があります。
-
dc_mcf_execap関数を呼び出した直後から,設定した秒数が過ぎてから起動します。設定した秒数が過ぎてもdc_mcf_execap関数を呼び出したUAPの処理がコミットしていない場合は,コミットを待ってからすぐに起動します。
- 注意事項
-
時間監視の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間監視間隔で起動するかどうかを監視しています。このため,設定した経過時間と実際に起動する時間には秒単位の誤差が生じます。そのため,タイミングによっては,設定した監視時間よりも短い時間で起動することがあります。監視時間が小さくなるほど,誤差の影響を受けやすくなりますので,監視時間は3(単位:秒)以上の値の設定を推奨します。
-
dc_mcf_execap関数を呼び出したあと,設定した時刻になったときに起動します。dc_mcf_execap関数を呼び出した時刻が,関数に設定した時刻を過ぎていた場合に,その場で即時に起動するか,翌日の指定時刻まで持ち越すかを指定します。この指定は,MCFマネジャ定義UAP共通定義に指定します。
アプリケーション起動機能を使用する場合,起動要求を行ってからUAPの開始時刻までの間に夏時間と標準時間の移行が生じたときは,起動要求した時間帯の時刻でUAPが起動されます。
- 注意事項
-
時間監視の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間監視間隔で起動するかどうかを監視しています。このため,設定した時刻と実際に起動する時刻には秒単位の誤差が生じます。
(5) アプリケーションプログラムの起動前に障害が起こった場合のエラーイベント
dc_mcf_execap関数を呼び出して,MHPを起動するまでに障害が起こった場合は,次のMCFイベントが通知されます。
MCFイベントについては,「3.10 MCFイベント」を参照してください。
アプリケーションプログラムの起動を次の図に示します。
|
(6) システム定義との関連
(a) MCF通信構成定義との関係
dc_mcf_execap関数を呼び出すUAPがあるノードには,通常の実行プロセスのほかに,アプリケーション起動プロセスが必要になります。アプリケーション起動プロセスはMCF通信構成定義で定義します。アプリケーションプログラムを起動させる関数を使うOpenTP1では,MCF通信構成定義のアプリケーション起動定義を作成しておいてください。
アプリケーション起動定義では,アプリケーション起動環境定義(mcftpsvr)で内部通信路を定義し,アプリケーション起動用論理端末定義(mcftalcle)で論理端末を定義します。
内部通信路や論理端末は複数のアプリケーションで共用できるので,1対1で対応づける必要はありません。
(b) MCFアプリケーション定義との関係
MCFアプリケーション定義のアプリケーション属性定義(mcfaalcap)のtypeオペランドに指定したアプリケーションの型によって,アプリケーション起動の使い方が決まります。
-
応答型(ans型)のアプリケーションを起動させる場合
応答メッセージを送信できるMHPは,応答型(ans型)を指定した場合だけです。問い合わせメッセージを受信したMHPからans型のアプリケーションを起動した場合は,応答権が移動します。そのため,ans型のアプリケーションは一度だけしか起動できません。さらに,いったんans型のアプリケーションを起動させたMHPからは,応答メッセージは送信できません。また,応答メッセージをすでに送信したMHPからは,ans型のアプリケーションを起動できません。
SPPからans型のアプリケーションを起動できません。
-
非応答型(noans型)のアプリケーションを起動させる場合
noans型のアプリケーションは,一つのトランザクションから複数回起動させることができます。
-
継続問い合わせ応答型(cont型)のアプリケーションを起動させる場合
cont型のアプリケーションを起動できるのは,継続問い合わせ応答処理中のMHPだけです。この場合,即時起動だけで,タイマ起動はできません。継続問い合わせ応答処理中のMHPからdc_mcf_execap関数を呼び出す場合,アプリケーション起動できるcont型のアプリケーションは一つだけです。また,cont型のアプリケーションを起動したMHPでは,継続応答権が移動しているので,dc_mcf_reply関数は呼び出せません。また,dc_mcf_contend関数も呼び出せません。
SPPからcont型のアプリケーションを起動できません。
(c) MCFマネジャ定義との関係
アプリケーションを起動する順序をUAPからの関数の呼び出し順にするか,トランザクションのコミット順にするかは,MCFマネジャ定義のUAP共通定義(mcfmuap -c)のorderオペランドで指定します。
トランザクションのコミットに時間が掛かった場合,同じ論理端末を使用するほかのアプリケーションの起動を待ち合わせるため,起動順序は,トランザクションのコミット順(commitを指定)を推奨します。
(d) UAPとアプリケーション起動プロセスとの関連づけ
dc_mcf_execap関数を呼び出すUAPとアプリケーション起動プロセス間で定義する内容を関連づける必要があります。
UAPとアプリケーション起動プロセスとの関連づけを以降の図に示します。
-
MHPから非応答型のアプリケーションを起動させる場合
図3‒14 MHPから非応答型のアプリケーションを起動する場合の関連づけ -
アプリケーション起動プロセスのアプリケーション環境定義のアプリケーション起動識別子(mcfaenv -p)に,MCF環境定義のアプリケーション起動識別子(mcftenv -s)を指定します。
-
アプリケーション起動プロセスのアプリケーション属性定義の論理端末名称(mcfaalcap -n lname)に,アプリケーション起動用論理端末定義の論理端末名称(mcftalcle -l)を指定します。
-
-
MHPから応答型または継続問い合わせ応答型のアプリケーションを起動させる場合
図3‒15 MHPから応答型または継続問い合わせ応答型のアプリケーションを起動する場合の関連づけ -
アプリケーション起動プロセスのアプリケーション環境定義のアプリケーション起動識別子(mcfaenv -p)に,MCF環境定義のアプリケーション起動識別子(mcftenv -s)を指定します。
-
アプリケーション起動プロセスのアプリケーション属性定義の内部通信路名(mcfaalcap -n cname)に,アプリケーション起動環境定義の内部通信路名(mcftpsvr -c)を指定します。
-
-
SPPから非応答型のアプリケーションを起動させる場合
図3‒16 SPPから非応答型のアプリケーションを起動する場合の関連づけ -
ユーザサービス定義のMCFマネジャ識別子(mcf_mgridオペランド)に,MCF環境定義のMCFマネジャプロセス識別子(mcftenv -m)を指定します。
-
アプリケーション起動プロセスのアプリケーション環境定義のアプリケーション起動識別子(mcfaenv -p)とユーザサービス定義のアプリケーション起動識別子(mcf_psv_idオペランド)に,MCF環境定義のアプリケーション起動識別子(mcftenv -s)を指定します。
-
アプリケーション起動プロセスのアプリケーション属性定義の論理端末名称(mcfaalcap -n lname)に,アプリケーション起動用論理端末定義の論理端末名称(mcftalcle -l)を指定します。
-
(7) 起動させるMHPに渡す,入力元論理端末名称
MHPからdc_mcf_execap関数でMHPを起動する場合,起動されたMHPで受け取るメッセージ入力元の論理端末名称は,最初に受信したメッセージ中の名称になります。さらに,そのMHPからdc_mcf_execap関数を呼び出した場合も,受け取るメッセージ入力元の論理端末名称は,最初にメッセージを受信したときの名称が引き渡されます。
SPPからdc_mcf_execap関数でMHPを起動する場合,起動されたMHPで受け取るメッセージ入力元の論理端末名称は「*」となります。さらに,そのMHPからdc_mcf_execap関数を呼び出した場合も,受け取るメッセージ入力元の論理端末名称は,「*」となります。
アプリケーションプログラムの起動形態とtypeオペランドの指定を以降の図で示します。
|
|
|
|
(8) TP1/Message Control(MCF)の再開始(リラン)時のタイマ起動の扱い
タイマ起動の時間待ちの間に障害が起こって,OpenTP1を再開始(リラン)した場合の扱いについて説明します。再開始(リラン)後にタイマ起動を引き継げるのは,ディスクキューを使っている場合だけです。再開始(リラン)した場合にタイマ起動をするdc_mcf_execap関数の扱いは次のとおりです。
(a) タイマ起動の引き継ぎの定義
MCF通信構成定義mcftpsvr定義コマンドの-oオプションにreruntm=yesと指定した場合は,再開始(リラン)する前のタイマ起動メッセージを引き継ぎます。dc_mcf_execap関数に設定した時間を過ぎていた場合は,即時起動で引き継ぎます。時間を過ぎていない場合は,時間が来るまで待ってから起動します。
reruntm=noと指定した場合は,再開始(リラン)後にはタイマ起動を引き継ぎません。この場合は,もう一度UAPからタイマ起動のdc_mcf_execap関数を呼び出してください。
(b) UOCでタイマ起動を引き継ぐ条件の変更
タイマ起動を引き継ぐ場合,UOCでタイマ起動を引き継ぐ条件を変更できます。このUOCをタイマ起動引き継ぎ決定UOCといいます。タイマ起動引き継ぎ決定UOCを使う場合は,MCF通信構成定義mcftpsvr定義コマンドの-oオプションにreruntm=yesと指定しておいてください。
タイマ起動引き継ぎ決定UOCについては,「3.9.2 タイマ起動引き継ぎ決定UOC」を参照してください。