アクティブなサブスクリプションを表示および処理します。
このタスクは、構成マネージャー・プロキシー (CMP) アプリケーションの開発という、より大きなタスクの一部で、CMP の拡張機能の 1 つを示しています。
CMP を使用して、ドメイン内のアクティブ・サブスクリプションのセットを表示したり、削除することができます。 以下の例は、ストリング "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(); } } }
アクティブなサブスクリプションのセットを照会するクラスは SubscriptionsQuery() です。これは、サブスクリプションのフィルターに使用する照会を定義します。 SubscriptionsParameters と SubscriptionsParameters.MQ に定義するパラメーターは、照会を作成するクラスのインスタンスに設定できます。 ストリング・タイプのパラメーター内でワイルドカード文字を示すために、% 文字を組み込むことができます。
パラメーター SubscriptionsParameters.STARTDATE および SubscriptionsParameters.ENDDATE は、タイプ GregorianCalendar です。 これらのパラメーターを使用して、一致するサブスクリプションの登録時刻を制約します。
前述の例では、ストリング・タイプの topic パラメーターだけが shares% に設定されます。 この設定は、トピック名が "shares" で始まるすべてのサブスクリプションを戻すように CMP に指示します。
照会は SubscriptionQuery.executeQuery() メソッドの呼び出し時に発行されます。 これは、照会の結果を表す SubscriptionsProxy のインスタンスを戻します。 このクラスは AdministeredObject クラスから継承しているため、このオブジェクトの属性は構成マネージャーにより非同期に提供されます。 したがって、SubscriptionsProxy 属性を問い合わせるメソッドは、CMP が情報の到着を待機している間、一時的にブロックすることができます。
Subscription クラスと、照会からの個々の一致を表すその MQSubscription サブクラスは、SubscriptionsProxy によって便宜上使用される小さいデータ構造で、ブロックしたり、例外をスローしたりはしません。
SubscriptionsProxy オブジェクトが AdministeredObject タイプであっても、それに対して AdministeredObjectListeners を登録することはできません。 この特性は、照会の結果が構成マネージャーから戻されると、照会を再実行依頼しなければ、一致するサブスクリプションのセットが変更されるかどうか通知されないことを意味します。 この動作の結果として、サブスクリプション照会の結果は元の照会が行われたときにのみ正しいことが保証されます。
SubscriptionsProxy.deleteSubscriptions() メソッドを使用して、サブスクリプションを削除することができます。 SubscriptionsProxy オブジェクトは AdministeredObjectListeners を持つことができないため、そのようなアクションの結果は ConfigManagerProxy オブジェクトのリスナーに対してパブリッシュされます。