Hi,

I have two web apps running in Tomcat and I would like both of them to make
use of a common activemq broker.  However I seem to have a problem where two
brokers are started instead.

In my tomcat context.xml I have a single connection factory and two queues
defined:

       <Resource name="jms/connectionFactory" auth="Container"
              type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory Home"
              factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="vm:localhost"
              brokerName="LocalActiveMQBrokerHome" />

       <Resource name="homequeue" auth="Container"
              type="org.apache.activemq.command.ActiveMQQueue"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
              physicalName="homequeue" />

       <Resource name="policyqueue" auth="Container"
              type="org.apache.activemq.command.ActiveMQQueue"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
              physicalName="policyqueue" />

In each of my applications I use spring, and have the following in each of
the app context files:

       <jee:jndi-lookup id="jmsConnectionFactory"
              jndi-name="java:comp/env/jms/connectionFactory"
resource-ref="true" />

       <bean id="pooledConnectionFactory"
class="org.apache.activemq.pool.PooledConnectionFactory">
              <property name="maxConnections" value="8" />
              <property name="maximumActive" value="500" />
              <property name="connectionFactory" ref="jmsConnectionFactory"
/>
       </bean>

       <bean id="jmsConfig"
class="org.apache.camel.component.jms.JmsConfiguration">
              <property name="connectionFactory"
ref="pooledConnectionFactory" />
              <property name="transacted" value="false" />
              <property name="concurrentConsumers" value="10" />
       </bean>

       <bean id="activemq"
class="org.apache.activemq.camel.component.ActiveMQComponent">
              <property name="configuration" ref="jmsConfig" />
       </bean>

As far as I understand it, the ActiveMQComponent bean binds me via the
connection factory to the broker, and whichever app starts up first will
cause the broker to instantiate.

However when I run the application, I see firstly a broker starting without
a problem (note that I am also binding to this broker with Camel):

17:29:56,413  INFO main org.apache.activemq.broker.BrokerService:744 -
ActiveMQ 5.4.0 JMS Message Broker (localhost) is starting
17:29:56,414  INFO main org.apache.activemq.broker.BrokerService:746 - For
help or more information please see: http://activemq.apache.org/
17:29:56,607  INFO main
org.apache.activemq.broker.scheduler.SchedulerBroker:60 - Scheduler using
directory: activemq-data\scheduler
17:29:56,792  INFO main org.apache.activemq.broker.BrokerService:519 -
ActiveMQ JMS Message Broker (localhost, ID:MV5-53743-1283444996462-0:0)
started
17:29:56,807  INFO main org.apache.activemq.broker.TransportConnector:252 -
Connector vm://localhost Started
17:29:56,916  INFO main org.apache.camel.impl.DefaultCamelContext:956 -
Route: route1 started and consuming from: Endpoint[direct://HOME]
17:29:56,916  INFO main org.apache.camel.impl.DefaultCamelContext:956 -
Route: route2 started and consuming from: Endpoint[direct://POLICY]
17:29:56,917  INFO main org.apache.camel.impl.DefaultCamelContext:956 -
Route: route3 started and consuming from: Endpoint[activemq://homequeue]

But then subsequently I see (I think I see) a second broker attempting to
start and failing.

17:30:08,964  WARN JMX connector
org.apache.activemq.broker.jmx.ManagementContext:110 - Failed to start jmx
connector: Cannot bind to URL [rmi://localhost:1099/jmxrmi]:
javax.naming.NameAlreadyBoundException: jmxrmi [Root exception is
java.rmi.AlreadyBoundException: jmxrmi]
17:30:08,976 ERROR main org.apache.activemq.broker.BrokerService:523 -
Failed to start ActiveMQ JMS Message Broker. Reason:
javax.management.InstanceAlreadyExistsException:
org.apache.activemq:BrokerName=localhost,Type=Broker
javax.management.InstanceAlreadyExistsException:
org.apache.activemq:BrokerName=localhost,Type=Broker
       at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:453)
       at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1484)
       at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:963)
       at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917)
       at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312)
       at
com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)
       at
org.apache.activemq.broker.jmx.ManagementContext.registerMBean(ManagementContext.java:307)
       at
org.apache.activemq.broker.jmx.AnnotatedMBean.registerMBean(AnnotatedMBean.java:54)
       at
org.apache.activemq.broker.BrokerService.startManagementContext(BrokerService.java:2044)
       at
org.apache.activemq.broker.BrokerService.start(BrokerService.java:474)
       at
org.apache.activemq.transport.vm.VMTransportFactory.doCompositeConnect(VMTransportFactory.java:123)
       at
org.apache.activemq.transport.vm.VMTransportFactory.doConnect(VMTransportFactory.java:53)
       at
org.apache.activemq.transport.TransportFactory.doConnect(TransportFactory.java:51)
       at
org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:80)
       at
org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:243)
       at
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:258)
       at
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:230)
       at
org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:178)
       at
org.apache.activemq.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:137)
       at
org.apache.activemq.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:121)
       at
org.apache.activemq.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:92)
       at
org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184)
       at
org.springframework.jms.listener.AbstractJmsListeningContainer.createSharedConnection(AbstractJmsListeningContainer.java:404)
       at
org.springframework.jms.listener.AbstractJmsListeningContainer.establishSharedConnection(AbstractJmsListeningContainer.java:372)
       at
org.springframework.jms.listener.DefaultMessageListenerContainer.establishSharedConnection(DefaultMessageListenerContainer.java:698)
       at
org.springframework.jms.listener.AbstractJmsListeningContainer.doStart(AbstractJmsListeningContainer.java:279)
       at
org.springframework.jms.listener.AbstractJmsListeningContainer.start(AbstractJmsListeningContainer.java:264)
       at
org.springframework.jms.listener.DefaultMessageListenerContainer.start(DefaultMessageListenerContainer.java:526)
       at
org.apache.camel.component.jms.JmsConsumer.startListenerContainer(JmsConsumer.java:80)
       at
org.apache.camel.component.jms.JmsConsumer.doStart(JmsConsumer.java:122)
       at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:56)
       at
org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:53)
       at
org.apache.camel.impl.DefaultCamelContext.startServices(DefaultCamelContext.java:1189)
       at
org.apache.camel.impl.DefaultCamelContext.doStartRoutes(DefaultCamelContext.java:1357)
       at
org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:1261)
       at
org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:952)
       at
org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:203)
       at
org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:101)
       at
org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:231)
       at
org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97)
       at
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:301)
       at
org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:888)
       at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:426)
       at
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
       at
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
       at
org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
       at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3830)
       at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4337)
       at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
       at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
       at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
       at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
       at
org.apache.catalina.core.StandardService.start(StandardService.java:516)
       at
org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
       at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
       at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
17:30:08,979  INFO main org.apache.activemq.broker.BrokerService:555 -
ActiveMQ Message Broker (localhost, null) is shutting down
17:30:08,998  INFO main org.apache.activemq.broker.BrokerService:623 -
ActiveMQ JMS Message Broker (localhost, null) stopped

So have I misunderstood how ActiveMQ can be used with JNDI?  I have just
spotted that I have both the activemq-all jar in my tomcat common dir AND
via maven are putting activemq jars on the classpath as camel dependencies -
might that be the problem?  Any other thoughts?

Any help whatsover very gladly received

Thanks

Jon

-- 
View this message in context: 
http://activemq.2283324.n4.nabble.com/Want-one-broker-two-turn-up-tp2525279p2525279.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to