Notes de version de Sun Java System Message Queue 4.1

Notification d'événements de connexion

Les notifications d'événements de connexion permettent à un client Message Queue d'écouter les événements de fermeture et de reconnexion et d'entreprendre l'action appropriée selon le type de notification et l'état de connexion. Par exemple, lorsqu'un basculement se produit et que le client est reconnecté à un autre courtier, une application peut vouloir nettoyer l'état de transaction correspondant et utiliser une nouvelle transaction.

Si le fournisseur Message Queue détecte un problème sérieux au niveau d'une connexion, celui-ci appelle le listener d'exceptions enregistrées de l'objet de connexion. Il appelle la méthode onException du listener et lui transmet un argument JMSException de description du problème. Le fournisseur Message Queue offre également une API de notification d'événements permettant à l'exécution client d'informer l'application des modifications de l'état de connexion. L'API de notification est définie à l'aide des éléments suivants :

Les sections suivantes présentent les événements pouvant déclencher une notification, ainsi que la procédure de création d'un listener d'événements.

Événements de connexion

Le tableau suivant répertorie et décrit les événements pouvant être retournés par le listener d'événements.

Notez que le listener d'exceptions JMS n'est pas appelé lorsqu'un événement de connexion se produit. Celui-ci est uniquement appelé une fois que l'exécution client a épuisé ses tentatives de reconnexion. L'exécution client appelle toujours le listener d'événements avant le listener d'exceptions.

Tableau 1–8 Événements de notification

Type d'événement 

Signification 

ConnectionClosingEvent

L'exécution client Message Queue génère cet événement à la réception d'une notification du courtier informant de la fermeture d'une connexion suite à la demande d'arrêt de la part de l'administrateur. 

ConnectionClosedEvent

L'exécution client Message Queue génère cet événement à la fermeture d'une connexion suite à une erreur du courtier ou à la demande d'arrêt ou de redémarrage de la part de l'administrateur. 

Lorsqu'un listener d'événements reçoit un ConnectionClosedEvent, l'application peut utiliser la méthode getEventCode() de l'événement reçu pour obtenir un code d'événement spécifiant la cause de la fermeture.

ConnectionReconnectedEvent

L'exécution client Message Queue s'est reconnectée à un courtier. Il peut s'agir du même courtier auquel le client était précédemment connecté ou d'un autre courtier.  

L'application peut utiliser la méthode getBrokerAddress de l'événement reçu pour obtenir l'adresse du courtier auquel elle a été reconnectée.

ConnectionReconnectFailedEvent

L'exécution client Message Queue n'est pas parvenue à se reconnecter à un courtier. Chaque fois qu'une tentative de reconnexion échoue, l'exécution génère un nouvel événement et le transmet au listener d'événements. 

Le listener d'exceptions JMS n'est pas appelé lorsqu'un événement de connexion se produit. Celui-ci est uniquement appelé une fois que l'exécution client a épuisé ses tentatives de reconnexion. L'exécution client appelle toujours le listener d'événements avant le listener d'exceptions.  

Création d'un listener d'événements

L'exemple de code suivant illustre la procédure de définition d'un listener d'événements de connexion. À chaque événement de connexion, la méthode onEvent du listener d'événements est invoquée par l'exécution client.

//créer une fabrique de connexion MQ.

com.sun.messaging.ConnectionFactory factory =
        new com.sun.messaging.ConnectionFactory();

//créer une connexion MQ.

com.sun.messaging.jms.Connection connection = 
       (com.sun.messaging.jms.Connection )factory.createConnection();

//définir un listener d'événements MQ.  Ce dernier implémente l'interface
//com.sun.messaging.jms.notification.EventListener.

com.sun.messaging.jms.notification.EventListener eListener = 
       new ApplicationEventListener();

//définir le listener d'événements sur la connexion MQ.

connection.setEventListener ( eListener );

Exemples de listener d'événements

Dans cet exemple, une application détermine que son listener d'événements consigne l'événement de connexion dans son propre système de journalisation :

la classe publique ApplicationEventListener implémente
				com.sun.messaging.jms.notification.EventListener {

public void onEvent ( com.sun.messaging.jms.notification.Event connEvent ) {
      	log (connEvent);
}
private void log ( com.sun.messaging.jms.notification.Event connEvent ) {
	      String eventCode = connEvent.getEventCode(); 
      	String eventMessage = connEvent.getEventMessage();
    	  //écrire les informations de l'événement dans le flux de sortie.
     	}
}