see the waitForStart attribute on the vm transport, this can help with
ordering issues as the vm: transport will auto created an embedded
broker by default.

http://activemq.apache.org/the-vm-transport-starts-a-broker-before-my-configured-broker-starts.html

On 3 September 2010 09:15, jsvaughan <jsvaug...@gmail.com> wrote:
>
> 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.
>



-- 
http://blog.garytully.com

Open Source Integration
http://fusesource.com

Reply via email to