Isto faz parte da maior tarefa de desenvolver aplicativos do Configuration Manager Proxy (CMP) e é um dos recursos aprimorados do CMP.
import java.util.Enumeration; import com.ibm.broker.config.proxy.*; public class QuerySubscriptions { 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!"); querySubscriptionsByTopic(cmp, "shares%"); cmp.disconnect(); } } private static void querySubscriptionsByTopic( ConfigManagerProxy cmp, String topic) { try { SubscriptionsProxy matchingSubscriptions = cmp.getSubscriptions(topic, // filtrar por tópico null, // não filtrar por intermediário null, // não filtrar por nome do usuário null, // não filtrar por subponto null, // sem data de início, null); // sem data de encerramento Enumeration e = matchingSubscriptions.elements(); int matches = matchingSubscriptions.getSize(); System.out.println("Found "+matches+" matches:"); while (e.hasMoreElements()) { Subscription thisSub = (Subscription)e.nextElement(); System.out.println("-----"); System.out.println("Broker="+thisSub.getBroker()); System.out.println("Topic="+thisSub.getTopicName()); System.out.println("Client="+thisSub.getClient()); System.out.println("Filter="+thisSub.getFilter()); System.out.println("Reg date=" +thisSub.getRegistrationDate()); System.out.println("User="+thisSub.getUser()); System.out.println("Sub point=" +thisSub.getSubscriptionPoint()); } } catch (ConfigManagerProxyException e) { e.printStackTrace(); } } }
O método que consulta o conjunto de assinaturas ativas é ConfigManagerProxy.getSubscriptions(), que define a consulta utilizada para filtrar as assinaturas. O tópico, intermediário, ID do usuário e parâmetros subscriptionPoint são cadeias que podem incluir o caractere % para indicar caracteres curinga.
Os parâmetros startDate e endDate são de tipo GregorianCalendar, que podem ser utilizados para restringir o tempo de registro das assinaturas correspondentes. Para todos os parâmetros para este método, um valor nulo ou, no caso de argumentos de cadeia, um valor vazio significa "não filtrar por este atributo".
No exemplo anterior, o único parâmetro não nulo fornecido para este método é a cadeia do tópico shares%, que instrui o CMP a retornar todas as assinaturas cujo nome de tópico começa com "shares".
É retornada deste método uma instância de SubscriptionsProxy, que representa os resultados da consulta. Como esta classe é herdada de AdministeredObject, os atributos deste objeto são fornecidos assincronamente a partir do Configuration Manager e, portanto, os métodos que interrogam seus atributos podem ser bloqueados temporariamente enquanto o CMP aguarda a chegada das informações.
Observe que o objeto Subscription, que representa uma correspondência individual da consulta, é uma pequena estrutura de dados utilizada para conveniência pelo SubscriptionsProxy e, por isso, não bloqueia nem emite exceções.
Apesar de ter do tipo AdministeredObject, os objetos SubscriptionsProxy não podem ter AdministeredObjectListeners registrados. Isto significa que, quando os resultados de uma consulta são retornados do Configuration Manager, você não é notificado se o conjunto de assinaturas correspondentes é alterado, a menos que reenvie a consulta. A conseqüência deste comportamento é que os resultados de consultas de assinaturas são garantidos como corretos apenas no momento em que foi feita a consulta original.
É possível excluir assinaturas utilizando o método SubscriptionsProxy.deleteSubscriptions(). Como os objetos SubscriptionsProxy não podem ter AdministeredObjectListeners, o resultado de tal ação é publicado para listeners do objeto ConfigManagerProxy.