Return-Path: X-Original-To: apmail-camel-commits-archive@www.apache.org Delivered-To: apmail-camel-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 7830F6C27 for ; Fri, 8 Jul 2011 10:52:36 +0000 (UTC) Received: (qmail 14516 invoked by uid 500); 8 Jul 2011 10:52:35 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 14454 invoked by uid 500); 8 Jul 2011 10:52:30 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 14429 invoked by uid 99); 8 Jul 2011 10:52:27 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Jul 2011 10:52:27 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Jul 2011 10:52:24 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id BAE3823889BB for ; Fri, 8 Jul 2011 10:52:02 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1144248 - in /camel/trunk/components/camel-jms/src: main/java/org/apache/camel/component/jms/JmsEndpoint.java test/java/org/apache/camel/component/jms/TwoConsumerOnSameTopicTest.java Date: Fri, 08 Jul 2011 10:52:02 -0000 To: commits@camel.apache.org From: davsclaus@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110708105202.BAE3823889BB@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: davsclaus Date: Fri Jul 8 10:52:02 2011 New Revision: 1144248 URL: http://svn.apache.org/viewvc?rev=1144248&view=rev Log: CAMEL-4194: jmx topic endpoints should be non-singleton. Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/TwoConsumerOnSameTopicTest.java Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java?rev=1144248&r1=1144247&r2=1144248&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java Fri Jul 8 10:52:02 2011 @@ -323,6 +323,12 @@ public class JmsEndpoint extends Default @ManagedAttribute public boolean isSingleton() { + if (isPubSubDomain()) { + // topic cannot be singleton, as there may be multiple consumers + // on the same topic + return false; + } + // but queues can be singleton return true; } Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/TwoConsumerOnSameTopicTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/TwoConsumerOnSameTopicTest.java?rev=1144248&view=auto ============================================================================== --- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/TwoConsumerOnSameTopicTest.java (added) +++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/TwoConsumerOnSameTopicTest.java Fri Jul 8 10:52:02 2011 @@ -0,0 +1,130 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.camel.component.jms; + +import javax.jms.ConnectionFactory; + +import org.apache.camel.CamelContext; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; + +import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge; + +/** + * + */ +public class TwoConsumerOnSameTopicTest extends CamelTestSupport { + + @Test + public void testTwoConsumerOnSameTopic() throws Exception { + getMockEndpoint("mock:a").expectedBodiesReceived("Hello World"); + getMockEndpoint("mock:b").expectedBodiesReceived("Hello World"); + + template.sendBody("activemq:topic:foo", "Hello World"); + + assertMockEndpointsSatisfied(); + } + + @Test + public void testStopOneRoute() throws Exception { + getMockEndpoint("mock:a").expectedBodiesReceived("Hello World"); + getMockEndpoint("mock:b").expectedBodiesReceived("Hello World"); + template.sendBody("activemq:topic:foo", "Hello World"); + assertMockEndpointsSatisfied(); + + // now stop route A + context.stopRoute("a"); + + // send new message should go to B only + resetMocks(); + getMockEndpoint("mock:a").expectedMessageCount(0); + getMockEndpoint("mock:b").expectedBodiesReceived("Bye World"); + template.sendBody("activemq:topic:foo", "Bye World"); + assertMockEndpointsSatisfied(); + } + + @Test + public void testStopAndStartOneRoute() throws Exception { + getMockEndpoint("mock:a").expectedBodiesReceived("Hello World"); + getMockEndpoint("mock:b").expectedBodiesReceived("Hello World"); + template.sendBody("activemq:topic:foo", "Hello World"); + assertMockEndpointsSatisfied(); + + // now stop route A + context.stopRoute("a"); + + // send new message should go to B only + resetMocks(); + getMockEndpoint("mock:a").expectedMessageCount(0); + getMockEndpoint("mock:b").expectedBodiesReceived("Bye World"); + template.sendBody("activemq:topic:foo", "Bye World"); + assertMockEndpointsSatisfied(); + + // now start route A + context.startRoute("a"); + + // send new message should go to both A and B + resetMocks(); + getMockEndpoint("mock:a").expectedBodiesReceived("Hi Camel"); + getMockEndpoint("mock:b").expectedBodiesReceived("Hi Camel"); + template.sendBody("activemq:topic:foo", "Hi Camel"); + assertMockEndpointsSatisfied(); + } + + @Test + public void testRemoveOneRoute() throws Exception { + getMockEndpoint("mock:a").expectedBodiesReceived("Hello World"); + getMockEndpoint("mock:b").expectedBodiesReceived("Hello World"); + template.sendBody("activemq:topic:foo", "Hello World"); + assertMockEndpointsSatisfied(); + + // now stop and remove route A + context.stopRoute("a"); + context.removeRoute("a"); + + // send new message should go to B only + resetMocks(); + getMockEndpoint("mock:a").expectedMessageCount(0); + getMockEndpoint("mock:b").expectedBodiesReceived("Bye World"); + template.sendBody("activemq:topic:foo", "Bye World"); + assertMockEndpointsSatisfied(); + } + + protected CamelContext createCamelContext() throws Exception { + CamelContext camelContext = super.createCamelContext(); + + ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory(); + camelContext.addComponent("activemq", jmsComponentAutoAcknowledge(connectionFactory)); + + return camelContext; + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("activemq:topic:foo").routeId("a") + .to("mock:a"); + + from("activemq:topic:foo").routeId("b") + .to("mock:b"); + } + }; + } +}