2.4.4 継続問い合わせ応答形態のメッセージ
TP1/NET/XMAP3では,継続問い合わせ応答型(cont)アプリケーションに発生したメッセージによって継続問い合わせ応答の開始を認識します。
起動されたUAPでは,receive関数を呼び出して問い合わせメッセージを受け取ります。また,UAPからreply関数によって指定されたメッセージを応答メッセージとして出力キューに登録します。TP1/NET/XMAP3は,この応答メッセージを取り出して表示印刷サービスに送信します。
継続問い合わせ応答は,UAPがcontend関数(データ操作言語:DISABLE文)を呼び出すか,または運用コマンド(mcftendct)が入力されることによって終了します。
継続問い合わせ応答形態を,次の図に示します。
|
以降,継続問い合わせ応答形態の詳細を説明します。
- 〈この項の構成〉
(1) 継続問い合わせ応答の開始
継続問い合わせ応答は,継続問い合わせ応答中でないときに表示印刷サービスから問い合わせメッセージを受信し,継続問い合わせ応答型のアプリケーションを起動することで開始します。
問い合わせ応答と異なり,継続問い合わせ応答では表示印刷サービスへの応答メッセージの送信が完了しても継続問い合わせ応答を終了しません。
継続問い合わせ応答の開始から継続問い合わせ応答の終了までを継続問い合わせ応答中と呼びます。また,継続問い合わせ応答中にUAPを起動してから送信メッセージを読み出すまでを継続問い合わせ応答のUAP実行中と呼びます。
(2) 次起動アプリケーションの予約
応答メッセージ送信要求時,次に起動する継続問い合わせ応答型のアプリケーション(次起動アプリケーション)を予約できます。
次起動アプリケーションの指定を省略した場合,実行中のアプリケーション名が指定されたものとします。ただし,エラーイベントで次に起動するアプリケーション名の指定を省略した場合は,継続問い合わせ応答を終了します。詳細については,「2.4.4(6) エラーイベント」を参照してください。
次起動アプリケーションの予約を次の図に示します。
使用方法の詳細については,「3. C言語のライブラリ関数」または「4. COBOL-UAP作成用プログラムインタフェース」を参照してください。
|
(3) 継続問い合わせ応答中のアプリケーション起動
継続問い合わせ応答中にアプリケーション起動要求をする場合,非応答型または継続問い合わせ応答型のアプリケーション名を指定できます。ただし,継続問い合わせ応答型のアプリケーションを起動できるのは一つのサービスで1回だけです。
継続問い合わせ応答型のアプリケーションを起動した場合,そのサービスでは応答メッセージを送信できません。また,継続問い合わせ応答の終了要求もできません。起動先の継続問い合わせ応答型アプリケーションで応答メッセージを送信したり,継続問い合わせ応答の終了要求をしてください。
使用方法の詳細については,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。
(4) 継続問い合わせ応答用一時記憶データ
継続問い合わせ応答用一時記憶データ(以降,一時記憶データと呼びます)を使用して,次起動アプリケーションへデータの引き継ぎができます。データの引き継ぎを,次の図に示します。
|
一時記憶データを格納する継続問い合わせ応答用一時記憶領域は論理端末ごとに確保するため,複数の論理端末で同時に一つのアプリケーションを使用して継続問い合わせ応答ができます。論理端末と一時記憶データの関係を次の図に示します。
|
(a) 継続問い合わせ応答用一時記憶領域の確保
一時記憶データを格納する継続問い合わせ応答用一時記憶領域は,更新用領域と回復用領域の2面を共有メモリに確保します。
アプリケーション属性定義(mcfaalcap)でアプリケーションごとに継続問い合わせ応答用一時記憶領域のサイズを定義できます。
ただし,実際に確保する継続問い合わせ応答用一時記憶領域のサイズは,継続問い合わせ応答を開始したあと最初に一時記憶データの更新要求をしたアプリケーションのアプリケーション属性定義(mcfaalcap -n)のtempsizeオペランドの指定値となります。確保済みの継続問い合わせ応答用一時記憶領域のサイズが,一時記憶データの更新要求を行う場合のデータ長よりも小さいとき,実行中のアプリケーションのアプリケーション属性定義(mcfaalcap -n)のtempsizeオペランドの指定値のサイズで,継続問い合わせ応答用一時記憶領域を再確保します。したがって,継続問い合わせ応答で使用する各アプリケーションの更新する一時記憶データの領域長が異なる場合,最初に起動するアプリケーションのアプリケーション属性定義(mcfaalcap -n)のtempsizeオペランドにデータ長の最大値を指定すると,途中で再確保をしないため,性能が向上します。
(b) 一時記憶データの受け渡し
一時記憶データの受け渡しには「受け取り要求」と「更新要求」があります。
-
一時記憶データの受け取り要求
指定したデータ長の一時記憶データを受け取れます。初期値は,アプリケーション属性定義(mcfaalcap -n)のtempsizeオペランドで指定したサイズ分の初期値(00)16が渡されます。指定した受け取り領域長が一時記憶データより小さい場合,指定した領域長の長さだけ受け取り,残りは切り捨てられます。
-
一時記憶データの更新要求
指定したデータ長のデータを用いて一時記憶データを更新します。最大でアプリケーション属性定義(mcfaalcap -n)のtempsizeオペランドで指定した領域長の更新ができます。
使用方法の詳細については,「3. C言語のライブラリ関数」または「4. COBOL-UAP作成用プログラムインタフェース」を参照してください。
(c) 継続問い合わせ応答用一時記憶領域の解放
継続問い合わせ応答を終了すると継続問い合わせ応答用一時記憶領域を解放します。
(d) 障害発生時の一時記憶データ
障害発生時の一時記憶データの扱いについて次に示します。
-
OpenTP1システム障害による全面回復の場合
一時記憶データは失われます。
-
UAP障害による部分回復の場合
異常終了したUAPでの一時記憶データの更新要求が取り消され,異常終了したUAPが一時記憶データの受け取り要求を行ったときの状態に戻ります。
(5) 継続問い合わせ応答の終了
継続問い合わせ応答は次のどれかで終了します。
(a) MHPからの終了要求(contend関数)
MHPからAPI(contend関数)を発行して継続問い合わせ応答の終了を要求します。
ただし,次に示す条件に該当する場合はエラーリターンします。
-
次起動アプリケーションを予約して,応答メッセージの送信を要求している。
-
継続問い合わせ応答型のアプリケーションの起動を要求している。
使用方法の詳細については,「3. C言語のライブラリ関数」または「4. COBOL-UAP作成用プログラムインタフェース」を参照してください。
(b) 運用コマンドによる終了要求(mcftendct)
運用コマンド(mcftendct)で論理端末名称を指定して,その論理端末に対する継続問い合わせ応答を強制終了できます。また,継続問い合わせ応答を行っていないUAPからも運用コマンドを発行できます。詳細については,「8. 運用コマンド」を参照してください。
継続問い合わせ応答のUAP実行中に継続問い合わせ応答を即時強制終了する場合,-fオプションの指定が必要です。
なお,-fオプションを指定したmcftendctコマンドの実行後にMHPが次に示す処理をしたとき,MHPが異常終了します。このとき,エラーイベントは起動しません。
-
TP1/Message Control以外のリソースマネジャにもアクセスするMHPのサービス終了時
-
継続問い合わせ用一時記憶領域アクセス時(dc_mcf_tempget関数,dc_mcf_tempput関数発行時)
-
ロールバック要求時(dc_mcf_rollback関数発行時(action:DCMCFRTRY,またはDCMCFNRTNの場合))
(c) コネクション解放および論理端末の閉塞
障害などによるコネクションの解放および論理端末の閉塞となった場合に,継続問い合わせ応答を終了します。
相手からのコネクション解放,または運用コマンド(mcftdctcn)や障害によってコネクションを解放する場合,継続問い合わせ応答を処理しているMHPが実行中であればMHPのサービス完了を待ち合わせます。MHPのサービスが完了したあとに継続問い合わせ応答を終了し,コネクションは解放状態となります。
なお,継続問い合わせ応答中の論理端末は,運用コマンド(mcftdctle)による閉塞はできません。
(6) エラーイベント
MHPの処理中に障害が発生した場合,MCFイベント処理用MHPにエラーイベントを通知します。継続問い合わせ応答中に障害が発生した場合,エラーイベントを継続問い合わせ応答型として起動します。
(a) エラーイベントを定義した場合
MCFイベント処理用MHPで次のどちらかを行うことで継続問い合わせを続行できます。
-
次起動アプリケーションを指定して,応答メッセージの送信要求をする。
-
継続問い合わせ応答型のアプリケーションの起動要求をする。
MCFイベント処理用MHPで継続問い合わせ応答型のアプリケーションの起動要求を行わない,かつ,次起動アプリケーションを指定しないで応答メッセージの送信要求をした場合,継続問い合わせ応答処理は終了します。
ただし,MCFイベント処理用MHPで継続問い合わせ応答型のアプリケーションを起動し,起動先のアプリケーションで次に起動するアプリケーション名を指定しないで応答メッセージの送信要求をした場合,継続問い合わせ応答を終了することなく,MCFイベント処理用MHPから起動した継続問い合わせ応答型のアプリケーションを次のメッセージ受信時に再び起動します。
(b) エラーイベントを定義しない場合
継続問い合わせ応答処理は終了します。
(7) 継続問い合わせ応答中の論理端末へのメッセージ受信
継続問い合わせ応答中の論理端末が表示印刷サービスからメッセージを受信した場合,応答型と同様にTP1/NET/XMAP3はメッセージログ(KFCA13664-E)を出力し,メッセージを破棄します。
(8) 継続問い合わせ応答中の論理端末へのメッセージ送信
継続問い合わせ応答中の論理端末に対して一方送信メッセージを送信した場合,一方送信メッセージは出力キューに登録され,APIは正常にリターンします。登録された一方送信メッセージは,TP1/NET/XMAP3の取り出しを待ちます。継続問い合わせ応答の終了後に出力キューから読み出し,表示印刷サービスに送信します。