Visualizar e trabalhar com assinaturas ativas.
Esta tarefa faz parte da tarefa maior de desenvolvimento de aplicativos Configuration Manager Proxy (CMP) e descreve um dos recursos avançados do CMP.
Você pode utilizar o CMP para mostrar e excluir o conjunto de assinaturas ativas no domínio. O exemplo a seguir fornece informações sobre todas as assinaturas para tópicos com nomes que começam com a cadeia "shares".
import java.util.Enumeration; import com.ibm.broker.config.proxy.*; public class QuerySubscriptions { public static void main(String[] args) { ConfigManagerProxy cmp = null; BrokerProxy bp = null; TopologyProxy tp = null; try { ConfigManagerConnectionParameters cmcp = new MQConfigManagerConnectionParameters( "localhost", 1414, ""); cmp = ConfigManagerProxy.getInstance(cmcp); tp = cmp.getTopology(); bp = tp.getBrokerByName("BROKER_A"); } 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 { SubscriptionQuery sq = bp.createSubscriptionQuery(); sq.setString(SubscriptionParameters.TOPIC, topic); // set the topic SubscriptionsProxy matchingSubscriptions = sq.executeQuery(); 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(); } } }
A classe que consulta o conjunto de assinaturas ativas é SubscriptionsQuery(), que define a consulta que é utilizada para filtrar as assinaturas. Os parâmetros que você define em SubscriptionsParameters e SubscriptionsParameters.MQ podem ser configurados em uma instância da classe para construir uma consulta. Você pode incluir o caractere % para denotar caracteres curingas em parâmetros de cadeia de tipos.
Os parâmetros SubscriptionsParameters.STARTDATE e SubscriptionsParameters.ENDDATE são do tipo GregorianCalendar. Utilize esses parâmetros para restringir o tempo de registro das assinaturas correspondentes.
No exemplo precedente, apenas o parâmetro topic, da cadeia de tipos, é configurado como shares%. Essa configuração informa ao CMP para retornar todas as assinaturas cujo nome do tópico comece com "shares".
A consulta é emitida quando você chamada o método SubscriptionQuery.executeQuery(). Ela retorna uma instância SubscriptionsProxy, que representa os resultados da consulta. Como essa classe é herdada da classe AdministeredObject, os atributos desse objeto são fornecidos de maneira assíncrona pelo Configuration Manager. Portanto, os métodos que interrogam os atributos SubscriptionsProxy podem ser temporariamente bloqueados enquanto o CMP aguarda a chegada das informações.
A classe Subscription, e sua subclasse MQSubscription que representam uma correspondência individual da consulta, é uma estrutura pequena que é utilizada por conveniência pelo SubscriptionsProxy, e não bloqueia ou lança exceções.
Mesmo que os objetos SubscriptionsProxy sejam do tipo AdministeredObject, você não pode registrar o AdministeredObjectListeners neles. Esta característica significa que quando os resultados de uma consulta são retornados do Configuration Manager, você não será notificado se o conjunto das assinaturas correspondentes for alterado, a menos que você 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.
Você pode excluir as assinaturas utilizando o método SubscriptionsProxy.deleteSubscriptions(). Como os objetos SubscriptionsProxy não podem ter AdministeredObjectListeners, o resultado dessa ação é publicado para os listeners do objeto ConfigManagerProxy.