[
https://issues.apache.org/activemq/browse/SM-1171?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Guillaume Nodet updated SM-1171:
--------------------------------
Affects Version/s: (was: servicemix-bean-2008.01)
Fix Version/s: servicemix-bean-2008.01
(was: 3.3)
(was: 3.2.2)
> BeanEndpoint can receive messages before it has fully started, causing
> exceptions
> ----------------------------------------------------------------------------------
>
> Key: SM-1171
> URL: https://issues.apache.org/activemq/browse/SM-1171
> Project: ServiceMix
> Issue Type: Bug
> Components: servicemix-bean
> Reporter: Ryan Bohn
> Assignee: Chris Custine
> Fix For: servicemix-bean-2008.01
>
>
> I have a Sender endpoint and a Receiver endpoint, both BeanEndpoint objects.
> The Sender endpoint immediately starts sending messages. Every so often, the
> receiver endpoint accepts tries to process a message the start() method has
> completed, causing the following exception:
> java.lang.NullPointerException
> at
> org.apache.servicemix.bean.BeanEndpoint.getCorrelationExpression(BeanEndpoint.java:421)
> at
> org.apache.servicemix.bean.BeanEndpoint.getCorrelation(BeanEndpoint.java:298)
> at
> org.apache.servicemix.bean.BeanEndpoint.onProviderExchange(BeanEndpoint.java:218)
> at
> org.apache.servicemix.bean.BeanEndpoint.process(BeanEndpoint.java:211)
> at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
> at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
> at
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
> at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
> at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170)
> at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
> at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> at java.lang.Thread.run(Thread.java:613)
> For now, I've put a sleep in the sender endpoint, which fixes the problem.
> Obviously, this a hack.
> I originally thought that the original solution would be to move the
> super.start() call to the end of the start() method. However, this turned
> out to cause problems for the sender endpoint.
> I have two options to propose:
> - use synchronization to ensure the bean has started, so that the process()
> method blocks until the start() method has finished. This has the
> disadvantage of incurring a synchronization hit on each message exchange.
> - separate the activation of an endpoint from the registration. This way an
> endpoint would be ready to go by being activated, but wouldn't be visible to
> other endpoints until the start() method has finished. I'm not sure what
> code changes would need be necessary to make this happen.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.