Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プロトコル TP1/NET/TCP/IP編


2.3.5 問い合わせメッセージと応答メッセージ(継続問い合わせ応答形態)

相手システムからの問い合わせメッセージの受信と,自システムからの応答メッセージの送信を繰り返す形態です。UAP(MHP)のトランザクションの決着と連動してメッセージを送受信します。非トランザクションのMHPの場合は,サービスの終了と連動してメッセージを送受信します。論理端末の端末タイプはany,アプリケーションの型は継続問い合わせ応答型です。

継続問い合わせ応答は継続問い合わせ応答型のアプリケーションの起動によって開始され,UAPからAPI(dc_mcf_contend関数またはCBLDCMCF('CONTEND△'))を発行したり,運用コマンド(mcftendct)を入力したりすることで終了します。

相手システムからのメッセージを受信すると,TP1/NET/TCP/IPは入力メッセージ編集UOCで編集されたメッセージを入力キューに登録します。同時に,継続問い合わせ応答型のアプリケーションに対応するUAPを起動して,メッセージを引き渡します。

UAPがAPI(dc_mcf_reply関数またはCBLDCMCF('REPLY△△△'))で送信要求すると,メッセージが出力キューに登録されます。継続問い合わせ応答中のUAPは,dc_mcf_reply関数またはCBLDCMCF('REPLY△△△')発行時に次に起動するアプリケーションを指定できます。また,継続問い合わせ応答用一時記憶領域を使って次に起動するアプリケーションにデータを引き継ぐことができます。

TP1/NET/TCP/IPは出力キューからメッセージを読み出し,出力メッセージ編集UOCで編集されたメッセージを相手システムに送信します。応答メッセージをTCP/IPの送信バッファに書き込み完了した時点で,送信完了としてTP1/NET/TCP/IPは出力キューにある送信済みメッセージのデータを消去します。

出力キューまたは入力キューの割り当て先の指定に関係なく,入力キューに蓄えられた問い合わせメッセージおよび出力キューに蓄えられた応答メッセージはオンラインシステムが異常終了した場合などの再開始時に引き継がれません。

継続問い合わせ応答を,dc_mcf_receive関数およびdc_mcf_reply関数を使用する場合を例に,次の図に示します。

図2‒41 継続問い合わせ応答

[図データ]

  1. 相手システムからメッセージを受信します。

  2. TP1/NET/TCP/IPは相手システムからのメッセージを入力キューに書き込み,MHP1を起動します。

  3. MHP1は問い合わせメッセージを受け取ります。

  4. MHP1は一時記憶データの受け取り要求を行い,一時記憶データを受け取ります。

  5. MHP1は一時記憶データの更新要求を行い,一時記憶データを更新します。

  6. MHP1は応答メッセージの送信を要求します。

  7. TP1/NET/TCP/IPは応答メッセージを送信します。

  8. 出力キューにある応答メッセージのデータを消去します。

  9. 相手システムからメッセージを受信します。

  10. TP1/NET/TCP/IPは相手システムからのメッセージを入力キューに書き込み,MHP2を起動します。

  11. MHP2は問い合わせメッセージを受け取ります。

  12. MHP2は一時記憶データの受け取り要求を行い,一時記憶データを受け取ります。

  13. MHP2は一時記憶データの更新要求を行い,一時記憶データを更新します。

  14. MHP2は継続問い合わせ応答の終了を要求します。

  15. MHP2は応答メッセージの送信を要求します。

  16. TP1/NET/TCP/IPは応答メッセージを送信します。

  17. 出力キューにある応答メッセージのデータを消去します。

以降,継続問い合わせ応答形態の詳細を説明します。

〈この項の構成〉

(1) 継続問い合わせ応答の開始

継続問い合わせ応答は,継続問い合わせ応答中でないときに相手システムから問い合わせメッセージを受信し,継続問い合わせ応答型のアプリケーションを起動することで開始します。

問い合わせ応答と異なり,継続問い合わせ応答では相手システムへの応答メッセージの送信が完了しても継続問い合わせ応答を終了しません。

継続問い合わせ応答の開始から継続問い合わせ応答の終了までを継続問い合わせ応答中と呼びます。また,継続問い合わせ応答中にUAPを起動してから送信メッセージを読み出すまでを継続問い合わせ応答のUAP実行中と呼びます。

(2) 次起動アプリケーションの予約

応答メッセージ送信要求時,次に起動する継続問い合わせ応答型のアプリケーション(次起動アプリケーション)を予約できます。

次起動アプリケーションの指定を省略した場合,実行中のアプリケーション名が指定されたものとします。ただし,エラーイベントで次起動アプリケーションの指定を省略した場合は,継続問い合わせ応答を終了します。詳細については,「2.3.5(6) エラーイベント」を参照してください。

次起動アプリケーションの予約を次の図に示します。

使用方法の詳細については,「3. C言語のライブラリ関数」または「4. COBOL-UAP作成用プログラムインタフェース」を参照してください。

図2‒42 次起動アプリケーションの予約

[図データ]

(3) 継続問い合わせ応答中のアプリケーション起動

継続問い合わせ応答中にアプリケーション起動要求をする場合,非応答型または継続問い合わせ応答型のアプリケーション名を指定できます。ただし,継続問い合わせ応答型のアプリケーションを起動できるのは一つのサービスで1回だけです。

継続問い合わせ応答型のアプリケーションを起動した場合,そのサービスでは応答メッセージを送信できません。また,継続問い合わせ応答の終了要求もできません。起動先の継続問い合わせ応答型アプリケーションで応答メッセージを送信したり,継続問い合わせ応答の終了要求をしてください。

使用方法の詳細については,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

(4) 継続問い合わせ応答用一時記憶データ

継続問い合わせ応答用一時記憶データ(以降,一時記憶データと呼びます)を使用して,次起動アプリケーションへデータの引き継ぎができます。データの引き継ぎを,次の図に示します。

図2‒43 一時記憶データの引き継ぎ

[図データ]

一時記憶データを格納する継続問い合わせ応答用一時記憶領域は論理端末ごとに確保するため,複数の論理端末で同時に一つのアプリケーションを使用して継続問い合わせ応答ができます。論理端末と一時記憶データの関係を次の図に示します。

図2‒44 論理端末と一時記憶データの関係

[図データ]

(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からの終了要求(dc_mcf_contend関数またはCBLDCMCF('CONTEND△'))

MHPからAPI(dc_mcf_contend関数またはCBLDCMCF('CONTEND△'))を発行して継続問い合わせ応答の終了を要求します。

ただし,次に示す条件に該当する場合はエラーリターンします。

  • 次起動アプリケーションを予約して,応答メッセージの送信を要求している。

  • 継続問い合わせ応答型のアプリケーションの起動を要求している。

使用方法の詳細については,「3. C言語のライブラリ関数」または「4. COBOL-UAP作成用プログラムインタフェース」を参照してください。

(b) 運用コマンドによる終了要求(mcftendct)

運用コマンド(mcftendct)で論理端末名称を指定して,その論理端末に対する継続問い合わせ応答を強制終了できます。また,継続問い合わせ応答を行っていないUAPからも運用コマンドを発行できます。詳細については,「7. 運用コマンド」を参照してください。

継続問い合わせ応答の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/TCP/IPはメッセージログ(KFCA14884-W)を出力し,MDELEVTを起動します。

(8) 継続問い合わせ応答中の論理端末へのメッセージ送信

継続問い合わせ応答中の論理端末に対してメッセージを送信した場合,メッセージの種類によって動作が異なります。

(a) 一方送信メッセージの場合

一方送信メッセージは出力キューに登録され,APIは正常にリターンします。登録された一方送信メッセージは,TP1/NET/TCP/IPの取り出しを待ちます。継続問い合わせ応答の終了後に出力キューから読み出し,相手システムに送信します。

(b) 同期型メッセージの場合

APIがリターン値DCMCFRTN_72001またはステータスコード72001でエラーリターンします。

(9) 閉塞中の論理端末への問い合わせメッセージ受信

閉塞中の論理端末が相手システムからメッセージを受信した場合,TP1/NET/TCP/IPはUAPを起動しますが,サービスが終了しても出力キューから応答メッセージを読み出さないで,継続問い合わせ応答のUAP実行中のままになります。相手システムに応答メッセージを送信する場合,運用コマンド(mcftactle)を入力し,論理端末を閉塞解除してください。

なお,出力キューに滞留した応答メッセージを運用コマンド(mcftdlqle)などで削除した場合,論理端末を閉塞解除したり,コネクションを解放しても継続問い合わせ応答は終了しません。-fオプションを指定したmcftendctコマンドを入力し,継続問い合わせ応答を即時強制終了してください。