Verificando os Resultados do Gerenciamento de Domínios Intermediários Utilizando o Configuration Manager Proxy com Notificação de Objetos

Isto faz parte da tarefa maior de desenvolver aplicativos do Configuration Manager Proxy (CMP).

É possível notificar aplicativos sempre que os comandos são concluídos ou sempre que ocorrem alterações em objetos administrados. Utilizando o padrão de design OBSERVER, é possível fornecer ao CMP uma manipulação para um objeto fornecido pelo usuário que tenha um método específico chamado se um objeto for modificado, excluído ou sempre que uma resposta a uma ação enviada anteriormente for retornada do Gerenciador de Configuração.

O código fornecido pelo usuário deve implementar a interface AdministeredObjectListener. Ele define métodos que são chamados pelo CMP quando ocorre um evento em um objeto administrado no qual o listener está registrado. Estes métodos são:
  • processModify(…)
  • processDelete(…)
  • processActionResponse(…)
processModify(…) é chamado sempre que o objeto administrado no qual o listener está registrado tiver um ou mais de seus atributos modificados pelo Gerenciador de Configuração. As informações fornecidas nesta notificação, utilizando os argumentos do método processModify() são:
  1. Manipulação do AdministeredObject ao qual a notificação se refere.
  2. Lista de cadeias contendo os nomes da chave que foram alterados.
  3. Lista de cadeias que descrevem novos subcomponentes recém-criados para o objeto, por exemplo, novos grupos de execução em um intermediário.
  4. Lista de cadeias que descrevem subcomponentes recém-removidos para o objeto.
O formato das cadeias transmitidas para os dois parâmetros finais é uma representação interna do objeto administrado. É possível transformar esta representação em um tipo de objeto administrado utilizando o método getSubcomponentFromString().
Nota:
  1. As cadeias são transmitidas nestas listas para aprimorar o desempenho; o CMP não utiliza recursos que instanciam objetos administrados, a menos que eles sejam especificamente solicitados pelo aplicativo de chamada.
  2. A primeira vez que você chamar o método processModify() para um listener, o parâmetro atributos alterados poderá incluir um conjunto completo de nomes de atributos para o objeto, se o aplicativo estiver utilizando um método de batch ou se o CMP estiver com problemas de comunicação com o Gerenciador de Configuração.

processDelete(…) será chamado se o objeto no qual o listener está registrado for totalmente removido do Gerenciador de Configuração. Fornecido para processDelete(…) é um parâmetro – uma manipulação do objeto administrado que foi excluído; quando este método for retornado, a manipulação do objeto administrado não será mais válida. Quase ao mesmo tempo que um evento processDelete(…) ocorre, é enviado um evento processModify(…) para os listeners do pai do objeto excluído, para anunciar uma alteração na lista de subcomponentes do pai.

processActionResponse(…) é o evento que informa o aplicativo que uma ação anterior enviada por esse aplicativo está concluída e que existe apenas um evento processActionResponse(…) recebido para cada operação de alteração de estado emitida pelo aplicativo CMP. São fornecidas para este evento as seguintes partes de informações:
  1. Uma manipulação do objeto administrado para o qual foi enviado um pedido.
  2. O código de conclusão do pedido.
  3. Um conjunto de zero ou mais mensagens informativas (BIP) associadas ao resultado.
  4. Um conjunto de pares (chave, valor) que descrevem o pedido enviado mais detalhadamente.
Consulte a Referência à API do Configuration Manager Proxy para obter informações sobre como analisar os pares no último parâmetro.

Para registrar um listener, cada objeto administrado tem um método registerListener() utilizado para instruir o CMP a chamar o código fornecido sempre que ocorrer um evento nesse objeto. É possível registrar o mesmo AdministeredObjectListener para notificações de vários objetos administrados. Além disso, é possível registrar vários AdministeredObjectListeners no mesmo objeto administrado.

O exemplo a seguir demonstra isto registrando um listener no objeto de topologia e exibindo uma mensagem sempre que for modificado:
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) {
         // o encadeamento pode fazer algo mais aqui em vez de
      	  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) {
    // Evento ignorado neste exemplo
  }
  
  public void processDelete(AdministeredObject deletedObject) {
  // Evento ignorado neste exemplo
  }
  
  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);
    }

  }
}

O método listenForChanges() tenta registrar uma instância da classe MonitorTopology para notificações de alterações na topologia. Se for bem-sucedido, o encadeamento principal será pausado indefinidamente para evitar que o aplicativo seja encerrado quando o método for retornado. Quando o listener for registrado, sempre que a topologia for alterada - por exemplo, se for incluído um intermediário - o método processModify() será chamado. Isto exibe detalhes de cada notificação na tela.

Existem três maneiras de parar de receber notificações:
  • AdministeredObject.deregisterListener(AdministeredObjectListener)
  • ConfigManagerProxy.deregisterListeners()
  • ConfigManagerProxy.disconnect()
O primeiro método remove o registro de um único listener de um único objeto administrado; os outros dois métodos removem o registro de todos os listeners conectado a essa instância ConfigManagerProxy. Além disso, o método final mostra que todos os listeners serão implicitamente removidos quando a conexão com o Gerenciador de Configuração for parada.
Nota: Você também pode implementar a interface AdvancedAdministeredObjectListener que, quando registrada, gera informações adicionais para aplicativos.
Tarefas relacionadas
Verificando os Resultados do Gerenciamento de Domínios Intermediários Utilizando o Configuration Manager Proxy
Verificando os Resultados do Gerenciamento de Domínios Intermediários Utilizando o Configuration Manager Proxy com Códigos de Retorno
Verificando os Resultados do Gerenciamento de Domínios do Intermediário Utilizando o Configuration Manager Proxy com o Último Código de Conclusão
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ae33090_