4.2.2 非請求通知の処理
非請求通知とは、ATMIクライアントが予期していないサービス・リクエストに対するレスポンス(またはエラー・コード)を受け取る通信です。たとえば、管理者が5分後にシステムをシャットダウンすることを通知するメッセージをブロードキャストした場合などです。
クライアントに非請求メッセージを通知する方法は数多くあります。たとえば、オペレーティング・システムがクライアントにシグナルを送って、クライアントの現在の処理を中断させる方法があります。Oracle Tuxedoシステムでは、ATMI関数が呼び出されるたびに非請求メッセージが到着していないかどうかがデフォルトで確認されます。これはディップ・インと呼ばれる方法で、次の利点があります:
- すべてのプラットフォームでサポートされています。
- 現在の処理が中断されません。
ディップ・インでは、メッセージの到着を確認するまでの間隔が長い場合があります。そのため、アプリケーションでtpchkunsol()
関数を呼び出して、すでに到着している非請求メッセージがないかどうかを確認できます。tpchkunsol()
関数の詳細は、「イベント・ベースのクライアントおよびサーバーのコーディング」を参照してください。
クライアントがtpinit()
関数を使用してアプリケーションに参加する場合、フラグを定義して非請求通知メッセージの処理方法を指定できます。クライアントへの通知では、次の表に示す値をflags
に指定できます。
表4-2 TPINIT型バッファのクライアント通知でのフラグ
フラグ | 説明 |
---|---|
TPU_SIG
|
シグナルによる任意通知を選択します。このフラグは、シングル・スレッドでシングル・コンテキストのアプリケーションのみで使用します。このモードの利点は、直ちに通知できることです。このモードには、次のような不都合があります:
TPU_DIP が設定され、ログにイベントが記録されます。
|
TPU_DIP (デフォルト)
|
ディップ・インによる任意通知を選択します。クライアントはtpsetunsol() 関数を使用してメッセージ処理関数の名前を指定し、tpchkunsol() 関数を使用して待機中の非請求メッセージを確認できます。
|
TPU_THREAD
|
別のスレッド内のTHREAD 通知を指定します。このフラグは、マルチスレッドをサポートするプラットフォーム専用です。マルチスレッドがサポートされていないプラットフォームでTPU_THREAD を指定すると、無効な引数として処理されます。その結果、エラーが返されてtperrno(5) がTPEINVAL に設定されます。
|
TPU_IGN
|
任意通知を無視します。 |
TPINIT
型バッファ・フラグの詳細は、『Oracle Tuxedo ATMI C関数リファレンス』のtpinit(3c)
に関する項を参照してください。
親トピック: TPINIT型バッファの機能の使用