Las notificaciones de los sucesos de conexión permiten al cliente de Message Queue escuchar los sucesos de cierre y reconexión, y tomar las medidas oportunas en función del tipo de notificación y del estado de conexión. Por ejemplo, si se produce un error y el cliente se vuelve a conectar a otro agente, es posible que una aplicación quiera limpiar el estado de su transacción y proceder con una nueva.
Si el proveedor de Message Queue detecta un problema grave con una conexión, invocará a la escucha de excepción registrada del objeto de conexión. Llama al método onException y le envía un argumento JMSException que describe el problema. El proveedor de Message Queue también ofrece un API de notificación de sucesos que permite al tiempo de ejecución del cliente informar a la aplicación sobre los cambios que se produzcan en el estado de la conexión. El API de notificación se define por los siguientes elementos:
El paquete com.sun.messaging.jms.notification, que define la escucha de sucesos y los objetos de suceso de notificaciones.
La interfaz com.sun.messaging.jms.Connection, que define las extensiones de la interfaz javax.jms.Connection.
Las siguientes secciones describen los eventos que pueden desencadenar una notificación y explican cómo crear una escucha de sucesos.
La siguiente tabla muestra una lista de los sucesos que puede devolver la escucha de sucesos.
Tenga en cuenta que la escucha de excepción de JMS no se invoca cuando se produce un suceso de conexión. La escucha de excepciones sólo se invoca cuando el tiempo de ejecución del cliente ha agotado sus intentos de reconexión. El tiempo de ejecución del cliente siempre invoca la escucha de sucesos antes que la escucha de excepciones.
Tabla 1–8 Sucesos de notificación
Tipo de suceso |
Significado |
---|---|
ConnectionClosingEvent |
El tiempo de ejecución del cliente de Message Queue genera este suceso cuando el agente le notifica que está a punto de cerrarse una conexión debido a que el administrador ha solicitado el cierre. |
ConnectionClosedEvent |
El tiempo de ejecución del cliente de Message Queue genera este suceso cuando se cierra una conexión debido a un error del agente o porque el administrador haya solicitado cerrarla o reiniciarla. Cuando una escucha de sucesos recibe un ConnectionClosedEvent,, la aplicación puede utilizar el método getEventCode() del suceso recibido para obtener un código de sucesos que especifique la causa del cierre. |
ConnectionReconnectedEvent |
El tiempo de ejecución del cliente de Message Queue ha vuelto a conectar con un agente. Este agente podría ser el mismo con el que el cliente estaba conectado antes u otro diferente. Una aplicación puede utilizar el método getBrokerAddress del suceso recibido para obtener la dirección del agente con el que ha vuelto a establecer conexión. |
ConnectionReconnectFailedEvent |
El tiempo de ejecución del cliente de Message Queue no ha conseguido reconectar con un agente. Siempre que un intento de reconexión falla, el tiempo de conexión genera un nuevo suceso y lo transmite a la escucha de sucesos. La escucha de excepción de JMS no se invoca cuando se produce un suceso de conexión. Sólo se invoca cuando el tiempo de ejecución del cliente ha agotado sus intentos de reconexión. El tiempo de ejecución del cliente siempre invoca la escucha de sucesos antes que la escucha de excepciones. |
El siguiente código de ejemplo muestra cómo establecer una escucha de sucesos de conexión. Siempre que se produce un suceso de conexión, el tiempo de ejecución del cliente invocará el método onEvent de la escucha del suceso.
//crear una fábrica de conexión de MQ. com.sun.messaging.ConnectionFactory factory = new com.sun.messaging.ConnectionFactory(); //crear una conexión de MQ. com.sun.messaging.jms.Connection connection = (com.sun.messaging.jms.Connection )factory.createConnection(); //construir una escucha de sucesos de MQ. La escucha implementa //com.sun.messaging.jms.notification.EventListener interface. com.sun.messaging.jms.notification.EventListener eListener = new ApplicationEventListener(); //establecer una escucha de sucesos en la conexión MQ. connection.setEventListener ( eListener );
En este ejemplo, una aplicación elige ordenar a su escucha de sucesos que registre el evento de conexión en el sistema de registro de la aplicación:
public class ApplicationEventListener implements com.sun.messaging.jms.notification.EventListener { vacío público onEvent ( com.sun.messaging.jms.notification.Event connEvent ) { registro (connEvent); } registro de vacío privado ( com.sun.messaging.jms.notification.Event connEvent ) { String eventCode = connEvent.getEventCode(); String eventMessage = connEvent.getEventMessage(); //escribir información de eventos en el flujo de salida. } }