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 Configuration Manager.

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 Configuration Manager. 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 Configuration Manager.

processDelete(…) será chamado se o objeto no qual o listener está registrado for totalmente removido do Configuration Manager. 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 Configuration Manager 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
Notices | Trademarks | Downloads | Library | Support | Feedback
Copyright IBM Corporation 1999, 2006 Last updated: 5월 25, 2006
ae33090_