これは、構成マネージャー・プロキシー (CMP) アプリケーションの開発という、より大きなタスクの一部で、CMP の拡張機能の 1 つです。
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, // filter by topic null, // don't filter by broker null, // don't filter by username null, // don't filter by sub point null, // no start date, null); // no end date 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(); } } }
アクティブなサブスクリプションのセットを照会するメソッドは ConfigManagerProxy.getSubscriptions() です。これは、サブスクリプションのフィルターに使用する照会を定義します。 トピック、ブローカー、ユーザー ID、および subscriptionPoint の各パラメーターは、ワイルドカード文字を表すために % 文字を含めることのできるストリングです。
startDate および endDate パラメーターのタイプは GregorianCalendar です。これは、一致するサブスクリプションの登録時間を制約するために使用できます。 このメソッドに対するすべてのパラメーターで、ヌル値または空の値 (ストリング引数の場合) は、「この属性でフィルタリングしない」ことを意味します。
前の例で、このメソッドに提供されているヌル以外のパラメーターは topic ストリング shares% のみです。これは、トピック名が "shares" で始まるすべてのサブスクリプションを戻すように CMP に指示します。
照会の結果を表す SubscriptionsProxy のインスタンスがこのメソッドから戻されます。 このクラスは AdministeredObject から継承しているため、このオブジェクトの属性は構成マネージャーから非同期に提供されます。さらに、その属性を問い合わせるメソッドは、CMP が情報の到着を待機している間、一時的にブロックすることができます。
照会からの個々の一致を表す Subscription オブジェクトは、SubscriptionsProxy によって便宜上使用される小さいデータ構造で、それ自体はブロックしたり、例外をスローしたりしません。
AdministeredObject タイプであるにもかかわらず、SubscriptionsProxy オブジェクトは AdministeredObjectListeners をそれ自体に対して登録することができません。 これは、照会の結果が構成マネージャーから戻されると、照会を再実行依頼しなければ、一致するサブスクリプションのセットが変更されるかどうか通知されないことを意味します。 この動作の結果として、サブスクリプション照会の結果は元の照会が行われたときにのみ正しいことが保証されます。
SubscriptionsProxy.deleteSubscriptions() メソッドを使用して、サブスクリプションを削除することができます。 SubscriptionsProxy オブジェクトは AdministeredObjectListeners を持つことができないため、そのようなアクションの結果は ConfigManagerProxy オブジェクトのリスナーに対してパブリッシュされます。