Desarrollo de un consumidor de sucesos como un bean controlado por mensaje (MDB)

Los consumidores de sucesos J2EE se implementan como beans controlados por mensaje, que se asocian a destinos JMS y a fábricas de conexiones durante el despliegue. Para recibir sucesos, siga estos pasos:

Pasos para realizar esta tarea

  1. Obtenga una ayuda de notificación. Los consumidores de sucesos JMS utilizan la ayuda de notificación para identificar los destinos JMS asociados a un grupo de sucesos, para convertir mensajes JMS recibidos en notificaciones de suceso y filtrar sucesos recibidos. Para obtener ayuda de notificación, utilice una fábrica de ayudas de notificación, que es una instancia de NotificationHelperFactory que está enlazada a un espacio de nombres JNDI. El siguiente fragmento de código utiliza una fábrica de ayudas de notificación para obtener una ayuda de notificación.
    // Obtener
    la fábrica de ayudas de notificación de JNDI
    InitialContext context = new InitialContext();
    Object notificationHelperFactoryObject =
      context.lookup("com/ibm/events/NotificationHelperFactory");
    NotificationHelperFactory nhFactory = (NotificationHelperFactory)
      PortableRemoteObject.narrow(notificationHelperFactoryObject,
                                  NotificationHelperFactory.class);
    
    // Crear la ayuda de notificación
    NotificationHelper notificationHelper =
      nhFactory.getNotificationHelper();
                                          
  2. Opcional: Especifica el selector de sucesos. Si desea filtrar los sucesos recibidos, puede utilizar el método setEventSelector() para establecer un selector de sucesos en la ayuda de notificación. A continuación, su consumidor de sucesos puede utilizar la ayuda de notificación para contrastar los sucesos recibidos con el selector de sucesos. EL siguiente código de fragmento establece un selector de sucesos que especifica los sucesos con una gravedad superior a 30 (aviso).
    notificationHelper.setEventSelector("CommonBaseEvent[@severity > 30]");
  3. Convierta los mensajes recibidos en notificaciones de suceso.

    En el método onMessage() del receptor, utilice la ayuda de notificación para convertir todos los mensajes JMS recibidos a una matriz que contiene notificaciones de sucesos. (Si el suceso recibido no coincide con el selector de sucesos especificado en la ayuda de notificación, la matriz está vacía). Una notificación de suceso es una instancia de una clase que implementa la interfaz EventNotification.

    public void onMessage(Message msg) {
      EventNotification[] notifications = 
                          notificationHelper.getEventNotifications(msg);
      // ...
  4. Compruebe el tipo de notificación y recupere los datos de suceso según sea adecuado. Cada notificación de suceso tiene un campo que representa el tipo de notificación (un entero cuyo valor es una de las constantes de tipo de notificación definidas por la interfaz NotificationHelper). Actualmente se admiten tres tipos de notificación:
    Tipo de notificación Descripción

    CREATE_EVENT

    _NOTIFICATION_TYPE

    Se ha creado un nuevo suceso del grupo de sucesos asociado al destino. Esto significa que, o bien, se ha enviado un suceso, o bien, que ha cambiado un suceso existente de modo que ahora coincide con la definición de grupo de sucesos. La notificación también contiene los datos completos del suceso.

    REMOVE_EVENT

    _NOTIFICATION_TYPE

    Se ha eliminado un suceso almacenado en la base de datos de sucesos del grupo de sucesos asociado al destino. Esto significa que, o bien, se ha suprimido un suceso de la base de datos de sucesos, o bien, que ha cambiado un suceso existente de modo que ya no coincide con la definición de grupo de sucesos. La notificación también contiene el identificador de instancia global del suceso suprimido.

    UPDATE_EVENT

    _NOTIFICATION_TYPE

    Se ha actualizado un suceso almacenado en la base de datos de sucesos, de un modo en que no cambia su relación de miembro en el grupo de sucesos asociado al destino. La notificación también contiene los datos completos del suceso.
    Utilice el método getNotificationType() de EventNotification para comprobar el tipo de notificación de cada notificación recibida. Basándose en el tipo de notificación, puede determinar si el consumidor de sucesos debería procesar más las notificación y qué clase de datos de sucesos contiene la notificación:
    • Si el tipo de notificación es CREATE_EVENT_NOTIFICATION_TYPE o UPDATE_EVENT_NOTIFICATION_TYPE, el consumidor puede utilizar EventNotification.getEvent() para intentar recuperar el suceso nuevo o actualizado. Este método sólo es válido para notificaciones de sucesos nuevos o actualizados.
    • Si la notificación es REMOVE_EVENT_NOTIFICATION_TYPE, el consumidor puede utilizar EventNotification.getGlobalInstanceId() para recuperar el identificador de instancia global del suceso suprimido. Este método sólo es válido para notificaciones de sucesos suprimidos.
    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) {
          // procesar el nuevo suceso
          // ...
        }
      }
    
      else if(notifType == NotificationHelper.UPDATE_EVENT_NOTIFICATION_TYPE)
      {
        CommonBaseEvent event = notifications[i].getEvent();
        if (event != null) {
          // procesar el suceso actualizado
          // ...
        }
      }
    
      else if(notifType == NotificationHelper.REMOVE_EVENT_NOTIFICATION_TYPE)
      {
        String eventId = notifications.[i].getGlobalInstanceId();
        // procesar la supresión del suceso
        // ...
      }
    }

Qué hay que hacer a continuación

En el descriptor de despliegue, un bean controlado por mensaje debe estar asociado con un puerto receptor, que especifica un fábrica de conexiones y un destino JMS. Debe crear un puerto receptor para el consumidor de sucesos antes de desplegar el MDB (bean controlado por mensaje), especificando el destino y la fábrica de conexiones asociada al grupo de sucesos del que desea recibir sucesos (estos se definen en el perfil del grupo de sucesos)
Nota: No utilice el puerto receptor CommonEventInfrastructure_ListenerPort cuando despliegue el MDB. Este puerto receptor lo utiliza el servidor de sucesos y no está pensado para que lo utilicen los consumidores de sucesos.

Condiciones de uso |


(c) Copyright IBM Corporation 2005, 2006.
Este centro de información está basado en tecnología Eclipse (http://www.eclipse.org)