WebSphere WebSphere Enterprise Service Bus, Version 6.0.1 作業系統: AIX, HP-UX, Linux, Solaris, Windows

將事件使用端開發成訊息驅動 Bean (MDB)

J2EE 事件使用端是以訊息驅動 Bean 的形式來實作,其在部署時會與一個 JMS 目的地和 Connection Factory 相關聯。 如果要接收事件,請遵循下列步驟:

這項作業的步驟

  1. 取得通知 Helper。 JMS 事件使用端會使用通知 Helper 來識別與事件群組相關聯的 JMS 目的地, 將收到的 JMS 訊息轉換成事件通知,再過濾收到的事件。如果要取得通知 Helper,請使用通知 Helper Factory,這是已連結至 JNDI 名稱空間的 NotificationHelperFactory 實例。 下列程式碼片段會使用通知 Helper Factory 來取得通知 Helper。
    // 從 JNDI 取得通知 Helper Factory
    InitialContext    context            = new InitialContext();
    Object notificationHelperFactoryObject = 
      context.lookup("com/ibm/events/NotificationHelperFactory");
    NotificationHelperFactory nhFactory = (NotificationHelperFactory) 
      PortableRemoteObject.narrow(notificationHelperFactoryObject,
                                  NotificationHelperFactory.class);
    
    // 建立通知 Helper
    NotificationHelper notificationHelper =
      nhFactory.getNotificationHelper();
                                          
  2. 選擇性的: 指定事件選取器。 如果您要過濾收到的事件, 您可以利用 setEventSelector() 方法,對通知 Helper 設定事件選取器。接著,您的事件使用端可以使用通知 Helper,針對事件選取器來檢查收到的事件。 下列程式碼片段會設定一個事件選取器, 指定嚴重性大於 30(警告)的事件。
    notificationHelper.setEventSelector("CommonBaseEvent[@severity > 30]");
  3. 將收到的訊息轉換成事件通知。

    在接聽器的 onMessage() 方法中,請使用通知 Helper 將每個收到的 JMS 訊息轉換成含有事件通知的陣列。 (如果事件與通知 Helper 上指定的事件選取器不符, 陣列會是空的。)事件通知是實作 EventNotification 介面之類別的實例。

    public void onMessage(Message msg) {
      EventNotification[] notifications = 
                          notificationHelper.getEventNotifications(msg);
      // ...
  4. 檢查通知類型,並視狀況擷取事件資料。 每一個事件通知都有一個代表通知類型的欄位(其值為 NotificationHelper 介面所定義之其中一個通知類型常數的整數)。目前支援三種通知類型:
    通知類型 說明

    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) {
          // 處理新的事件
          // ...
        }
      }
    
      else if(notifType == NotificationHelper.UPDATE_EVENT_NOTIFICATION_TYPE)
      {
        CommonBaseEvent event = notifications[i].getEvent();
        if (event != null) {
          // 處理更新的事件
          // ...
        }
      }
    
      else if(notifType == NotificationHelper.REMOVE_EVENT_NOTIFICATION_TYPE)
      {
        String eventId = notifications.[i].getGlobalInstanceId();
        // 處理刪除事件
        // ...
      }
    }

下一步

在其部署描述子中,訊息驅動 Bean 必須與某個接聽器埠相關聯,其會指定 JMS 目的地和 Connection Factory。您必須在部署 MDB 之前先建立事件使用端的接聽器埠, 指定與要用來接收事件之事件群組相關聯的目的地和 Connection Factory(這些定義在事件群組設定檔中)。
註: 當您部署 MDB 時,請勿使用 CommonEventInfrastructure_ListenerPort 接聽器埠。 這個接聽器埠是由事件伺服器使用,而不是供事件使用端使用。

Task topic

使用條款 | 此頁的評等

「時間戳記」圖示前次更新: 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)