Restart CamelContext won't restart services on CxfBeanEndpoint
--------------------------------------------------------------

                 Key: CAMEL-2991
                 URL: https://issues.apache.org/activemq/browse/CAMEL-2991
             Project: Apache Camel
          Issue Type: Bug
          Components: camel-core, camel-cxf
            Reporter: William Tam
             Fix For: 2.5.0


A route that sends to a CxfBean destination is unusable after the CamelContext 
has been stopped and re-started.  The following is an example of a route that 
demonstrates the problem.

{code}
        <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring";>
                <route>
                        <from 
uri="jetty:http://localhost:9000?matchOnUriPrefix=true"; />
                        <to uri="cxfbean:customerServiceBean" />
                </route>
        </camelContext>

        <util:list id="customerServiceBean">
                <bean 
class="org.apache.camel.component.cxf.jaxrs.testbean.CustomerService" />
        </util:list>
{code}

The follow issues have been identified.

1) SendProcessor should implement the Navigate interface so that its children 
(if they are Services) can be managed by the lifecycle methods.  This will 
address any destination endpoint that requires services to be re-started.

2) CxfBeanEndpoint should be a Service itself.  The reason why the start() on 
CxfBeanEndpoint gets called during the first start is because 
CxfBeanComponent.start() gets invoked during route definition initialization.   
The problem is that re-starting doesn't trigger the CxfBeanComponent.start() 
method.  Therefore, putting the hook in CxfBeanComponent to start/stop 
CxfBeanEndpoint was a bug.

3) The default type converter which is a Service won't get "re-started' as the 
(lazy-instantiation) getTypeConverter() method won't perform addService() on a 
created but "stopped' typeConverter.  We need to discuss the correct remedy 
since I am not sure how to fix it.  It is kind of strange that the type 
converter is a service (which has the start/stop semantics) and yet it can be 
used even the CamelContext is stopped (or never started).  In the patch, I just 
set the type converter to null in DefaultCamelContext doStop() for now.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to