1

Tibco EMS JMS サーバーをブラウズし、すべてのキューを表示する Java クラスを作成しています。問題なく接続でき、特定のキューを参照できますが、すべてのキューのリストを返す方法を探しています (可能であればキューの深さとともに)。使用する特定の EMS API があるかどうかはわからないので、標準の JMS を使用しています。

逆JNDIルックアップを行うために次のコードを試しましたが、失敗しています。

NamingEnumeration<?> queues = context.list("");
List<String> availableQueuesNames = new ArrayList<String>();
while (queues.hasMoreElements()) {
    NameClassPair element = (NameClassPair) queues.nextElement();
    availableQueuesNames.add(element.getName());
}

このエラーがスローされます:

javax.naming.OperationNotSupportedException: Not supported
    at com.tibco.tibjms.naming.TibjmsContext.list(TibjmsContext.java:1018)
    at com.tibco.tibjms.naming.TibjmsContext.list(TibjmsContext.java:484)
    at javax.naming.InitialContext.list(Unknown Source)

掘り下げてみたところ、Tibco EMS はこのような JNDI の調査をサポートしていないようです。これを達成する別の方法はありますか?

4

3 に答える 3

2

Tibco でガイドとして提供されている tibjmsServerAdministrator.java と同じクラス (および addAdmin() メソッド) を使用して、すべてのキューを一覧表示するコードを作成できました。

Map<String, TibjmsAdmin> map = new HashMap<String, TibjmsAdmin>();
addAdmin(txtServer.getText(), txtUser.getText(), txtPassword.getText(), map);
_admin = new TibjmsAdmin[map.size()];
map.values().toArray(_admin);

QueueInfo[] info = _admin[0].getQueues(null);
for (int i = 0; i < info.length; i++) {
    String queueName = info[i].getName();
    if (!queueName.startsWith("$") && !queueName.startsWith(">")) {
        queues.add(queueName + ", 0");
    }
}
于 2014-03-10T12:55:52.477 に答える
-1

すべての EMS キューを一覧表示する必要がある理由はわかりませんが、GEMS ツールを使用すると、これ (および他の多くのこと) を実現できます。

tibcommunityで検索するか(アカウントが必要です)、最新バージョンをここから直接ダウンロードできます。

于 2014-03-12T04:43:47.477 に答える