Comprobación de los resultados de la gestión de dominio de intermediarios utilizando el Proxy del Gestor de configuración con notificación de objetos

Esto forma parte de la tarea global para el desarrollo de las aplicaciones del Proxy del Gestor de configuración (CMP).

Se puede enviar una notificación a las aplicaciones cada vez que finalice un mandato o siempre que se produzcan cambios en objetos administrados. Utilizando el patrón de diseño OBSERVER, se puede suministrar al CMP un manejador para un objeto suministrado por el usuario que haya invocado un objeto específico si un objeto se modifica o suprime o siempre que se devuelve una respuesta a una acción sometida anteriormente desde el Gestor de configuración.

El código suministrado por el usuario ha de implementar la interfaz AdministeredObjectListener. Define métodos que invoca el CMP cuando se produce un suceso en un objeto administrado para el que está registrado el escucha. Estos métodos son:
  • processModify(…)
  • processDelete(…)
  • processActionResponse(…)
processModify(…) se invoca siempre que el objeto administrado para el que está registrado el escucha tiene uno o más de sus atributos modificados por el Gestor de configuración. La información facilitada en la notificación, utilizando los argumentos del método processModify() son:
  1. Un manejador para el AdministeredObject al que se refiere la notificación.
  2. Una lista de series de caracteres que contiene los nombres de claves que se han cambiado.
  3. Una lista de series de caracteres que describen todos los nuevos subcomponentes que se acaben de crear para el objeto. Por ejemplo, nuevos grupos de ejecución en un intermediario.
  4. Una lista de series de caracteres que describen todos los nuevos subcomponentes que se acaben de suprimir para el objeto.
El formato de las series de caracteres pasadas a los dos parámetros finales es una representación interna de los objetos administrados. Es posible convertir esta representación en un tipo de objeto administrado usando el método getSubcomponentFromString().
Nota:
  1. Las series de caracteres se pasan dentro de estas listas para mejorar el rendimiento; el CMP no utiliza objetos administrados que creen instancias de recursos a menos que la aplicación que efectúa la llamada lo solicite específicamente.
  2. La primera vez que llame al método processModify() para un escucha, el parámetro changed attributes puede incluir un conjunto completo de nombres de atributos para el objeto si la aplicación está utilizando un método de proceso por lotes o si el CMP está experimentando problemas de comunicación con el Gestor de configuración.

processDelete(…) se invoca si el objeto con el que está registrado el escucha se elimina totalmente del Gestor de configuración. Suministrado para processDelete(…) existe un parámetro – un manejador para el objeto administrado que se ha suprimido; cuando el método vuelva, es posible que que manejador del objeto administrado ya no sea válido. Más o menos al mismo tiempo que se produce un suceso processDelete(…), se envía un suceso processModify(…) a los escuchas del padre del objeto suprimido para anunciar un cambio en la lista de subcomponentes del padre.

processActionResponse(…) es el suceso que informa a la aplicación de que ha finalizado una acción sometida por dicha aplicación y se recibe únicamente un suceso processActionResponse(…) para cada operación de cambio de estado emitida por la aplicación de CMP. Para este suceso se facilitan los siguientes elementos de información:
  1. Un manejador para el objeto administrado para el que se sometió una petición.
  2. El código de terminación de la petición.
  3. Un conjunto de cero o más mensajes informativos (BIP) asociado al resultado.
  4. Un conjunto de pares (clave, valor) que describe la petición sometida más detalladamente.
Consulte la referencia de API del Proxy del Gestor de configuración para más información sobre el análisis de pares en el último parámetro.

Para registrar un escucha, cada objeto administrado tiene un método registerListener() que se utiliza para indicar al CMP que llame al código suministrado siempre que se produzca un suceso en dicho objeto. Es posible registrar el mismo AdministeredObjectListener para las notificaciones de múltiples objetos administrados. Además, es posible registrar varios AdministeredObjectListeners para el mismo objeto administrado.

El siguiente ejemplo muestra lo anterior registrando un escucha en el objeto de la topología y visualizando un mensaje siempre que se modifique:
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) {
         // la hebra podría hacer algo distinto aquí
      	  try {
      	    Thread.sleep(10000);
      	  } catch (InterruptedException ex) {
      	    // ignorar
      	  }
        }
      }
    } catch(ConfigManagerProxyPropertyNotInitializedException
                                                      ex) {
        System.err.println("Comms problem! "+ex);
    }    
  }
  
  public void processActionResponse(AdministeredObject obj,
                                    CompletionCodeType cc,
                                    List bipMessages,
                                    Properties refProperties) {
    // Suceso ignorado en este ejemplo
  }
  
  public void processDelete(AdministeredObject deletedObject) {
  // Suceso ignorado en este ejemplo
  }
  
  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);
    }

  }
}

El método listenForChanges() intenta registrar una instancia de la clase MonitorTopology para las notificaciones de cambios en la topología. Si la operación es satisfactoria, la hebra principal queda en pausa indefinidamente para impedir que la aplicación salga cuando el método vuelva. Cuando el escucha está registrado, siempre que la topología cambia - por ejemplo si se añade una intermediario - se llama al método processModify(). Esto visualiza en la pantalla detalles de cada notificación.

Las notificaciones de recepción se pueden detener de tres formas:
  • AdministeredObject.deregisterListener(AdministeredObjectListener)
  • ConfigManagerProxy.deregisterListeners()
  • ConfigManagerProxy.disconnect()
El primer método anula el registro de un solo escucha de un solo objeto administrado; los dos otros métodos anulan el registro de todos los escuchas conectados a esta instancia de ConfigManagerProxy. Además, el método final muestra que se eliminan implícitamente todos los escuchas cuando se detiene la conexión con el Gestor de configuración.
Nota: También se puede implementar la interfaz AdvancedAdministeredObjectListener que, cuando está registrada, produce más información para las aplicaciones.
Tareas relacionadas
Comprobación de los resultados de la gestión del dominio de intermediarios utilizando el Proxy del Gestor de configuración
Comprobación de los resultados de la gestión del dominio de intermediarios utilizando el Proxy del Gestor de configuración con códigos de retorno
Comprobación de los resultados de la gestión de dominios de intermediarios utilizando el Proxy del Gestor de configuración con el último código de terminación
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ae33090_