ESB Muleは内部通知を発行しています。コンポーネントが追加されば場合、モデルが初期化された場合、マネージャが起動した場合などのサーバの通知を感知することができます。これらの通知を感知して、エージェント又はESB Muleが管理しているコンポーネントなどのコンポーネントをサーバの変更に対応させることができます。
 | 通知(Notification)とサービス・イベントを混雑しないようにしてください。サービス・イベントは、ESB Muleが管理するコンポーネントと外部アプリケーション間で発生するイベントです。
サーバ通知はESB Muleサーバを構成するオブジェクト間で発生する通知です。サービス・イベントはビジネス・サービスが処理するビジネスの作業です。 |
現在では12種類のサーバ通知(Server Notifications)が用意されています:
- マネージャ通知(Manager Notification) - ESB Muleマネージャの状態に変化があった場合に通知します。例:初期化、開始、停止
- モデル通知(Model Notification) - ESB Muleモデル(Model)の状態に変化があった場合に通知します。例:初期化、開始、停止、コンポーネントの登録、解除
- コンポーネント通知(Component Notification) - 指定したコンポーネントが開始、停止、一時停止、再生した場合に通知します。
- マネージメント通知(Management Notification) - 監視しているリソースの値が低くなった場合に通知します。(現在は未対応)
- カスタム通知(Custom Notification) - オブジェクトがカスタムの通知リスナーへ出す通知です。エージェント、コンポーネント、コネクタ等の通知のカスタマイズを可能にします。
- 管理通知(Admin Notification) - ESB Mule管理エージェントがリクエストを受信した場合に通知します。多くの場合は、ESB MuleClientがRemoteDispatcherを利用してリモート・サーバを呼び出した場合に発生します。
- 接続通知(Connection Notification) - コネクタがリソースに接続する場合に通知します。接続したとき、解放されたとき、接続に失敗したときに通知がだされます。
- メッセージ通知(Message Notification) - システムにイベントを送信、受信した場合に通知します。トレースをすることができますが、性能を低下するので、デフォルトでは無効に設定されています。有効に設定する説明は下の節でされています。
- セキュリティ通知(Security Notification) - リクエストの認証が失敗した場合に通知します。
- スペース監視通知(Space Monitor Notification) - JavaSpaces, JCache,ESB Mule内部スペースのようなスペースの実装でイベントを受信・送信した場合に通知が出されます。詳細に付いては[スペース|Spaces]を参照してください。
- 例外通知(Exception Notification) - 例外が投げられたときに通知します。 (ESB Mule 1.4.2以降で対応)
- トランザクション通知(Transaction Notification) - トランザクション・ライフ・サイクル中に通知されます。トランザクションが開始、コミット、ロールバックされた場合に通知します。 (ESB Mule 1.4.2以降で対応)
サーバ・イベント・リスナー・オブジェクトは一つ以上の下のインターフェースを実装ます:
- org.mule.impl.internal.notifications.ManagerNotificationListener
- org.mule.impl.internal.notifications.ModelNotificationListener
- org.mule.impl.internal.notifications.ComponentNotificationListener
- org.mule.impl.internal.notifications.ManagementNotificationListener
- org.mule.impl.internal.notifications.CustomNotificationListener
- org.mule.impl.internal.notifications.AdminNotificationListener
- org.mule.impl.internal.notifications.ConnectionNotificationListener
- org.mule.impl.internal.notifications.MessageNotificationListener
- org.mule.impl.internal.notifications.SecurityNotificationListener
- org.mule.impl.internal.notifications.SpaceMonitorNotificationListener
- org.mule.impl.internal.notifications.ExceptionNotificationListener
- org.mule.impl.internal.notifications.TransactionNotificationListener
これのインターフェースは全て次の1つのメソッドをもちます:
public void onNotification(UMOServerNotification notification);
実装したリスナーによって、感知されるイベントは制限されます。例えば、 ManagerNotificationListener を実装したオブジェクトはイベント ManagerNotification のみを感知します。複数のイベントを感知するには、複数のリスナーを実装します。
リスナーをUMOManagerに登録することができます:
MuleManager.getInstance().registerListener(listener);
イベント毎にイベント型を示す状態コード(action code)があります。onEvent メソッドを使って状態コードを取得することができます。以下はモデル(Model)が初期化(initialize)した場合に処理を実行する例です:
public class MyObject implements ModelNotificationListener
{
public MyObject()
{
MuleManager.getInstance().registerListener(this);
}
public void onNotification(UMOServerNotification notification)
{
if (notification.getAction() == ModelNotification.MODEL_INITIALISED)
{
system.out.println("モデルが初期化されました!");
}
}
}
MessageNotificationsを有効にする
メッセージ通知は特定のタイミングにESB Muleサーバに送受信された全ての情報を提供することができます。メッセージの送受信毎に通知が出されます。想像されるように、これらのイベントは性能に影響をします。そのために、デフォルトでは無効に設定されています。有効にするには、<mule-environment-properties>タグの enableMessageEvents 属性をtrueに設定します。
例:
<mule-environment-properties enableMessageEvents="true"/>
カスタムの通知(Notification)を発行する
ESB Muleのオブジェクトはカスタム通知をカスタム・リスナー宛てに発行することができます。例えば、クライアント監視エージェント(Discovery Agent)はクライアントが接続した場合に「Client Found」イベントを発行することができます。
以下は自前のイベントを発行する例です:
CustomNotification n = new CustomNotification("Hello");
MuleManager.getInstance().fireNotification(n);
CustomNotificationListener を実装したどのオブジェクトもこのイベントを受信することができます。良い習慣としては、CustomNotificationを継承して、カスタム・イベント・タイプの状態を定義します。
下の監視エージェントの例です:
DiscoveryNotification n = new DiscoveryNotification(client, DiscoveryNotification.CLIENT_ADDED);
MuleManager.getInstance().fireNotification(n);
 | ESB Muleの非システム・オブジェクトは、マネージャを介してのみカスタム通知(notification)を発行することができます。ModelNotificationのような他イベントを発行しようとすると、UnsupportedOperationException例外が投げられます。
|
イベントのサブスクリプション(Event Subscriptions)
イベント・リスナーにサブスクリプションを付けて、サブスクリプションに該当したイベントのみリスターが感知するようにできます。サブスクリプションはイベント(次の節を参照)の「Resource ID」と照合されるワイルドカードの文字列式です。以下はイベント・リスナーにコンポーネント名が MyService1 のイベントのみを取得するリスナーを登録する例です:
MuleManager.getInstance().registerListener(listener, "MyService1");
名前に「Service」が含まれている全てのコンポーネントを照合するには、以下のように記述します:
MuleManager.getInstance().registerListener(listener, "*Service*");
通知のペイロード(Notification payloads)
全ての通知は java.util.EventObject を継承し、オブジェクトのペイロードは getSource() で取得することができます。次の表はイベント・タイプ毎にイベント・ペイロードを説明します。
| イベント |
ペイロード・タイプ |
リソースID |
説明 |
| ManagerNotification |
UMOManager |
Manager ID |
UMOManagerのインスタンス。MuleManager.getInstance()メソッドを呼び出すのと同じです。 |
| ModelNotification |
UMOModel |
Model Name |
マネージャのUMOModelインスタンス。MuleManager.getInstance().getModel()メソッドを呼び出すのと同じです。 |
| ComponentNotification |
UMOComponent |
Component Name |
通知を発行させたコンポーネント |
| ManagementNotification |
not implemented |
|
未実装 |
| CustomNotification |
Any object |
Any String |
オブジェクトが発行したカスタムの通知 |
| AdminNotification |
UMOMessage |
The request endpoint |
受信した管理リクエスト |
| ConnectionNotification |
UMOConnectable |
<connector-name>.receiver(<endpoint-uri>) |
接続したメッセージ・リシーバー又はメッセージ・ディスパッチャー |
| MessageNotification |
UMOMessage |
Component name |
送信又は受信したメッセージ。 |
| SecurityNotification |
SecurityException |
The Exception Message |
投げられた認証例外 |
| SpaceMonitorNotification |
UMOSpace |
Space name |
通知を発行したスペース。データがある場合は、通知(Notification)から SpaceMonitorNotification.getItem() メソッドで取得できます。 |
| ExceptionNotification |
Throwable |
Component Name |
このイベントを発行させたコンポーネント (ESB Mule 1.4.2以降で対応) | |
| TransactionNotification |
UMOTransaction |
Component Name |
このイベントを発行させたコンポーネント。 (ESB Mule 1.4.2以降で対応) | |
通知状態(Notification Actions)
各通知・タイプの状態を説明します。
ManagerNotification
| 状態 |
説明 |
| MANAGER_INITIALISNG |
UMOManager.initialise()が呼ばれたけど、まだ実行されていない。 |
| MANAGER_INITIALISED |
UMOManagerを初期化した。 |
| MANAGER_STARTING |
UMOManager.start()を呼んだが、まだ実行されていない。 |
| MANAGER_STARTED |
UMOManagerを開始した。 |
| MANAGER_STOPPING |
UMOManager.stop()を呼んだが、まだ実行されていない。 |
| MANAGER_STOPPED |
UMOManagerが停止した。 |
| MANAGER_DISPOSING |
UMOManager.dispose()を呼んだが、まだ実行されていない。 |
| MANAGER_DISPOSED |
UMOManagerを解放した。 |
| MANAGER_DISPOSING_CONNECTORS |
登録されたコネクタがもうすぐ解放される。 |
| MANAGER_DISPOSED_CONNECTORS |
コネクタを解放した。 |
ModelNotification
| 状態 |
説明 |
| MODEL_INITIALISING |
UMOModel.initialise()を呼んだが、まだ実行されていない。 |
| MODEL_INITIALISED |
UMOModelを開始した。 |
| MODEL_INITIALISING_LISTENERS |
コネクタにコンポーネント・リスナーがもうすぐで登録される。 |
| MODEL_INITIALISED_LISTENERS |
コンポーネント・リスナーが登録された。 |
| MODEL_STARTING |
UMOModel.start()を呼んだが、まだ実行されていない。 |
| MODEL_STARTED |
UMOModelを開始した。 |
| MODEL_STOPPING |
UMOModel.stop()を呼んだが、まだ実行されていない。 |
| MODEL_STOPPED |
UMOModelを停止した。 |
| MODEL_DISPOSING |
UMOModel.dispose()を呼んだが、なだ実行されていない。 |
| MODEL_DISPOSED |
The UMOModelを解放した。 |
ComponentNotification
| 状態 |
説明 |
| COMPONENT_INITIALISED |
コンポーネントを初期化した時に通知します。 |
| COMPONENT_STARTED |
コンポーネントを開始した時に通知します。 |
| COMPONENT_STOPPED |
コンポーネントを停止した時に通知します。 |
| COMPONENT_PAUSED |
コンポーネントを一時停止した時に通知します。 |
| COMPONENT_RESUMED |
コンポーネントを再生した時に通知します。 |
| COMPONENT_DISPOSED |
コンポーネントを解放した時に通知します。 |
ManagementNotification
未対応
CustomNotification
| 状態 |
説明 |
| NULL_ACTION |
イベントに状態が設定されていない。 |
AdminNotification
| 状態 |
説明 |
| ACTION_RECEIVE |
ESB Mule[管理エージェント]からリモート・受信呼び出しがされた。 |
| ACTION_DISPATCH |
ESB Mule[管理エージェント]を介して非同期リモート・ディスパッチ(dispatch)が行われた時に通知します。 |
| ACTION_SEND |
ESB Mule [管理エージェント]を介して同期リモート送信(send)が行われた時に通知します。 |
| ACTION_INVOKE |
ESB Mule [管理エージェント]を介してコンポーネントに直接リモート呼び出しが行われた時に通知します。 |
ConnectionNotification
| 状態 |
説明 |
| CONNECTION_CONNECTED |
コネクタがリソースを正常に接続した。 |
| CONNECTION_FAILED |
接続に失敗した時に通知します。 |
| CONNECTION_DISCONNECTED |
リソースから接続を切断した時に通知します。原因としてネットワーク障害やJMX及びサーバがシャットダウンしたことが挙げられます。 |
MessageNotification
| 状態 |
説明 |
| MESSAGE_RECEIVED |
ESB Muleインスタンスがメッセージを受信した時に通知します。 |
| MESSAGE_DISPATCHED |
ESB Muleインスタンスから非同期メッセージがディスパッチされた時に通知します。 |
| MESSAGE_SENT |
ESB Muleインスタンスから同期メッセージが送信された時に通知します。 |
| MESSAGE_REQUESTED |
ESB Muleインスタンスを介してメッセージが要求された時に通知します。(MuleClient.receive(...)が呼ばれた時) |
SecurityNotification
| 状態 |
説明 |
| SECURITY_AUTHENTICATION_FAILED |
メッセージを受信したが、認証に失敗した時に通知します。 |
SpaceNotificationNotification
| 状態 |
説明 |
| SPACE_CREATED |
新しいスペースが生成された時に通知します。 |
| SPACE_DISPOSED |
スペースが解放された時に通知します。 |
| SPACE_ITEM_ADDED |
スペースに項目が追加された時に通知します。 |
| SPACE_ITEM_REMOVED |
スペースから項目が除去された時に通知します。 |
| SPACE_ITEM_EXPIRED |
スペースの項目は期限切れした時に通知します。 |
| SPACE_ITEM_MISS |
スペースから項目を要求されたが、結果が無い時に通知します。 |
| SPACE_LISTENER_ADDED |
スペースにリスターが登録された時に通知します。 |
| SPACE_LISTENER_REMOVED |
スペースのリスナーが解放された時に通知します。 |
ExceptionNotification
| 状態 |
説明 |
| EXCEPTION_ACTION |
例外が発生してorg.mule.impl.DefaultExceptionStrategy又はそのサブクラスで処理された場合に通知します。 |
TransactionNotification
| 状態 |
説明 |
| TRANSACTION_BEGAN |
トランザクションが開始した後に通知します。 |
| TRANSACTION_COMMITTED |
トランザクションがコミットされた後に通知します。 |
| TRANSACTION_ROLLEDBACK |
トランザクションがロールバックされた後に通知します。 |