/* * Copyright 2003,2004,2005 Colin Crist * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package test.jms; import java.util.Enumeration; import javax.jms.Connection; import javax.jms.DeliveryMode; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.QueueBrowser; import javax.jms.Session; import junit.framework.TestCase; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.log4j.Logger; /** * Push 100 messages to a queue and then immediately use a queue browser to * check the queue depth then delete the messages with a consumer and selector. * All work is performed on the same connection/session. * * @author colincrist@hermesjms.com * @version $Id: TestQueueBrowserForActiveMQ.java,v 1.3 2006/07/13 07:35:33 colincrist Exp $ */ public class TestQueueBrowserForActiveMQ extends TestCase { private static final Logger log = Logger.getLogger(TestQueueBrowserForActiveMQ.class) ; public void testWithTemporaryQueue() throws Exception { for (int i = 0; i < 100; i++) { log.debug("testWithTemporaryQueue run=" + i) ; doTestQueueBrowse(true); } } public void testWithQueue() throws Exception { for (int i = 0; i < 100; i++) { log.debug("testWithQueue run=" + i) ; doTestQueueBrowse(false); } } public void doTestQueueBrowse(boolean useTemporaryQueue) throws Exception { final int numMessages = 100; final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); connectionFactory.setBrokerURL("tcp://localhost:61616"); final Connection connection = connectionFactory.createConnection(); final Session session = connection.createSession(true, Session.CLIENT_ACKNOWLEDGE); connection.start(); final Queue queue = useTemporaryQueue ? session.createTemporaryQueue() : session.createQueue("test." + System.currentTimeMillis()); final MessageProducer sender = session.createProducer(queue); for (int i = 0; i < numMessages; i++) { final Message m = session.createTextMessage("Message #" + i); m.setJMSDeliveryMode(DeliveryMode.PERSISTENT); sender.send(m); } session.commit(); // Thread.sleep(1000) ; final QueueBrowser browser = session.createBrowser(queue); final StringBuffer sql = new StringBuffer(); int depth = 0; for (final Enumeration iter = browser.getEnumeration(); iter.hasMoreElements();) { final Message message = (Message) iter.nextElement(); sql.append("JMSMessageID = \'").append(message.getJMSMessageID()).append("\'"); if (iter.hasMoreElements()) { sql.append(" or "); } depth++; } browser.close() ; assertEquals("useTemporaryQueue=" + useTemporaryQueue + " queue browse depth equals put size", numMessages, depth); final MessageConsumer consumer = session.createConsumer(queue, sql.toString()); Message message = null; int messagesReceived = 0; while ((message = consumer.receive(1000)) != null && messagesReceived != numMessages) { messagesReceived++; } session.commit(); session.close() ; connection.close() ; assertEquals("useTemporaryQueue=" + useTemporaryQueue + " consumed size equals put size", numMessages, messagesReceived); } }