Ergebnisse der Brokerdomänenverwaltung unter Verwendung des Konfigurationsmanager-Proxys mit Objektbenachrichtigung überprüfen

Dies ist eine der Tasks, die in Zusammenhang mit der Entwicklung Ihrer Konfigurationsmanager-Proxy-Anwendungen ausgeführt werden.

Sie haben die Möglichkeit, Anwendungen zu benachrichtigen, wenn Befehle ausgeführt oder Änderungen an verwalteten Objekten vorgenommen wurden. Mit Hilfe des Entwurfsmusters OBSERVER kann eine Kennung für ein benutzerdefiniertes Objekt an den CMP übergeben werden, über die eine bestimmte Methode aufgerufen wird, wenn ein Objekt geändert, gelöscht bzw. eine Antwort zu einer zuvor übergebenen Aktion vom Konfigurationsmanager zurückgegeben wird.

Der benutzerdefinierte Code muss die Schnittstelle AdministeredObjectListener implementieren. Sie definiert Methoden, die vom CMP aufgerufen werden, wenn ein Ereignis in einem verwalteten Objekt, für das das Empfangsprogramm registriert wurde, auftritt. Dazu gehören die folgenden Methoden:
  • processModify(…)
  • processDelete(…)
  • processActionResponse(…)
processModify(…) wird aufgerufen, wenn ein oder mehrere Attribute des verwalteten Objekts, für das das Empfangsprogramm registriert wurde, vom Konfigurationsmanager geändert wurden. Folgende Informationen sind in dieser Benachrichtigung durch die Angabe der Argumente für die Methode processModify() enthalten:
  1. 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 getSubcomponentFromString() in den Typ eines verwalteten Objekts ändern.
Anmerkung:
  1. Innerhalb dieser Listen werden Zeichenfolgen zur Erhöhung des Durchsatzes übergeben; der CMP 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 CMP und dem Konfigurationsmanager gibt.

processDelete(…) wird aufgerufen, wenn das Objekt, für das das Empfangsprogramm registriert wurde, aus dem Konfigurationsmanager 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.

Ü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 CMP-Anwendung übergeben. Folgende Informationen werden an dieses Ereignis übergeben:
  1. Eine Kennung für das verwaltete Objekt, für das eine Anforderung übergeben wurde.
  2. Der Beendigungscode der Anforderung.
  3. Null oder mehrere 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.
Weitere Informationen zur Syntaxanalyse der Paare in den letzten Parametern finden Sie im Handbuch Konfigurationsmanager-Proxy API Reference.

Für die Registrierung eines Empfangsprogramms steht jedem verwalteten Objekt eine Methode zur Registrierung (registerListener()) zur Verfügung, die dazu verwendet wird, den CMP 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 Topologieobjekt registriert, und jedes Mal wenn das Objekt modifiziert wird, werden Nachrichten angezeigt.
import com.ibm.broker.config.proxy.*;
import com.ibm.broker.config.common.CompletionCodeType;
import java.util.List;
import java.util.ListIterator;
import java.util.Properties;

public class MonitorTopology implements AdministeredObjectListener {

  public static void main(String[] args) {
        
    ConfigManagerProxy cmp = null;
    try {
      ConfigManagerConnectionParameters cmcp =
         new MQConfigManagerConnectionParameters(
           "localhost",
           1414,
           "");
      cmp = ConfigManagerProxy.getInstance(cmcp);
    } catch (ConfigManagerProxyException cmpex) {
      System.out.println("Error connecting: "+cmpex);
    }
        
    if (cmp != null) {
      System.out.println("Connected to Config Manager!");
      TopologyProxy topology = cmp.getTopology();
      listenForChanges(topology);
      cmp.disconnect();
    }
  }

  private static void listenForChanges(AdministeredObject obj)
  {
    try {
      if (obj != null) {
      	obj.registerListener(new MonitorTopology());
      	while(true) {
         // thread could do something else here instead
      	  try {
      	    Thread.sleep(10000);
      	  } catch (InterruptedException ex) {
      	    // ignore
      	  }
        }
      }
    } catch(ConfigManagerProxyPropertyNotInitializedException
                                                      ex) {
        System.err.println("Comms problem! "+ex);
    }    
  }
  
  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) {

    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.getSubcomponentFromString(newChildStr);
      System.out.println("New child: "+newChild);
    }
    ListIterator e3 = removedChildren.listIterator();
    while (e3.hasNext()) {
      String remChildStr = (String) e3.next();
      AdministeredObject removedChild =
        affectedObject.getSubcomponentFromString(remChildStr);
      System.out.println("Removed child: "+removedChild);
    }

  }
}

Die Methode listenForChanges() registriert eine Instanz der Klasse MonitorTopology für Benachrichtigungen über Topologieä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 der Topologie (z. B. wenn ein Broker hinzugefügt wird) die Methode processModify() aufgerufen, und es werden die Details der jeweiligen Benachrichtigung am Bildschirm angezeigt.

Der Empfang von 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 Instanz des Konfigurationsmanager-Proxys verbunden sind, aufgehoben. Darüber hinaus zeigt die letzte Methode an, dass alle Empfangsprogramme implizit entfernt werden, wenn die Verbindung zum Konfigurationsmanager gestoppt wird.
Anmerkung: Sie können auch die Schnittstelle AdvancedAdministeredObjectListener implementieren, die zusätzliche Informationen an Anwendungen weitergibt.
Zugehörige Tasks
Ergebnisse der Brokerdomänenverwaltung unter Verwendung des Konfigurationsmanager-Proxys überprüfen
Ergebnisse der Brokerdomänenverwaltung unter Verwendung des Konfigurationsmanager-Proxys mit Rückkehrcodes überprüfen
Überprüfung der Ergebnisse der Brokerdomänenverwaltung unter Verwendung des Konfigurationsmanager-Proxys mit dem letzten Beendigungscode
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ae33090_