Ver y trabajar con suscripciones activas.
Esta tarea forma parte de la tarea más extensa de desarrollo de aplicaciones de Proxy del Gestor de configuración (CMP) y describe una de las características avanzadas de CMP.
Puede utilizar el CMP para mostrar y suprimir el conjunto de suscripciones activas del dominio. El siguiente ejemplo proporciona información sobre todas las suscripciones a temas cuyos nombres empiecen por la serie de caracteres "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); // establecer el tema 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(); } } }
La clase que consulta el conjunto de suscripciones activas es SubscriptionsQuery(), que define la consulta que se utiliza para filtrar las suscripciones. Los parámetros que defina en SubscriptionsParameters y SubscriptionsParameters.MQ se pueden establecer en una instancia de la clase para construir una consulta. Puede incluir el carácter % para indicar caracteres comodín en los parámetros de tipo serie.
Los parámetros SubscriptionsParameters.STARTDATE y SubscriptionsParameters.ENDDATE son de tipo calendario gregoriano (GregorianCalendar). Utilice estos parámetros para restringir el tiempo de registro de las suscripciones coincidentes.
En el ejemplo anterior, sólo el parámetro topic de tipo serie se establece como shares%. Este valor indica a CMP que devuelva todas las suscripciones cuyo nombre de tema empiecen por "shares".
La consulta se emite al llamar el método SubscriptionQuery.executeQuery(). Devuelve una instancia de SubscriptionsProxy, que representa los resultados de la consulta. Dado que esta clase procede de la clase AdministeredObject, los atributos de este objeto los proporciona el Gestor de configuración asíncronamente. Por consiguiente, los métodos que interrogan los atributos SubscriptionsProxy se pueden bloquear temporalmente mientras CMP espera a que llegue la información.
La clase Subscription y la subclase MQSubscription, que representará una coincidencia individual de la consulta, son una pequeña estructura de datos utilizada por SubscriptionsProxy por comodidad y no bloquean ni generan excepciones.
Aunque los objetos SubscriptionsProxy son de tipo AdministeredObject, no puede registrar AdministeredObjectListeners en ellos. Esta característica significa que cuando se devuelven los resultados de una consulta del Gestor de configuración, no se le notifican los cambios realizados en el conjunto de suscripciones coincidentes, a menos que vuelva a someter la consulta. La consecuencia de este comportamiento es que sólo se garantiza la corrección de los resultados de consultas de suscripciones efectuadas en el momento en que se realizó la consulta original.
Puede suprimir las suscripciones utilizando el método SubscriptionsProxy.deleteSubscriptions(). Dado que los objetos SubscriptionsProxy no pueden tener AdministeredObjectListeners, el resultado de una acción de este tipo se publica para los escuchas del objeto ConfigManagerProxy.