イベント メカニズムの理解

提供: InterBase
移動先: 案内検索

イベントでの作業 へ戻る

InterBase のイベント メカニズムは、4 つの部分から構成されています:

  • InterBase エンジン: イベント キューを管理し、イベントが発生するとアプリケーションに通知します。
  • イベント パラメータ バッファ: イベントの通知を受け取ることのできるアプリケーションによって設定されます。
  • アプリケーション: 1 つ以上の特定の名前付きイベントについて、関心を登録し、通知が発生するのを待機するか(同期イベント)、 通知を処理する AST 関数にポインタを渡し、アプリケーション処理が一定時間継続できるようにします(非同期イベント)。
  • トリガまたはストアド プロシージャ: 特定の名前付きイベントが発生したことを、エンジンに通知します。通知は、投稿する(posting)といいます。

InterBase のイベント メカニズムにより、アプリケーションは、他によって行われたアクションやデータベース更新に応答することができ、同時に、これらのアプリケーションはお互いに直接通信する必要なく、また、イベントが発生したかどうかを判断するための定期的なポーリングに CPU を消費することなく、アプリケーションを実行し続けることができます。

イベントを投稿するトリガやストアド プロシージャの作成方法については、『データ定義ガイド』を参照してください。


イベント パラメータ バッファ

アプリケーションがイベントについて通知を受け取った場合、isc_event_block() を使用して、同一サイズの 2 つのイベント パラメータ バッファを設定しなければなりません。 最初のバッファ、event_buffer は、アプリケーションがそのイベントに関心を登録する前の、イベント発生回数のカウントを保持するために使用されます。 2 つ目のバッファ、result_buffer は、アプリケーションに関連するイベントが発生した際に、イベント発生回数のカウントを更新して格納するためのものです。 2 つ目の API 関数、isc_event_counts() は、これらバッファの項目カウントの差異を調べ、どのイベントもしくはイベントらが発生したかを判別します。

EPB の設定および使用の詳細については、「isc_event_block() による EPB の作成」を参照してください。


同期イベント通知

発生するイベントによって処理が異なるアプリケーションの場合、同期イベント通知を使用して、そのイベントが発生するまで、アプリケーション自身の実行を保留する必要があります。 たとえば、特定の価格に変動した際に株の売買をする自動株取引アプリケーションは、実行を開始し、EPB を設定し、一連の株に関心を登録し、自分自身の実行を、価格変動が発生するまで自分自身の実行は保留にします。

isc_wait_for_event() 関数では、アプリケーションの同期イベント処理を行うことができます。 同期イベント処理の詳細については、「isc_wait_for_event() によるイベントの待機」を参照してください。


非同期イベント通知

アプリケーションが、発生する可能性のあるデータベース イベントに対して応答する必要があるが、それらのイベント発生の有無にかかわらず、自分の処理も続行しなければならない場合には、非同期トラップ(AST)関数を設定し、自分の処理を続行する一方で、非同期イベント通知を使用してそれらイベントに関心を登録しておきます。 たとえば、株式ブローカー アプリケーションでは、株のデータベースに定期的にアクセスして、ブローカーが株の売買をできるようにしつつ、同時に、特に顕著な株価の乱高下については、ブローカーに警告するイベントを使用することになります。

isc_que_events() 関数および AST 関数は、アプリケーションに対して、非同期イベント処理の機能を提供します。 非同期イベント処理の詳細については、「isc_que_events() による処理の続行」を参照してください。


イベントのトランザクション制御

イベントは、トランザクション管理下で発生するため、コミットやロールバックさせることができます。 イベントが投稿されたトランザクションがコミットするまでは、それに関心登録したアプリケーションが通知を受け取ることはありません。 投稿されたイベントがロールバックされた場合、通知は発生しません。

トランザクションは、コミットする前に同じイベントを複数回投稿することができますが、イベントを何度投稿したかにかかわらず、イベント通知においては、1回のイベント発生とみなされます。

次は: