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(); .... } ............
- Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイドおよびリファレンス
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19244-01/jm_pblsh.htm#CHDEAAJI