Notas de la versión de Sun Java System Message Queue 4.1

Notificación de sucesos de conexión

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:

Las siguientes secciones describen los eventos que pueden desencadenar una notificación y explican cómo crear una escucha de sucesos.

Sucesos de conexión

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.  

Crear una escucha de sucesos

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 );

Ejemplos de escuchas de sucesos

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.
     	}
}