Author: davsclaus Date: Mon Jun 7 04:25:50 2010 New Revision: 952085 URL: http://svn.apache.org/viewvc?rev=952085&view=rev Log: CAMEL-2537: Added JMS example of using resequencer to reorder messages based on JMSPriority
Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java - copied, changed from r952077, camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsFilterTest.java Copied: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java (from r952077, camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsFilterTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java?p2=camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java&p1=camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsFilterTest.java&r1=952077&r2=952085&rev=952085&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsFilterTest.java (original) +++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java Mon Jun 7 04:25:50 2010 @@ -14,70 +14,66 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.jms; +package org.apache.camel.component.jms; import javax.jms.ConnectionFactory; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.camel.CamelContext; -import org.apache.camel.EndpointInject; -import org.apache.camel.Produce; -import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.CamelTestSupport; +import static org.apache.camel.component.jms.JmsComponent.jmsComponentClientAcknowledge; + /** - * Tests filtering using Camel Test + * JMSPriority being ordered using the resequencer in batch mode. + * * @version $Revision: 724291 $ */ -// START SNIPPET: example -public class JmsFilterTest extends CamelTestSupport { - - @EndpointInject(uri = "mock:result") - protected MockEndpoint resultEndpoint; - - @Produce(uri = "direct:start") - protected ProducerTemplate template; - - public void testSendMatchingMessage() throws Exception { - String expectedBody = "<matched/>"; - - resultEndpoint.expectedBodiesReceived(expectedBody); - - template.sendBodyAndHeader(expectedBody, "foo", "bar"); - - resultEndpoint.assertIsSatisfied(); - } - - public void testSendNotMatchingMessage() throws Exception { - resultEndpoint.expectedMessageCount(0); - - template.sendBodyAndHeader("<notMatched/>", "foo", "notMatchedHeaderValue"); +public class JmsBatchResequencerJMSPriorityTest extends CamelTestSupport { + + public void testBatchResequencerJMSPriority() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedBodiesReceived("G", "A", "B", "E", "H", "C", "D", "F"); + + // must use preserveMessageQos=true to be able to specify the JMSPriority to be used + template.sendBodyAndHeader("jms:queue:foo?preserveMessageQos=true", "A", "JMSPriority", 6); + template.sendBodyAndHeader("jms:queue:foo?preserveMessageQos=true", "B", "JMSPriority", 6); + template.sendBodyAndHeader("jms:queue:foo?preserveMessageQos=true", "C", "JMSPriority", 4); + template.sendBodyAndHeader("jms:queue:foo?preserveMessageQos=true", "D", "JMSPriority", 4); + template.sendBodyAndHeader("jms:queue:foo?preserveMessageQos=true", "E", "JMSPriority", 6); + template.sendBodyAndHeader("jms:queue:foo?preserveMessageQos=true", "F", "JMSPriority", 4); + template.sendBodyAndHeader("jms:queue:foo?preserveMessageQos=true", "G", "JMSPriority", 8); + template.sendBodyAndHeader("jms:queue:foo?preserveMessageQos=true", "H", "JMSPriority", 6); - resultEndpoint.assertIsSatisfied(); + assertMockEndpointsSatisfied(); } protected CamelContext createCamelContext() throws Exception { CamelContext camelContext = super.createCamelContext(); - - // connect to embedded ActiveMQ JMS broker - ConnectionFactory connectionFactory = - new ActiveMQConnectionFactory("vm://localhost"); - camelContext.addComponent("jms", - JmsComponent.jmsComponentAutoAcknowledge(connectionFactory)); + + ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"); + camelContext.addComponent("jms", jmsComponentClientAcknowledge(connectionFactory)); return camelContext; } - + @Override - protected RouteBuilder createRouteBuilder() { + protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { - public void configure() { - from("direct:start").to("jms:myQueue"); - from("jms:myQueue").filter(header("foo").isEqualTo("bar")).to("mock:result"); + @Override + public void configure() throws Exception { + // START SNIPPET: e1 + from("jms:queue:foo") + // sort by JMSPriority by allowing duplicates (message can have same JMSPriority) + // and use reverse ordering so 9 is first output (most important), and 0 is last + // use batch mode and fire every 3th second + .resequence(header("JMSPriority")).batch().timeout(3000).allowDuplicates().reverse() + .to("mock:result"); + // END SNIPPET: e1 } }; } -} -// END SNIPPET: example + +} \ No newline at end of file