You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Jens Borgland (Created) (JIRA)" <ji...@apache.org> on 2012/02/22 09:04:48 UTC
[jira] [Created] (CXF-4127) CXFServlet should be reinitialized on
ContextRefreshedEvent
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
[jira] [Commented] (CXF-4127) CXFServlet should be reinitialized on
ContextRefreshedEvent
Posted by "Jens Borgland (Commented) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CXF-4127?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13213571#comment-13213571 ]
Jens Borgland commented on CXF-4127:
------------------------------------
Note that {{org.springframework.context.support.AbstractApplicationContext}} recreates its {{ApplicationEventMulticaster}} when the context is refreshed. The CXFServlet therefore needs to add itself to the set of statically specified application listeners instead.
{code:title=registering a listener|borderStyle=solid}
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
GenericApplicationListenerAdapter listener = new GenericApplicationListenerAdapter(this);
// This won't work:
//((ConfigurableWebApplicationContext) wac).addApplicationListener(listener);
// This works:
((AbstractApplicationContext) wac).getApplicationListeners().add(listener);
{code}
> 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
[jira] [Resolved] (CXF-4127) CXFServlet should be reinitialized on
ContextRefreshedEvent
Posted by "Daniel Kulp (Resolved) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CXF-4127?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp resolved CXF-4127.
------------------------------
Resolution: Fixed
Fix Version/s: 2.6
2.5.3
Assignee: Daniel Kulp
> 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
> Assignee: Daniel Kulp
> Fix For: 2.5.3, 2.6
>
>
> 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