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.