イベント内容の自動入力
プロパティーおよびポリシーを設定することにより、イベント内容を自動的に入力できます。
このタスクを実行する理由および時期
作成した各イベントごとに、一部のイベント・プロパティー・データを自動的に設定する場合があります。
この方法では、変更しない特定の標準値 (アプリケーション名など) の入力や、ランタイム環境から使用可能な情報を基に一部のプロパティー (作成時刻やスレッド情報など) の設定を行います。
また、ビジネス・ルールに応じてイベント内容を管理するポリシーを設定することも可能です。
例えば、特定の拡張名があるすべてのイベントで、特定の値に重大度を設定する必要がある場合などです。
これは、コンテンツ・ハンドラー を作成することにより、実行できます。
コンテンツ・ハンドラーは、使用する任意のポリシーを基に各イベントのプロパティー値を自動的に設定するオブジェクトです。
共通イベント・インフラストラクチャーでは、イベントがコモン・ベース・イベントの仕様に準拠しているかぎり、コンテンツ・ハンドラーによるイベント・データの変更を制限しません。
すべてのイベント・ソースを同じポリシーに準拠させるには、コンテンツ・ハンドラーに関連付けてイベント・ファクトリーを作成し (EventFactoryFactory を使用)、
その作成されたイベント・ファクトリーを JNDI ネームスペースにバインドします。
独自のイベント・ファクトリーを作成する代わりに、コンテンツ・ハンドラーの知識なしで、イベント・ソースが JNDI 検索を実行して既存のイベント・ファクトリーにアクセスするようにできます。
ユーザーのビジネス・ルールが後で変更された場合は、一箇所でコンテンツ・ハンドラーを変更できます。
イベント・ソースは、内容を入力するために何も行う必要はありません。
イベント・ファクトリーがコンテンツ・ハンドラーに関連付けられている場合、それにより作成された各イベントは、コンテンツ・ハンドラーへの参照を保持します。
イベントがエミッターに送信されると、そのイベントはそれ自体への参照を受け渡して、コンテンツ・ハンドラーの completeEvent() メソッドを呼び出します。
これにより、イベント・ソースのイベント固有のプロパティー設定が完了した後、さらにイベントがエミッターにより確認され処理される前に、正しいポリシーがイベントに適用されます。
注: イベントがあるプロセスから別のプロセスに伝送された場合、コンテンツ・ハンドラーへの参照は一緒に伝送されません。
これは、内容の入力がイベントが発生する環境に依存し、必要な情報が他の場所で使用可能ではない場合があるためです。
この制限は、ローカルな別のアプリケーション間の呼び出し (例えば、ローカル・インターフェースを使用したエンタープライズ Bean への呼び出し) には影響しません。
コンテンツ・ハンドラーを作成するには、以下のステップを実行します。
このタスクの手順
- org.eclipse.hyades.logging.events.cbe.ContentHandler インターフェースを実装する新規の Java クラスを作成します。 このインターフェースでは、completeEvent(CommonBaseEvent) という単一のメソッドが定義されています。
そのパラメーターは、内容が入力されるイベントです。
このメソッドの実装では、CommonBaseEvent の getter および setter の各メソッドを使用し、
適用されるすべてのポリシーに従ってイベント・プロパティー・データを処理できます。
注: イベント・ソースが JNDI を使用してイベント・ファクトリーを取得する場合は、コンテンツ・ハンドラーがイベント・ファクトリーと共に戻されます。
そのため、コンテンツ・ハンドラーはシリアライズ可能である必要があります。
以下の例は、各イベントの拡張名を自動的に設定する単純なコンテンツ・ハンドラーです。
import java.io.Serializable;
import org.eclipse.hyades.logging.events.cbe.*;
public class BusinessContentHandler
implements ContentHandler, Serializable {
public void completeEvent(CommonBaseEvent event)
throws CompletionException {
event.setExtensionName("business");
}
}
- コンテンツ・ハンドラーをイベント・ファクトリーに関連付けます。 これを実行するには、以下のように、イベント・ファクトリーの作成時にコンテンツ・ハンドラーを指定します。
EventFactory eventFactory =
(EventFactory) EventFactoryFactory.createEventFactory(contentHandler);
戻されるイベント・ファクトリーは、指定されたコンテンツ・ハンドラーに永続的に関連付けされています。