WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

Ergebnisse der Brokerverwaltung mit Objektbenachrichtigung in einer Konfigurationsmanager-Proxy-Anwendung überprüfen

Ermitteln Sie mithilfe der Objektbenachrichtigung das Ergebnis einer Anforderung, die von Ihrer Anwendung an das Objekt gestellt wurde.

Der Konfigurationsmanager-Proxy kann Anwendungen benachrichtigen, wenn Befehle ausgeführt oder Änderungen an verwalteten Objekten vorgenommen wurden. Mithilfe des Entwurfsmusters OBSERVER kann Ihre Konfigurationsmanager-Proxy-Anwendung eine Kennung für ein benutzerdefiniertes Objekt definieren, über die eine bestimmte Methode aufgerufen wird, wenn ein Objekt geändert, gelöscht bzw. eine Antwort zu einer zuvor übergebenen Aktion vom Broker zurückgegeben wird.

Der benutzerdefinierte Code muss die Schnittstelle AdministeredObjectListener implementieren. Sie definiert Methoden, die vom Konfigurationsmanager-Proxy aufgerufen werden, wenn ein Ereignis in einem verwalteten Objekt, für das das Empfangsprogramm registriert wurde, auftritt. Die folgenden Methoden werden definiert:

processModify(…)
processModify(…) wird aufgerufen, wenn ein oder mehrere Attribute des verwalteten Objekts, für das das Empfangsprogramm registriert wurde, vom Broker geändert wurden. Folgende Informationen sind in dieser Benachrichtigung durch die Angabe der Argumente für die Methode processModify() enthalten:
  1. Eine Kennung für die AdministeredObject-Instanz, auf die sich die Benachrichtigung bezieht.
  2. Eine Liste mit Zeichenfolgen, die die geänderten Schlüsselnamen enthalten.
  3. Eine Liste mit Zeichenfolgen, die neue Subkomponenten beschreiben, die für das Objekt erstellt wurden (z. B. neue Ausführungsgruppen in einem Broker).
  4. Eine Liste mit Zeichenfolgen, die Subkomponenten beschreiben, die aus dem Objekt entfernt wurden.

Beim Format der Zeichenfolgen, die an die zwei letzten Parameter übergeben werden, handelt es sich um eine interne Darstellung des verwalteten Objekts. Sie können diese Darstellung unter Verwendung der Methode getManagedSubcomponentFromStringRepresentation() in den Typ eines verwalteten Objekts ändern.

Lesen Sie die folgenden zusätzlichen Informationen:

  1. Innerhalb dieser Listen werden Zeichenfolgen zur Erhöhung des Durchsatzes übergeben; der Konfigurationsmanager-Proxy verwendet nur dann verwaltete Objekte für die Erstellung von Ressourcenexemplaren, wenn sie von der aufrufenden Anwendung speziell angefordert werden.
  2. Wenn Sie zum ersten Mal die Methode processModify() für ein Empfangsprogramm aufrufen, enthält der Parameter changed attributes (geänderte Attribute) möglicherweise eine vollständige Gruppe von Attributnamen für das Objekt, wenn die Anwendung eine Batchmethode verwendet, oder es Kommunikationsprobleme zwischen dem Konfigurationsmanager-Proxy und dem Broker gibt.
processDelete(…)

processDelete(…) wird aufgerufen, wenn das Objekt, für das das Empfangsprogramm registriert wurde, aus dem Broker vollständig entfernt wird. An die Methode processDelete(…) wird ein Parameter übergeben – eine Kennung für das verwaltete Objekt, das gelöscht wurde; wenn diese Methode fertig wurde, ist die Kennung des verwalteten Objekt möglicherweise ungültig. Fast zeitgleich mit dem Ereignis processDelete(…) wird das Ereignis processModify(…) an Empfangsprogramme des übergeordneten Elements des gelöschten Objekts gesendet, um eine Änderung in der Liste der Subkomponenten des übergeordneten Elements anzuzeigen.

processActionResponse(…)
Über das Ereignis processActionResponse(…) wird die Anwendung darüber informiert, dass eine Aktion, die zuvor von dieser Anwendung übergeben wurde, abgeschlossen ist. Es wird jeweils nur ein processActionResponse(…)-Ereignis für jede Operation zur Statusänderung an die Konfigurationsmanager-Proxy-Anwendung übergeben. Dieses Ereignis enthält die folgenden Informationen:
  1. Eine Kennung für das verwaltete Objekt, für das eine Anforderung übergeben wurde.
  2. Der Beendigungscode der Anforderung.
  3. Null oder mehr BIP-Nachrichten, die in Zusammenhang mit dem Ergebnis stehen.
  4. Eine Gruppe von (Schlüssel, Wert)-Paaren, die eine detaillierte Beschreibung der übergebenen Anforderung enthalten. Lesen Sie in der Dokumentation die Informationen zur Syntaxanalyse dieser Paare.

Für die Registrierung eines Empfangsprogramms steht jedem verwalteten Objekt eine Methode zur Registrierung (registerListener()) zur Verfügung, die dazu verwendet wird, den Konfigurationsmanager-Proxy anzuweisen, den bereitgestellten Code aufzurufen, wenn ein Ereignis auf diesem Objekt ausgeführt wird. Für Benachrichtigungen von mehreren verwalteten Objekten kann dasselbe Empfangsprogramm für verwaltete Objekte registriert werden. Darüber hinaus können für ein verwaltetes Objekte mehrere Empfangsprogramme für verwaltete Objekte registriert werden.

Im folgenden Beispiel wird ein Empfangsprogramm für das Brokerobjekt registriert und jedes Mal wenn das Objekt modifiziert wird, werden Nachrichten angezeigt.
import com.ibm.broker.config.proxy.*;
import com.ibm.broker.config.proxy.CompletionCodeType;
import java.util.List;
import java.util.ListIterator;
import java.util.Properties;

public class MonitorBroker implements AdministeredObjectListener {

  public static void main(String[] args) {
        
    BrokerProxy b = null;
    try {
      BrokerConnectionParameters bcp =
         new MQBrokerConnectionParameters(
           "localhost",
           1414,
           "");
      b = BrokerProxy.getInstance(bcp);   
    } catch (ConfigManagerProxyException cmpex) {
      System.out.println("Error connecting: "+cmpex);
    }
        
    if (b != null) {
      System.out.println("Connected to broker");
      listenForChanges(b);
      b.disconnect();
    }
  }

  private static void listenForChanges(AdministeredObject obj)
  {
    if (obj != null) {
      obj.registerListener(new MonitorBroker());
      while(true) {
        // thread could do something else here instead
        try {
          Thread.sleep(10000);
        } catch (InterruptedException ex) {
          // ignore
        }
      }
    }
  }
  
  public void processActionResponse(AdministeredObject obj,
                                    CompletionCodeType cc,
                                    List bipMessages,
                                    Properties refProperties) {
    // Ereignis in diesem Beispiel ignoriert
  }
  
  public void processDelete(AdministeredObject deletedObject) {
         // Ereignis in diesem Beispiel ignoriert
  }
  
  public void processModify(AdministeredObject affectedObject,
                            List changedAttributes,
                            List newChildren,
                            List removedChildren) {
    try {
      System.out.println(affectedObject+" has changed:");
      ListIterator e = changedAttributes.listIterator();
      while (e.hasNext()) {
        String changedAttribute = (String) e.next();
        System.out.println("Changed: "+changedAttribute);
      }
      ListIterator e2 = newChildren.listIterator();
      while (e2.hasNext()) {
        String newChildStr = (String) e2.next();
        AdministeredObject newChild =
          affectedObject.getManagedSubcomponentFromStringRepresentation(newChildStr);
        System.out.println("New child: "+newChild);
      }
      ListIterator e3 = removedChildren.listIterator();
      while (e3.hasNext()) {
        String remChildStr = (String) e3.next();
        AdministeredObject removedChild =
          affectedObject.getManagedSubcomponentFromStringRepresentation(remChildStr);
        System.out.println("Removed child: "+removedChild);
      }
    } catch (ConfigManagerProxyPropertyNotInitializedException ex) {
      ex.printStackTrace();
    }
  }
}

Die Methode listenForChanges() registriert eine Instanz der Klasse MonitorBroker für Benachrichtigungen über Brokeränderungen. Bei erfolgreicher Ausführung der Registrierung wird der Hauptthread auf unbestimmte Zeit angehalten, um zu verhindern, dass die Anwendung beendet wird, wenn die Methode einen Wert zurückgibt. Wenn das Empfangsprogramm registriert wurde, wird bei jeder Änderung des Brokers (z. B. wenn eine Ausführungsgruppe hinzugefügt wird) die Methode processModify() aufgerufen. Die Details der jeweiligen Benachrichtigung werden am Bildschirm angezeigt.

Sie müssen für jedes verwaltete Objekt, bei dem Sie Benachrichtigungen wünschen, separate Empfangsprogramme registrieren. Dieselbe Empfangsprogramminstanz kann für mehrere verwaltete Objekte verwendet werden.

Der Empfang der Benachrichtigungen kann auf drei Arten gestoppt werden:
  • AdministeredObject.deregisterListener(Empfangsprogramm für verwaltetes Objekt)
  • ConfigManagerProxy.deregisterListeners()
  • ConfigManagerProxy.disconnect()

Die erste Methode nimmt die Registrierung eines Empfangsprogramms für ein verwaltetes Objekt zurück; mit den anderen zwei Methoden wird die Registrierung aller Empfangsprogramme, die mit der BrokerProxy-Instanz verbunden sind, aufgehoben. Außerdem zeigt die letzte Methode an, dass alle Empfangsprogramme implizit entfernt werden, wenn die Verbindung zum Broker gestoppt wird.

Sie können auch die Schnittstelle AdvancedAdministeredObjectListener implementieren, die zusätzliche Informationen an Anwendungen weitergibt.

Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:21:15


TaskthemaTaskthema | Version 8.0.0.5 | ae33090_