You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/09/09 17:00:31 UTC
svn commit: r1167236 - in /camel/trunk/components/camel-jms/src:
main/java/org/apache/camel/component/jms/DefaultQueueBrowseStrategy.java
test/java/org/apache/camel/component/jms/BrowsableQueueTest.java
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();