Author: davsclaus Date: Fri Sep 9 15:00:31 2011 New Revision: 1167236 URL: http://svn.apache.org/viewvc?rev=1167236&view=rev Log: CAMEL-4433: Option maximumBrowseSize is now in use when browsing jms endpoints.
Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultQueueBrowseStrategy.java camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/BrowsableQueueTest.java Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultQueueBrowseStrategy.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultQueueBrowseStrategy.java?rev=1167236&r1=1167235&r2=1167236&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultQueueBrowseStrategy.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultQueueBrowseStrategy.java Fri Sep 9 15:00:31 2011 @@ -37,13 +37,18 @@ import org.springframework.jms.core.JmsO public class DefaultQueueBrowseStrategy implements QueueBrowseStrategy { public List<Exchange> browse(JmsOperations template, String queue, final JmsQueueEndpoint endpoint) { - return template.browse(queue, new BrowserCallback<List<Exchange>>() { + return template.browse(queue, new BrowserCallback<List<Exchange>>() { public List<Exchange> doInJms(Session session, QueueBrowser browser) throws JMSException { + int size = endpoint.getMaximumBrowseSize(); + if (size <= 0) { + size = Integer.MAX_VALUE; + } + // not the best implementation in the world as we have to browse // the entire queue, which could be massive List<Exchange> answer = new ArrayList<Exchange>(); Enumeration iter = browser.getEnumeration(); - while (iter.hasMoreElements()) { + for (int i = 0; i < size && iter.hasMoreElements(); i++) { Message message = (Message) iter.nextElement(); Exchange exchange = endpoint.createExchange(message); answer.add(exchange); Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/BrowsableQueueTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/BrowsableQueueTest.java?rev=1167236&r1=1167235&r2=1167236&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/BrowsableQueueTest.java (original) +++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/BrowsableQueueTest.java Fri Sep 9 15:00:31 2011 @@ -37,9 +37,7 @@ public class BrowsableQueueTest extends private static final transient Logger LOG = LoggerFactory.getLogger(BrowsableQueueTest.class); protected String componentName = "activemq"; - protected String startEndpointUri; - protected int counter; - protected Object[] expectedBodies = {"body1", "body2"}; + protected Object[] expectedBodies = {"body1", "body2", "body3", "body4", "body5", "body6", "body7", "body8"}; @Test public void testSendMessagesThenBrowseQueue() throws Exception { @@ -54,14 +52,33 @@ public class BrowsableQueueTest extends assertEquals(6, endpoint.getMaximumBrowseSize()); List<Exchange> list = endpoint.getExchanges(); LOG.debug("Received: " + list); - assertEquals("Size of list", 2, endpoint.queueSize()); + assertEquals("Size of list", 6, endpoint.queueSize()); - // for JMX stuff - for (int i = 0; i < 2; i++) { - String data = endpoint.browseExchange(i); - assertNotNull(data); + int index = -1; + for (Exchange exchange : list) { + String actual = exchange.getIn().getBody(String.class); + LOG.debug("Received body: " + actual); + + Object expected = expectedBodies[++index]; + assertEquals("Body: " + index, expected, actual); + } + } + + @Test + public void testSendMessagesThenBrowseQueueLimitNotHit() throws Exception { + // send some messages + for (int i = 0; i < expectedBodies.length; i++) { + Object expectedBody = expectedBodies[i]; + template.sendBodyAndHeader("activemq:test.b", expectedBody, "counter", i); } + // now lets browse the queue + JmsQueueEndpoint endpoint = getMandatoryEndpoint("activemq:test.b?maximumBrowseSize=10", JmsQueueEndpoint.class); + assertEquals(10, endpoint.getMaximumBrowseSize()); + List<Exchange> list = endpoint.getExchanges(); + LOG.debug("Received: " + list); + assertEquals("Size of list", 8, endpoint.queueSize()); + int index = -1; for (Exchange exchange : list) { String actual = exchange.getIn().getBody(String.class); @@ -72,10 +89,30 @@ public class BrowsableQueueTest extends } } - protected void sendExchange(final Object expectedBody) { - template.sendBodyAndHeader(startEndpointUri, expectedBody, "counter", ++counter); - } + @Test + public void testSendMessagesThenBrowseQueueNoMax() throws Exception { + // send some messages + for (int i = 0; i < expectedBodies.length; i++) { + Object expectedBody = expectedBodies[i]; + template.sendBodyAndHeader("activemq:test.b", expectedBody, "counter", i); + } + + // now lets browse the queue + JmsQueueEndpoint endpoint = getMandatoryEndpoint("activemq:test.b", JmsQueueEndpoint.class); + assertEquals(-1, endpoint.getMaximumBrowseSize()); + List<Exchange> list = endpoint.getExchanges(); + LOG.debug("Received: " + list); + assertEquals("Size of list", 8, endpoint.queueSize()); + int index = -1; + for (Exchange exchange : list) { + String actual = exchange.getIn().getBody(String.class); + LOG.debug("Received body: " + actual); + + Object expected = expectedBodies[++index]; + assertEquals("Body: " + index, expected, actual); + } + } protected CamelContext createCamelContext() throws Exception { CamelContext camelContext = super.createCamelContext();