3.8.4 ユーザタイマ監視機能による時間監視

MHPまたはSPPから関数で時間監視を設定したり,その設定を取り消したりできます。この機能をユーザタイマ監視機能といいます。これによって,ユーザで任意の時間監視ができます。ユーザタイマ監視機能を使用するには,MCF通信構成定義mcfttimの-pオプションにusertime=yesを指定する必要があります。

ユーザタイマ監視を設定するにはdc_mcf_timer_set関数CBLDCMCF('TIMERSET')を呼び出し,ユーザタイマ監視を取り消すにはdc_mcf_timer_cancel関数CBLDCMCF('TIMERCAN')を呼び出します。ユーザタイマ監視の設定および取り消しは,トランザクションに関係なく,関数呼び出し時点で処理されます。

タイムアウトが発生したかどうかは,MCFが一定の時間監視間隔で行います。時間監視間隔はMCF通信構成定義mcfttimの-tオプションのbtimオペランドで指定します。

タイムアウトが発生した場合,dc_mcf_timer_set関数の引数に指定したMHPを起動させます。dc_mcf_timer_set関数の引数にユーザデータを指定しておくと,タイムアウトが発生した場合に起動させるMHPに,そのデータをメッセージとして渡せます。

なお,mcftlsutmコマンドを使用すると,ユーザタイマ監視の状態を表示できます。mcftlsutmコマンドについては,マニュアル「OpenTP1 運用と操作」を参照してください。

ユーザタイマ監視機能はすべてのプロトコルで使用できます。

<この項の構成>
(1) 使用例
(2) ユーザタイマ監視機能を使用する場合の注意事項

(1) 使用例

相手システムからの応答の時間監視を例に,ユーザタイマ監視機能の使用例を次の図に示します。

図3-19 ユーザタイマ監視機能の使用例

[図データ]

(2) ユーザタイマ監視機能を使用する場合の注意事項

  1. ユーザタイマ監視の設定および取り消しは,関数呼び出し時点で処理されます。そのため,該当するトランザクションがロールバックしても,ユーザタイマ監視の設定および取り消し処理が無効となることはありません。
  2. タイムアウト発生時に起動させるMHPは,非応答型(noans型)のMHPでなくてはなりません。MHPまたはSPPからdc_mcf_timer_set関数を呼び出してユーザタイマ監視を設定する場合に,引数に指定したMHPが非応答型でないときは,dc_mcf_timer_set関数がエラーリターンします。
  3. 一定の時間間隔でタイムアウトが発生したかどうかを監視しているので,設定時に指定した監視時間と実際のタイムアウト検出までの時間には誤差が生じます。
  4. タイムアウト発生によってMHPが起動される直前に,dc_mcf_timer_cancel関数が呼び出されると,この関数が「タイムアウト発生済み」でエラーリターンしたあとに,該当するMHPが起動されることがあります。
  5. ユーザタイマ監視機能使用時にタイムアウトが頻発すると,通常のメッセージ制御処理の性能に影響します。タイムアウト発生によってアプリケーションを起動させることを,正常時の処理とする使い方はしないでください。
  6. ユーザタイマ監視の要求数の最大値を通信構成定義mcfttimの-pオプションのtimereqnoオペランドに指定しておく必要があります。このオペランドで指定した値によって,MCFは事前に要求数分の監視用テーブルを静的共用メモリ上に確保します。1件の設定に対して「約100バイト+ユーザデータサイズ」の静的共用メモリが必要です。すべてのMCFでの静的共用メモリの合計値を,MCFマネジャ定義mcfmcomnの-pオプション,およびシステム環境定義のstatic_shmpool_sizeオペランドの指定値に加算してください。
  7. システムダウン時に時間監視中であった場合,再開始(リラン)時に無効となります。ただし,入力キューにディスクキューを使用した場合,タイムアウト発生によってMHPを起動する直前で,システムダウンした場合,再開始後にMHPを起動する可能性があります。したがって,入力キューにはメモリキューを使用することをお勧めします。
  8. MCFを単独で再開始(リラン)した場合も7.と同様です。
  9. ほかのノードのMCFに対して,ユーザタイマ監視の設定,取り消しはできません。