Willem,

The Endpoint interface has been extended to allow for a cleaner
shutdown process for consumer endpoints, where the endpoint can
continue handling existing requests without accepting new ones (cfr.
http://svn.apache.org/repos/asf/servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/Endpoint.java).

Perhaps we can reuse the same mechanism for fine-tuning the stop/start
behavior of the Camel endpoints?

Regards,

Gert Vanthienen
------------------------
Open Source SOA: http://fusesource.com
Blog: http://gertvanthienen.blogspot.com/



2009/11/30 Willem Jiang <[email protected]>:
> Hi,
>
> I had a chance to dig the code of service-camel component trunk.
> Here is what I found :
> For ServiceUnit there are two stages of starting
> prepare for starting --> init()
> start the endpoints of the unit --> start()
>
> And two stages of stopping
> stop the endpoints of the unit --> stop()
> finally stop the service unit --> shutdown()
>
> For service-camel component, it uses XBeanServiceUnit to manage the SU's
> states, the camel context will be stopped if the su's shutdown is called.
> But the camel context will not be restarted even the su's init() is called.
>
> As the SU start method will start the endpoint, we can create a simple
> endpoint which delegate the start and stop method to camel context.
>
> Any thought?
>
>
> Willem
>
> Jean-Baptiste Onofré wrote:
>>
>> Hi Maciek,
>>
>> I'm agree, we haven't a clean behavior between SMX component and camel
>> endpoints. I think the best way is to override the start() method in the
>> camel component to rebind the camel context.
>>
>> Feel free to open a Jira task on this topic.
>>
>> Regards
>> JB
>>
>> Maciej Prochniak wrote:
>>>
>>> Hello,
>>> We found strange (I would say - buggy) behaviour of servicemix-camel
>>> component (SMX 3.3 + servicemix-camel 2008.01).
>>>
>>> Basically we have camel SU using standard dead letter channel. When SA
>>> is shutdown (e.g. because of missing components for other SUs, or using
>>> JMX) and then started, camel route throws RejectedExecutionException.
>>> Looking into the code it is caused by the following:
>>>
>>> 1) Camel context is created during deployment of SU
>>> 2) When shutdown is being called, the applicationContext for given SU i
>>> s destroyed. This includes calling .stop() on camelContext.
>>> 3) When start is called the camel context is still in stopped state (but
>>> its servicemix endpoint are still registered in SMX registry).
>>> 4) Dead letter channel throws exceptions when receiving messages while
>>> being in stopped state.
>>>
>>> For me, this looks like some compatibility issues between camel
>>> endpoints lifecycle and servicemix endpoints lifecycle (this is mostly
>>> coded in AbstractXBeanDeployer and XBeanServiceUnit). The application
>>> context is destroyed in shutdown method, but if start is called
>>> afterwards, endpoint beans are being used - this is rather unpleasant
>>> behaviour in my opinion - maybe camel context should be created during
>>> start of SU?
>>>
>>> Could anybody comment on this?
>>>
>>> thanks and br.
>>> maciek prochniak
>>
>
>

Reply via email to