Versionshinweise zu Sun Java System Message Queue 4.1

Verbindungsereignisbenachrichtigung

Verbindungsereignisbenachrichtigungen ermöglichen einem Message Queue-Client das Schließen und erneute Verbinden von Ereignissen zu überwachen und dem Benachrichtigungstyp und Verbindungsstatus entsprechende Aktionen auszuführen. Wenn es beispielsweise zu einem Failover kommt und der Client mit einem anderen Broker erneut verbunden wird, wird in einer Anwendung möglicherweise der Transaktionsstatus bereinigt, um mit einer neuen Transaktion fortzufahren.

Wenn der Message Queue-Anbieter ein schwerwiegendes Problem mit einer Verbindung ermittelt, ruft dieser den registrierten Ausnahme-Listener des Verbindungsobjekts auf. Er ruft die onException-Methode des Listeners auf, und übergibt dieser ein JMSException-Argument, welches das Problem beschreibt. Der Message Queue-Anbieter bietet zudem eine Ereignisbenachrichtigungs-API, die es der Client-Laufzeit ermöglicht, die Anwendung über Änderungen des Verbindungsstatus zu informieren. Die Benachrichtigungs-API wird durch die folgenden Elemente definiert:

In den folgenden Abschnitten werden die Ereignisse beschrieben, die Benachrichtigungen auslösen können, und wie ein Ereignis-Listener erstellt wird.

Verbindungsereignisse

In der folgenden Tabelle sind die Ereignisse aufgelistet und beschrieben, die vom Ereignis-Listener zurückgegeben werden können.

Beachten Sie, dass der JMS-Ausnahme-Listener nicht aufgerufen wird, wenn ein Verbindungsereignis ausgelöst wird. Der Ausnahme-Listener wird nur dann aufgerufen, wenn die Client-Laufzeit die maximale Anzahl an Versuchen zum Wiederherstellen der Verbindung erreicht hat. Die Client-Laufzeit ruft den Ereignis-Listener immer vor dem Ausnahme-Listener auf.

Tabelle 1–8 Benachrichtigungsereignisse

Ereignistyp 

Bedeutung 

ConnectionClosingEvent

Die Message Queue-Client-Laufzeit generiert dieses Ereignis, sobald sie die Benachrichtigung vom Broker empfängt, dass eine Verbindung aufgrund einer Administratoranforderung zum Herunterfahren geschlossen wird. 

ConnectionClosedEvent

Die Message Queue-Client-Laufzeit generiert dieses Ereignis, sobald eine Verbindung aufgrund eines Broker-Fehlers geschlossen wird oder diese aufgrund einer Administratoranforderung zum Herunterfahren oder Neustarten geschlossen wird. 

Wenn ein Ereignis-Listener ein ConnectionClosedEvent-Ereignis empfängt, kann die Anwendung mithilfe der getEventCode()-Methode des empfangenen Ereignisses einen Ereigniscode abrufen, der die Ursache für den Schließvorgang angibt.

ConnectionReconnectedEvent

Die Verbindung der Message Queue-Client-Laufzeit und einem Broker wurde wiederhergestellt. Hierbei kann es sich um denselben Broker handeln, mit dem der Client zuvor bereits verbunden war, oder um einen anderen Broker.  

Eine Anwendung kann mithilfe der getBrokerAddress-Methode des empfangenen Ereignisses die Adresse des Brokers abrufen, mit dem diese erneut verbunden wurde.

ConnectionReconnectFailedEvent

Die Verbindung zwischen der Message Queue-Client-Laufzeit und einem Broker konnte nicht wiederhergestellt werden. Bei jedem fehlgeschlagenen Verbindungsversuch generiert die Laufzeit ein neues Ereignis und sendet dieses zum Ereignis-Listener. 

Der JMS-Ausnahme-Listener wird nicht aufgerufen, wenn ein Verbindungsereignis ausgelöst wird. Er wird nur dann aufgerufen, wenn die Client-Laufzeit die maximale Anzahl an Versuchen zum Wiederherstellen der Verbindung erreicht hat. Die Client-Laufzeit ruft den Ereignis-Listener immer vor dem Ausnahme-Listener auf.  

Erstellen eines Ereignis-Listeners

Das folgende Codebeispiel zeigt, wie ein Verbindungs-Ereignis-Listener festgelegt wird. Bei jedem Verbindungsereignis wird die onEvent -Methode des Ereignis-Listeners von der Client-Laufzeit aufgerufen.

//MQ-Verbindungsfactory erstellen.

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

//MQ-Verbindung erstellen.

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

//MQ -Ereignis-Listener erstellen. Der Listener implementiert
//com.sun.messaging.jms.notification.EventListener-Schnittstelle.

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

//Ereignis-Listener für MQ-Verbindung festlegen.

connection.setEventListener ( eListener );

Beispiele für Ereignis-Listener

In diesem Beispiel erfasst der Ereignis-Listener der Anwendung das Verbindungsereignis im Protokollsystem der Anwendung:

public class ApplicationEventListener implementiert
				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();
    	  //Ereignisinformationen in den Ausgabe-Stream schreiben
     	}
}