CXFServlet should be reinitialized on ContextRefreshedEvent
-----------------------------------------------------------

                 Key: CXF-4127
                 URL: https://issues.apache.org/jira/browse/CXF-4127
             Project: CXF
          Issue Type: Bug
    Affects Versions: 2.4.7, 2.5.3
            Reporter: Jens Borgland


I have a web application that uses Spring and CXF and is deployed on Tomcat. 
The application is initialized using the 
{{org.springframework.web.context.ContextLoaderListener}}.

With the fix for CXF-4094 I am now able to refresh the Spring context (like 
described below) without any exceptions but since the {{CXFServlet}} isn't 
created by Spring and doesn't listen for {{ContextRefreshedEvent}}, the {{Bus}} 
and the {{DestinationRegistry}} doesn't get reinitialized.

I refresh the Spring context like this:
{{((ConfigurableApplicationContext)applicationContext).refresh();}}

I think the CXFServlet should implement 
{{ApplicationListener<ContextRefreshedEvent>}} and register itself as an 
application listener on the Spring context and reinitialize itself in the 
{{onApplicationEvent}} method.

As an experiment I created a subclass to CXFServlet with the implementation of 
onApplicationEvent below (which seems to work). The real implementation could 
perhaps do a bit less work.


{code:title=RefreshingCXFServlet.java|borderStyle=solid}
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
  destroy();
  setBus(null);
  try {
    super.init(m_sc);
  } catch (ServletException e) {
    throw new RuntimeException("Unable to reinitialize the CXFServlet", e);
  }
} 
{code} 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to