[ 
https://issues.apache.org/jira/browse/AMQ-5161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13994484#comment-13994484
 ] 

Nathaniel Mar commented on AMQ-5161:
------------------------------------

I'm brand new to ActiveMQ, but am interested in contributing, so I decided to 
take a stab at this ticket.

It seems that there may be a bit of a race condition when using the async start 
option on an embedded broker. I ran the provided unit test, and noticed that 
the NPE did not appear when I added a short delay between starting the broker 
and then initiating the connection to the broker. Specifically, what happens is 
that the main thread attempts to connect to the broker before the broker start 
up thread has completed (i.e. the broker has set its broker service instance).

I haven't diffed the 5.9 and 5.9.1 versions so I'm not sure what could have 
caused this to become a new issue.

As mentioned, I don't know much about the internal workings of ActiveMQ. 
However, as a suggestion, if the above is an accurate explanation of this 
issue, perhaps one possible fix would be to the TransportConnection class to 
wait until the broker has fully started to initiate the connection -- something 
along the lines of adding a "while (!broker.getBrokerService().isStarted()) " 
with that method already provided by the library.

Any thoughts?

> NullPointerException during async startup
> -----------------------------------------
>
>                 Key: AMQ-5161
>                 URL: https://issues.apache.org/jira/browse/AMQ-5161
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.9.1
>            Reporter: james
>         Attachments: QueueService2Test.java
>
>
> I'm using an embedded broker with asynchronous startup enabled.  My setup 
> worked using 5.9.0.  When i upgraded to 5.9.1, i started getting this 
> exception on startup:
> {noformat}
> javax.jms.JMSException: java.lang.NullPointerException
>   at 
> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:54)
>   at 
> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1408)
>   at 
> org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1513)
>   at 
> org.apache.activemq.ActiveMQConnection.setClientID(ActiveMQConnection.java:417)
>   at <...internal system startup stack trace...>
> Caused by: java.lang.NullPointerException
>   at 
> org.apache.activemq.broker.jmx.ManagedRegionBroker.addConnection(ManagedRegionBroker.java:232)
>   at 
> org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:92)
>   at 
> org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:91)
>   at 
> org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:92)
>   at 
> org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:92)
>   at 
> org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:92)
>   at 
> org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:97)
>   at 
> org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:759)
>   at org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139)
>   at 
> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:291)
>   at 
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:145)
>   at 
> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
>   at 
> org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
>   at 
> org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:247)
>   at 
> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:133)
>   at 
> org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48)
>   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)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to