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

Desarrollo de un consumidor de sucesos con un bean no controlado por mensajes

Un consumidor de sucesos también puede crearse con un bean no controlado por mensajes.

Por qué y cuándo se efectúa esta tarea

Para crear un consumidor de sucesos que no sea un bean controlado por mensajes, 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. Utilice la ayuda de notificación para buscar el destino JMS al que desea suscribirse.

    Cada grupo de sucesos puede asociarse a un tema JMS y cualquier cantidad de colas JMS. Puede consultar la ayuda de notificación para determinar qué destinos están asociados a un grupo de sucesos concreto.

    Para determinar el tema asociado a un grupo de sucesos, utilice el método getJmsTopic(serie) de NotificationHelper y especifique el nombre del grupo de sucesos:
    MessagePort msgPort = notificationHelper.getJmsTopic("sucesos_graves");
    Para determinar las colas asociadas a un grupo de sucesos, utilice el método getJmsQueues(serie):
    MessagePort[] msgPorts =
    notificationHelper.getJmsQueues("sucesos_graves"); 
    El objeto devuelto es un objeto MessagePort que representa un tema JMS o una matriz de objetos MessagePort que representan colas JMS. Una instancia de MessagePort es un objeto derivador que contiene los nombres JNDI del destino y su fábrica de conexiones.
  4. Conéctese al destino. Utilice los métodos getter de MessagePort para recuperar los nombres JNDI del destino y la fábrica de conexiones. A continuación, puede usar las interfaces JMS estándar para conectarse al destino. Con el fragmento de código siguiente se efectúa la suscripción a un tema JMS:
    String connectionFactoryName = msgPort.getConnectionFactoryJndiName();
    String destinationName = msgPort.getDestinationJndiName();
    
    // crear conexión y sesión
    ConnectionFactory connectionFactory =
         (ConnectionFactory) context.lookup(connectionFactoryName);
    Connection connection = connectionFactory.createConnection();
    Session session = connection.createSesion(false,
                                              Session.CLIENT_ACKNOWLEDGE);
    
    // crear consumidor y registrar escucha
    Topic topic = (Topic) context.lookup(destinationName);
    MessageConsumer consumer = session.createConsumer(topic);
    consumer.setMessageListener(this);
    connection.start();
  5. 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);
      // ...
  6. 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 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
        // ...
      }
    }

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_nonMDBEventConsumer.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)