WebSphere WebSphere Enterprise Service Bus, Version 6.0.1 オペレーティング・システム: AIX, HP-UX, Linux, Solaris, Windows

メッセージ駆動型 Bean (MDB) としてのイベント・コンシューマーの開発

J2EE イベント・コンシューマーは、メッセージ駆動型 Bean として実装され、デプロイメント時に JMS 宛先および接続ファクトリーに関連付けされます。 イベントを受信するには、以下のステップを実行します。

このタスクの手順

  1. 通知ヘルパーを取得します。 JMS イベント・コンシューマーは通知ヘルパーを使用して、イベント・グループに関連した JMS 宛先を識別し、受信した JMS メッセージをイベント通知に変換し、さらに受信したイベントのフィルタリングを実行します。 通知ヘルパーを取得するには、JNDI ネームスペースにバインドされている NotificationHelperFactory のインスタンスである、通知ヘルパー・ファクトリーを使用します。 以下のコード・フラグメントでは、通知ヘルパー・ファクトリーを使用して通知ヘルパーを取得しています。
    // Get notification helper factory from JNDI
    InitialContext context = new InitialContext();
    Object notificationHelperFactoryObject =
      context.lookup("com/ibm/events/NotificationHelperFactory");
    NotificationHelperFactory nhFactory = (NotificationHelperFactory)
      PortableRemoteObject.narrow(notificationHelperFactoryObject,
                                  NotificationHelperFactory.class);
    
    // Create notification helper
    NotificationHelper notificationHelper =
      nhFactory.getNotificationHelper();
                                          
  2. オプション: イベント・セレクターを指定します。 受信したイベントをフィルタリングする場合は、setEventSelector() メソッドを使用して、通知ヘルパーにイベント・セレクターを設定できます。 イベント・コンシューマーは、その通知ヘルパーを使用し、イベント・セレクターに照らし合わせて受信したイベントを検査します。 以下のコード・フラグメントでは、重大度が 30 (警告) より大きいイベントを指定したイベント・セレクターを設定しています。
    notificationHelper.setEventSelector("CommonBaseEvent[@severity > 30]");
  3. 受信したメッセージをイベント通知に変換します。

    ご使用のリスナーの onMessage() メソッドにおいて、通知ヘルパーを使用し、各受信 JMS メッセージをイベント通知が収容された配列に変換します。 (イベントが通知ヘルパーで指定されたイベント・セレクターに一致しない場合、配列は空になります。) イベント通知は、EventNotification インターフェースを実装したクラスのインスタンスです。

    public void onMessage(Message msg) {
      EventNotification[] notifications =
                          notificationHelper.getEventNotifications(msg);
      // ...
  4. 通知タイプを確認し、対応するイベント・データを取得します。 それぞれのイベント通知には、通知タイプを表すフィールドがあります (その値が NotificationHelper インターフェースで定義された通知タイプ定数のいずれかである整数)。 以下の 3 つの通知タイプが現在サポートされています。
    通知タイプ 説明

    CREATE_EVENT

    _NOTIFICATION_TYPE

    新規イベントが、宛先に関連付けられたイベント・グループに作成されています。 これは、新規イベントが送信されたか、または既存のイベントがイベント・グループ定義に一致するように変更されたかのいずれかを意味します。 その通知には、完全なイベント・データも含まれています。

    REMOVE_EVENT

    _NOTIFICATION_TYPE

    イベント・データベースに保管されたイベントが、宛先に関連付けられたイベント・グループから削除されています。 これは、イベントがイベント・データベースから削除されたか、または既存のイベントがイベント・グループ定義に一致しないように変更されたかのいずれかを意味します。 その通知には、削除されたイベントのグローバル・インスタンス ID も含まれています。

    UPDATE_EVENT

    _NOTIFICATION_TYPE

    イベント・データベースに保管されたイベントが、宛先に関連付けられたイベント・グループにおけるメンバーシップを変更しない方法で更新されています。 その通知には、完全なイベント・データも含まれています。
    EventNotification の getNotificationType() メソッドを使用して、受信した各通知の通知タイプを確認します。 その通知タイプを基にして、以下のように、イベント・コンシューマーでその通知をさらに処理するかどうかを判断し、その通知に含まれているイベント・データの種類を判別することができます。
    • 通知タイプが CREATE_EVENT_NOTIFICATION_TYPE または UPDATE_EVENT_NOTIFICATION_TYPE である場合、コンシューマーは EventNotification.getEvent() を使用して、新規または更新済みのイベントを取得できます。 このメソッドは、新規または更新済みのイベントの通知に対してのみ有効です。
    • 通知が REMOVE_EVENT_NOTIFICATION_TYPE である場合、コンシューマーは EventNotification.getGlobalInstanceId() を使用して、削除されたイベントのグローバル・インスタンス ID を取得できます。 このメソッドは、削除されたイベントの通知に対してのみ有効です。
    for (int i = 0; i < notifications.length; i++)
    {
      int notifType = notifications[i].getNotificationType();
    
      if(notifType == NotificationHelper.CREATE_EVENT_NOTIFICATION_TYPE)
      {
        CommonBaseEvent event = notifications[i].getEvent();
        if (event != null) {
          // process the new event
          // ...
        }
      }
    
      else if(notifType == NotificationHelper.UPDATE_EVENT_NOTIFICATION_TYPE)
      {
        CommonBaseEvent event = notifications[i].getEvent();
        if (event != null) {
          // process the updated event
          // ...
        }
      }
    
      else if(notifType == NotificationHelper.REMOVE_EVENT_NOTIFICATION_TYPE)
      {
        String eventId = notifications.[i].getGlobalInstanceId();
        // process the event deletion
        // ...
      }
    }

次のタスク

メッセージ駆動型 Bean は、そのデプロイメント記述子において、JMS 宛先および接続ファクトリーを指定するリスナー・ポートに自分自身を関連付ける必要があります。 MDB をデプロイする前に、イベントを受信するイベント・グループに関連付けされた宛先および接続ファクトリーを指定して、ご使用のイベント・コンシューマー用のリスナー・ポートを作成する必要があります (それらはイベント・グループ・プロファイルで定義されます)。
注: MDB のデプロイ時には、CommonEventInfrastructure_ListenerPort リスナー・ポートを使用しないでください。 このリスナー・ポートは、イベント・サーバーにより使用されるポートであり、イベント・コンシューマーを対象としていません。

Task topic

ご利用条件 | フィードバック (英語のみ)

Timestamp icon最終更新: 5 Mar 2006
http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/index.jsp?topic=/com.ibm.websphere.wesb.doc.nl1_6.0.1\doc\tcei_admin_MDBEventConsumer.html

(C) Copyright IBM Corporation 2005. All Rights Reserved.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)