Verifica dei risultati della gestione del dominio broker mediante Proxy di Gestione configurazione con notifica dell'oggetto

Questa sezione fa parte dell'attività più ampia di sviluppo delle applicazioni CMP (Configuration Manager Proxy/Proxy di Gestione configurazione).

E' possibile inviare una notifica alle applicazioni ogni volta che i comandi vengono completati oppure ogni volta che vengono apportate modifiche agli oggetti gestiti. Utilizzando il modello di progettazione OBSERVER, è possibile fornire a CMP un handle per un oggetto fornito dall'utente in cui viene richiamato un metodo specifico se un oggetto viene modificato o eliminato oppure ogni volta che Gestione configurazione restituisce una risposta ad un'azione precedentemente inoltrata.

Il codice fornito dall'utente deve implementare l'interfaccia AdministeredObjectListener. Essa definisce i metodi richiamati da CMP quando si verifica un evento su un oggetto gestito su cui il listener è registrato. Tali metodi sono:
  • processModify(…)
  • processDelete(…)
  • processActionResponse(…)
processModify(…) viene richiamato ogni volta che Gestione configurazione modifica uno o più attributi dell'oggetto gestito su cui è registrato il listener. Le informazioni fornite in questa notifica, mediante gli argomenti del metodo processModify() sono:
  1. Handle per AdministeredObject a cui fa riferimento la notifica.
  2. Elenco di stringhe che contengono i nomi chiave modificati.
  3. Elenco di stringhe che descrivono i nuovi componenti secondari creati per l'oggetto, ad esempio, nuovi gruppi di esecuzione in un broker.
  4. Elenco di stringhe che descrivono i componenti secondari rimossi per l'oggetto.
Il formato delle stringhe passate ai due parametri finali è una rappresentazione interna dell'oggetto gestito. E' possibile convertire tale rappresentazione in un tipo di oggetto gestito mediante il metodo getSubcomponentFromString().
Nota:
  1. Le stringhe vengono passate all'interno di tali elenchi per migliorare le prestazioni; CMP non utilizza risorse che istanziano oggetti gestiti a meno che esse non vengano richieste in modo specifico dall'applicazione chiamante.
  2. La prima volta che si richiama il metodo processModify() per un listener, il parametro changed attributes può contenere un insieme completo di nomi di attributi per l'oggetto, se l'applicazione utilizza un metodo batch oppure se CMP rileva problemi di comunicazione con Gestione configurazione.

processDelete(…) viene richiamato se l'oggetto con cui il listener è registrato viene completamente rimosso da Gestione configurazione. A processDelete(…) viene fornito un parametro - un handle per l'oggetto gestito eliminato; una volta ritornato tale metodo, l'handle dell'oggetto gestito potrebbe non essere più valido. Circa nello stesso momento in cui si verifica un evento processDelete(…), viene inviato un evento processModify(…) ai listener dell'oggetto principale dell'oggetto eliminato, per indicare una modifica nell'elenco dei componenti secondari del componente principale.

processActionResponse(…) è l'evento che indica all'applicazione che un'azione precedente inoltrata da tale applicazione è stata completata ed esiste un solo evento processActionResponse(…) ricevuto per ciascuna operazione di modifica dello stato inviata dall'applicazione CMP. A questo evento vengono fornite le seguenti informazioni:
  1. Un handle per l'oggetto gestito per cui è stata inoltrata una richiesta.
  2. Il codice di completamento della richiesta.
  3. Un insieme di zero o più messaggi informativi (BIP) associati al risultato.
  4. Un insieme di coppie (chiave, valore) che descrive dettagliatamente la richiesta inoltrata.
Consultare Proxy di Gestione configurazione API Reference per informazioni relative all'analisi delle coppie nell'ultimo parametro.

Per registrare un listener, ciascun oggetto gestito ha un metodo registerListener() utilizzato per indicare a CMP di richiamare il codice fornito ogni volta che si verifica un evento su tale oggetto. E' possibile registrare lo stesso AdministeredObjectListener per le notifiche da più oggetti gestiti. Inoltre, è possibile registrare più AdministeredObjectListeners sullo stesso oggetto gestito.

L'esempio riportato di seguito illustra questo concetto registrando un listener sull'oggetto della topologia e visualizzando un messaggio ogni volta che viene eseguita una modifica:
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) {
    // Event ignored in this example
  }
  
  public void processDelete(AdministeredObject deletedObject) {
  	// Event ignored in this example
  }
  
  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);
    }

  }
}

Il metodo listenForChanges() prova a registrare un'istanza della classe MonitorTopology per le notifiche delle modifiche alla topologia. In caso di esito positivo, il thread principale si arresta per un periodo indefinito per impedire all'applicazione di uscire una volta ritornato il metodo. Una volta registrato il listener, ogni volta che viene modificata la topologia - ad esempio, se viene aggiunto un broker - viene richiamato il metodo processModify(). Vengono visualizzati i dettagli di ciascuna notifica.

E' possibile interrompere la ricezione delle notifiche in tre modi:
  • AdministeredObject.deregisterListener(AdministeredObjectListener)
  • ConfigManagerProxy.deregisterListeners()
  • ConfigManagerProxy.disconnect()
Il primo metodo annulla la registrazione di un singolo listener da un singolo oggetto gestito; gli altri due metodi annullano la registrazione di tutti i listener collegati a quella istanza ConfigManagerProxy. Inoltre, il metodo finale mostra che tutti i listener vengono rimossi in modo implicito quando viene arrestata la connessione a Gestione configurazione.
Nota: E' possibile anche implementare l'interfaccia AdvancedAdministeredObjectListener che, quando registrata, fornisce ulteriori informazioni alle applicazioni.
Attività correlate
Verifica dei risultati della gestione del dominio broker mediante Proxy di Gestione configurazione
Verifica dei risultati della gestione del dominio broker mediante Proxy di Gestione configurazione con codici di ritorno
Verifica dei risultati della gestione del dominio broker mediante Proxy di Gestione configurazione con l'ultimo codice di completamento
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ae33090_