5 イベント・ブローカについて
このトピックには、次の項があります。
5.1 イベントとは
イベントとは、ネットワークの突然の切断など、実行中のアプリケーションで起こった状態の変更などで、オペレータ、システム管理者、またはソフトウェアによる操作を必要とするものです。Oracle Tuxedoシステムでは、次の2種類のイベントが通知されます。
- システム定義のイベント - Oracle Tuxedoシステムによって定義される状況(主に障害)です。たとえば、特定のシステムでの許容量の超過、サーバーの終了、セキュリティの侵害、ネットワーク障害などがあります。
- アプリケーション定義のイベント - 顧客のアプリケーションによって定義される状況であり、次の表に示すものなどがあります:
業種 | イベントの発生 |
---|---|
株式売買 | 株式が指値で、またはそれよりも高く取引きされました。 |
銀行業 | 限度額を超えて引き出しまたは預金が行われました。 |
現金自動預け払い機の現金が取扱い額よりも少なくなりました。 | |
製造業 | 在庫がなくなりました。 |
アプリケーション・イベントはアプリケーション定義のイベントの発生、システム・イベントはシステム定義のイベントの発生を意味します。Oracle Tuxedoのイベント・ブローカ・コンポーネントでは、アプリケーション・イベントとシステム・イベントの両方の受信および配信が可能です。
親トピック: イベント・ブローカについて
5.2 アプリケーション定義のイベントとシステム定義のイベントの違い
アプリケーション定義のイベントは、アプリケーションの設計者によって定義されます。そのため、アプリケーション固有のものです。アプリケーションに対して定義されたすべてのイベントは、アプリケーションで実行されているクライアント・プロセスおよびサーバー・プロセスによって追跡されます。
システム定義のイベントは、Oracle Tuxedoシステムのコードによって定義され、通常はTM_MIB(5)で定義されているオブジェクトに関連付けられています。システム定義の全イベントのリストは、EVENTS(5)のリファレンス・ページに記載されています。これらのイベントはいずれも、Oracle Tuxedoシステムのユーザーによる追跡が可能です。
Oracle Tuxedoのイベント・ブローカでは、アプリケーション定義のイベントとシステム定義のイベントの両方がポストされます。そして、アプリケーションではこの両方のイベントをサブスクライブできます。この2種類のイベントは、名前から区別できます。システム定義のイベントはピリオド(.)で開始され、アプリケーション固有のイベントはピリオド(. )以外の文字で開始されます。
親トピック: イベント・ブローカについて
5.3 イベント・ブローカとは
Oracle Tuxedoのイベント・ブローカは、Oracle Tuxedoアプリケーションで実行中のプロセス間で、アプリケーション・イベントを非同期にルーティングするためのツールです。また、システム・イベントを、その受信を望むアプリケーション・プロセスに配布します。
イベント・ブローカには、次の機能があります。
- イベントをモニターし、イベントがtppost(3c)を介してポストされると、サブスクライバに通知します
- アプリケーションでの変更をシステム管理者に通知します。
- システム全体に関するイベントのサマリーを提供します。
- イベントが各種の通知を開始するためのツールを提供します。
- フィルタリング機能を提供し、ポストされたイベントのバッファに条件を追加します。
デモとしてコピーして実行できるサンプル・アプリケーションについては、『Oracle Tuxedo ATMIアプリケーション開発のためのチュートリアル』のbankapp(完全なCアプリケーション)のチュートリアルに関する項を参照してください
イベント・ブローカは、MIB
オブジェクトの100種類以上の状態の変化をシステム・イベントとして認識します。システム・イベントをポストすると、イベントが発生した現在のMIB
としてのオブジェクト、および発生したイベントを識別するイベント固有のフィールドの情報が提供されます。たとえば、マシンが分断された場合、ポストされるイベントには次の情報が含まれます。
T_MACHINE
クラスで指定されている影響を受けるマシンの名前、およびそのマシンのすべての属性- イベントを
分断されたマシンとして識別するイベント属性
イベント・ブローカは、システム・イベントをサブスクライブするだけで使用できます。以降、MIB
レコードを問合せしなくても、MIB
オブジェクトを表すFML
データ・バッファを受け取ることによって、MIB
でイベントが発生したことが自動的に通知されます。
親トピック: イベント・ブローカについて
5.4 イベント・ブローカのしくみ
Oracle Tuxedoのイベント・ブローカは、任意の数のイベント通知のサプライヤ
が任意の数のサブスクライバ
にメッセージをポストするためのツールです。イベント通知のサプライヤ
は、クライアントまたはサーバーとして動作しているアプリケーション・プロセスまたはシステム・プロセスです。イベント通知のサブスクライバ
は、クライアントまたはサーバーとして動作しているアプリケーション・プロセス、またはシステム管理者です。
イベント・ブローカを使用するクライアント・プロセスとサーバー・プロセスは、サブスクリプション
のセットに基づいて相互に通信します。各プロセスでは、そのプロセスが受け取る必要のあるイベント・タイプが識別され、1つ以上のサブスクリプション
・リクエストがイベント・ブローカに送信されます。イベント・ブローカでは、購読料を支払っている購読者だけに新聞を配達するように、その要求を処理します。そのため、イベント・ブローカが基づいているパラダイムは、パブリッシュ・アンド・サブスクライブ
通信と呼ばれます
イベント・サプライヤ
(クライアントまたはサーバー)は、イベントが発生するたびにイベント・ブローカに通知します。このような通知は、イベントのポスト
と呼ばれます。イベント・サプライヤがイベントをポストすると、イベント・ブローカはポストされたイベント・タイプと要求が合致するサブスクライバを探します。サブスクライバは、システム管理者またはアプリケーション・プロセスです。合致するサブスクライバが検出されると、イベント・ブローカは各サブスクリプションに対して指定された処理を行います。つまり、サブスクライバへの通知など、サブスクライバによって指定された処理が開始されます。
次の図は、イベント・ブローカがイベント・サブスクリプションおよびポストを処理する処理する方法を示しています。
図5-1 イベントのポストとサブスクライブ

Oracle Tuxedoアプリケーション管理者は、クライアント・プロセスとサーバー・プロセスのかわりに、EVENT_MIB(5)のT_EVENT_COMMAND
クラスへの呼出しを行って、サブスクリプションをリクエストできます。イベント・ブローカを使用して、プログラムでtpsubscribe(3c)関数を呼び出してイベントをサブスクライブすることもできます。
5.4.1 イベントの通知方法
イベント・ブローカのサブスクリプションでは、次の図に示すいずれかの通知方法が指定されます:
図5-2 サポートされている通知方法

- クライアントへの通知 - イベント・ブローカは、クライアントが通知を必要とする特定のイベントを追跡し、そのようなイベントが発生すると、自動的にクライアントに通知します。この方法は
非請求通知
と呼ばれます。 - サービスの呼出し - サブスクライバがイベント通知をサービス呼出しに渡す必要がある場合、サブスクライバ・プロセスは
tpsubscribe()
関数を呼び出して、呼び出すサービスの名前を渡します。 - 安定したストレージ・キューへのメッセージの登録 - サブスクリプションで、イベント通知を安定したストレージ・キューに送信することがリクエストされている場合、イベント・ブローカはキュー・スペース、キュー名、相関識別子を取得します。サブスクライバは、イベントをサブスクライブする際に、キュー名を指定します。相関識別子は、同じイベントの記述とフィルタ・ルールが定義され、格納先が同じキューである複数のサブスクリプションを区別するために使用されます。
- コマンドの実行 - イベントがポストされると、それに対応付けられたバッファがシステム・コマンドに変換されて実行されます。たとえば、電子メール・メッセージを送信するシステム・コマンドに変換されます。このプロセスは、
MIB
を介して行われる必要があります。 - ユーザー・ログへのメッセージの記録 - イベントが発生し、イベント・ブローカによって合致するリクエストがあることが検出されると、指定されたメッセージはユーザー・ログ(
ULOG
)に書き込まれます。このプロセスは、MIB
を介して行われる必要があります。
親トピック: イベント・ブローカのしくみ
5.4.2 システム・イベントの重大度レベル
イベント・ブローカでは、サーバーの終了やネットワーク障害などのシステム・イベントに、次の3つの重大度のいずれかが割り当てられます。
表5-1 システム・イベントの重大度レベル
重大度のレベル | システム・イベント |
---|---|
ERROR |
サーバーの終了やネットワークの突然の切断など、異常が発生しました。 |
|
プロセス、または構成の変更が原因で、状態が変化しました。 |
|
認証に失敗し、クライアントがアプリケーションに参加できませんでした。アプリケーションのパフォーマンスに影響を与えるような構成の変更が行われました。 |
親トピック: イベント・ブローカのしくみ
5.5 ブローカ・イベントの利点とは
- 無名通信 - イベント・ブローカを使用すると、Oracle Tuxedoの各プログラムで要求されるイベントをそのプログラムがサブスクライブできるようになります。また、すべてのサブスクリプションを追跡できるようになります。そのため、あるイベントのサブスクライバは、どのプログラムが同じイベントをサブスクライブするのか知る必要がありません。そして、イベントのポスト元は、ほかのどのプログラムがそのイベントをサブスクライブするのか知る必要がありません。この「無名」処理により、サブスクライバはイベントのポスト元と同期を取る必要がありません。
- 例外条件の分離 - パブリッシュ・アンド・サブスクライブ通信モデルでは、例外条件を検出するソフトウェアと、例外条件を処理するソフトウェアを分離できます。
- Oracle Tuxedoシステムとの統合化 - イベント・ブローカには、メッセージ・バッファ、メッセージ・パラダイム、分散トランザクション、およびイベント・ポストに対するACL権限チェックなどの機能があります。
- 各種の通知方法 - クライアントまたはサーバーがシステム・イベント(サーバーの終了など)またはアプリケーション・イベント(ATMマシンでのメモリー不足など)をサブスクライブしている場合、そのイベントの発生が通知されたときにイベント・ブローカが行う処理はクライアントまたはサーバーによって定義されています。
サブスクライバがOracle Tuxedoクライアントの場合、サブスクライブ時に次のいずれかの処理が行われます。
- 非請求通知をリクエストします
- 呼び出すサービス・ルーチン名を指定します。
- 後で処理できるように、イベント・ブローカがデータを格納するアプリケーション・キューを指定します。
サブスクライバがOracle Tuxedoサーバーの場合、サブスクライブ時に次のいずれかの処理が行われます。
- サービス・リクエストを指定します。
- イベント・ブローカがデータを格納するアプリケーション・キューを指定します。
関連項目
- イベントのサブスクライブ
- ATMIおよびEVENT_MIBを使用したイベントのサブスクライブ、ポスト、サブスクライブ解除
- 『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』のEVENT_MIB(5)に関する項
- 『Oracle Tuxedo ATMI C関数リファレンス』のtpsubscribe(3c)に関する項
- 『Oracle Tuxedo ATMI C関数リファレンス』のtpunsubscribe(3c)に関する項
親トピック: イベント・ブローカについて