[
https://issues.apache.org/jira/browse/AMQ-5118?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13946827#comment-13946827
]
Timothy Bish commented on AMQ-5118:
-----------------------------------
Can you create a unit test to reproduce this?
> Race condition with embedded broker asynchronous startup
> --------------------------------------------------------
>
> Key: AMQ-5118
> URL: https://issues.apache.org/jira/browse/AMQ-5118
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker
> Affects Versions: 5.9.0
> Reporter: james
>
> We run activemq as an embedded broker using the asynchronous startup option.
> After the start async call returns, we create a vm connector with the extra
> options "?create=false&waitForStart=60000". There is a timing hole where the
> BrokerService has been registered with the BrokerRegistry (and is found by
> the connection factory), but the BrokerServer.broker member variable has not
> yet been assigned (in fact, there may be some memory visibility issues here).
> The VMTransportFactory eventually generates a call to
> BrokerService.getBroker(), which (since broker == null) attempts to create a
> broker instance. This ultimately results in a JMX exception due to multiple
> instances being registered (assuming you have jmx enabled).
> {noformat}
> javax.jms.JMSException: Could not create Transport. Reason:
> java.io.IOException: Status MBean could not be registe
> red in JMX: org.apache.activemq:type=Broker,brokerName=internal,service=Health
> at
> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36)
> at
> org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:260)
> at
> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:273)
> at
> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:246)
> at
> org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:186)
> at <internal stacktrace ommitted>
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
> at java.lang.Thread.run(Thread.java:662)
> Caused by: java.io.IOException: Status MBean could not be registered in JMX:
> org.apache.activemq:type=Broker,brokerName=internal,service=Health
> at
> org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:27)
> at
> org.apache.activemq.broker.BrokerService.addInterceptors(BrokerService.java:2242)
> at
> org.apache.activemq.broker.BrokerService.createBroker(BrokerService.java:2123)
> at
> org.apache.activemq.broker.BrokerService.getBroker(BrokerService.java:906)
> at
> org.apache.activemq.broker.TransportConnector.start(TransportConnector.java:201)
> at
> org.apache.activemq.transport.vm.VMTransportFactory.doCompositeConnect(VMTransportFactory.java:140)
> at
> org.apache.activemq.transport.vm.VMTransportFactory.doConnect(VMTransportFactory.java:54)
> at
> org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:64)
> at
> org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:258)
> ... 37 more
> Caused by: javax.management.InstanceAlreadyExistsException:
> org.apache.activemq:type=Broker,brokerName=internal,service=Health
> 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:483)
> at
> org.apache.activemq.broker.jmx.ManagementContext.registerMBean(ManagementContext.java:380)
> at
> org.apache.activemq.broker.jmx.AnnotatedMBean.registerMBean(AnnotatedMBean.java:72)
> at
> org.apache.activemq.broker.BrokerService.addInterceptors(BrokerService.java:2240)
> ... 44 more
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.2#6252)