JMSのQueueBrowser / AQのTopicBrowser

JMSおよびOracle Streams AQに関するTipsです。
JMSでQueueに入っているメッセージを確認するには、次のようなコードでQueueBrowserを使えばよいでよね。

import javax.naming.InitialContext;
import java.util.Enumeration;
import javax.jms.*
............

InitialContext ic = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory)ic.lookup("Connection FactoryのJNDI location...");
QueueConnection connection = factory.createQueueConnection("user","passwd");
QueueSession session = connection.createQueueSession( false, Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) ic.lookup("QueueのJNDI location....");
QueueBrowser browser = session.createBrowser(queue,messageSelector);
connection.start();
Enumeration e = browser.getEnumeration();
while (e.hasMoreElements()) {
   Message message = (Message) e.nextElement();
   .....
}
............


Topicの状況を確認するためのTopicBrowserは、JMSのAPIでは提供されていませんが、JMS ProviderとしてOracle Streams AQ(もしくはOracle Enterprise Messaging Serviceの永続先でデータベースを設定した場合)は、以下のように独自APIでTopicの状況を確認することができます。

import javax.naming.InitialContext;
import java.util.Enumeration;
import oracle.jms.AQjmsSession;
import oracle.jms.TopicBrowser;
import javax.jms.*
............

InitialContext ic = new InitialContext("ConnectionFactoryのJNDI location...");
factory = (TopicConnectionFactory)ic.lookup();
connection = factory.createTopicConnection("user","passwd");
TopicSession session = connection.createTopicSession( false,Session.AUTO_ACKNOWLEDGE);
Topic topic = (Topic) ic.lookup("TopicのJNDI location....");
connection.start();
TopicBrowser browser = ((AQjmsSession)session).createBrowser(topic,durableSubscriberId,messageSelector);
Enumeration e = browser.getEnumeration();
while (e.hasMoreElements()) {
   Message message = (Message) e.nextElement();
   ....
}
............