También se puede crear un consumidor de sucesos que no sea un bean controlado por mensaje.
// 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();
notificationHelper.setEventSelector("CommonBaseEvent[@severity > 30]");
Cada grupo de sucesos puede asociarse con un tema JMS único y cualquier número de colas JMS. Puede consultar la ayuda de notificación para averiguar que destinos están asociados con el grupo de sucesos determinado.
Para buscar el tema asociado a un grupo de sucesos, utilice el método getJmsTopic(String) de NotificationHelper, especificando el nombre del grupo de sucesos:MessagePort msgPort = notificationHelper.getJmsTopic("critical_events");Para buscar las colas asociadas con un grupo de sucesos, utilice el método getJmsQueues(String):
MessagePort[] msgPorts = notificationHelper.getJmsQueues("critical_events");El objeto devuelto es un único objeto MessagePort que represente un temas o una matriz de objetos MessagePort que represente colas JMS. Una instancia MessagePort es un objeto de envoltorio que contiene los nombres JNDI del destino y su fábrica de conexiones.
String connectionFactoryName = msgPort.getConnectionFactoryJndiName(); String destinationName = msgPort.getDestinationJndiName(); // crear una conexión y una sesión ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup(connectionFactoryName); Connection connection = connectionFactory.createConnection(); Session session = connection.createSesion(false, Session.CLIENT_ACKNOWLEDGE); // Crear un consumidor y un receptor de registro Topic topic = (Topic) context.lookup(destinationName); MessageConsumer consumer = session.createConsumer(topic); consumer.setMessageListener(this); connection.start();
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); // ...
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. |
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 // ... } }
(c) Copyright IBM Corporation 2005, 2006.
Este centro de información está basado en tecnología Eclipse (http://www.eclipse.org)