WebSphere WebSphere Enterprise Service Bus, Version 6.0.1 Sistemas operativos: AIX, HP-UX, Linux, Solaris, Windows

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

Un consumidor de sucesos J2EE se implementa como bean controlado por mensajes, que se asocia a un destino JMS y a una fábrica de conexiones en tiempo de despliegue. Para recibir sucesos, siga estos pasos:

Pasos para realizar esta tarea

  1. Obtenga una ayuda de notificación. Un consumidor de sucesos JMS utiliza una ayuda de notificación para identificar destinos JMS asociados a un grupo de sucesos, para convertir mensajes JMS recibidos en notificaciones de sucesos y para realizar el filtrado de sucesos recibidos. Para obtener una ayuda de notificación, utilice la fábrica de ayudas de notificación, que es una instancia de NotificationHelperFactory enlazada a un espacio de nombres JNDI. En el fragmento de código siguiente se usa una fábrica de ayudas de notificación para obtener una ayuda de notificación.
    // Obtener 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 ayuda de notificación
    NotificationHelper notificationHelper =
      nhFactory.getNotificationHelper();
                                          
  2. Opcional: Especifique el selector de sucesos. Si desea filtrar los sucesos recibidos, puede usar el método setEventSelector() para establecer un selector de sucesos en la ayuda de notificación. Su consumidor de sucesos puede usar la ayuda de notificación para comprobar sucesos recibidos en relación con el selector de sucesos. En el fragmento de código siguiente se establece un selector de sucesos que especifica sucesos con una gravedad superior a 30 (aviso).
    notificationHelper.setEventSelector("CommonBaseEvent[@severity > 30]");
  3. Convierta los mensajes recibidos en notificaciones de mensajes.

    En el método onMessage() de su dispositivo de escucha, utilice la ayuda de notificación para convertir cada mensaje JMS recibido en una matriz que contenga una notificación de suceso. (Si el suceso no coincide con el selector de sucesos especificado en la ayuda de notificación, la matriz estará 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 sucesos que convenga. Cada notificación de suceso posee 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 en el grupo de sucesos asociado al destino. Esto significa que se ha enviado un nuevo suceso o que un suceso existente ha cambiado de modo que ahora coincide con la definición del grupo de sucesos. La notificación también contiene datos los completos sobre el suceso.

    REMOVE_EVENT

    _NOTIFICATION_TYPE

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

    UPDATE_EVENT

    _NOTIFICATION_TYPE

    Un suceso almacenado en la base de datos de sucesos se ha actualizado de modo que no cambia su pertenencia al grupo de sucesos asociado al destino. La notificación también contiene datos completos sobre el suceso.
    Utilice el método getNotificationType() de EventNotification para comprobar el tipo de notificación de cada notificación recibida. En función del tipo de notificación, puede determinar si el consumidor de sucesos debe realizar algún proceso adicional de la notificación y qué tipo de datos del suceso contiene la notificación:
    • Si el tipo de notificación es CREATE_EVENT_NOTIFICATION_TYPE o UPDATE_EVENT_NOTIFICATION_TYPE, su consumidor puede usar 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, su consumidor puede usar EventNotification.getGlobalInstanceId() para obtener 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é hacer a continuación

En su descriptor de despliegue, un bean controlado por mensajes debe asociarse a un puerto de escucha, que especifica un destino JMS y una fábrica de conexiones. Debe crear un puerto de escucha para su consumidor de sucesos antes de desplegar el MDB, de forma que especifique 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 de escucha CommonEventInfrastructure_ListenerPort cuando despliegue el MDB. El servidor de sucesos utiliza este puerto de escucha y no está destinado a que lo utilicen los consumidores de sucesos.

Task topic

Condiciones de uso | Evalúe esta página

Icono de fecha y horaÚltima actualización: 1 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. Reservados todos los derechos.
Este centro de información está basado en tecnología Eclipse. (http://www.eclipse.org)