Author: dkulp
Date: Tue Jul 22 10:16:49 2008
New Revision: 678808
URL: http://svn.apache.org/viewvc?rev=678808&view=rev
Log:
[CXF-1709] Detect the application context refresh and make sure we update the
bus and servlet controller.
Modified:
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractCXFServlet.java
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFServlet.java
Modified:
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractCXFServlet.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractCXFServlet.java?rev=678808&r1=678807&r2=678808&view=diff
==============================================================================
---
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractCXFServlet.java
(original)
+++
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractCXFServlet.java
Tue Jul 22 10:16:49 2008
@@ -110,7 +110,7 @@
bus.getExtension(DestinationFactoryManager.class).registerDestinationFactory(namespace,
factory);
}
- protected void replaceDestinationFactory() throws ServletException {
+ protected void replaceDestinationFactory() {
DestinationFactoryManager dfm =
bus.getExtension(DestinationFactoryManager.class);
try {
Modified:
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFServlet.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFServlet.java?rev=678808&r1=678807&r2=678808&view=diff
==============================================================================
---
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFServlet.java
(original)
+++
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/CXFServlet.java
Tue Jul 22 10:16:49 2008
@@ -38,6 +38,10 @@
import org.apache.cxf.resource.URIResolver;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.core.io.InputStreamResource;
@@ -49,9 +53,11 @@
* to the [EMAIL PROTECTED] ServletController}.
*
*/
-public class CXFServlet extends AbstractCXFServlet {
+public class CXFServlet extends AbstractCXFServlet implements
ApplicationListener {
private GenericApplicationContext childCtx;
+ private boolean inRefresh;
+
public static Logger getLogger() {
return LogUtils.getL7dLogger(CXFServlet.class);
@@ -92,7 +98,14 @@
}
}
- // This constructor works whether there is a context or not
+ updateContext(servletConfig, ctx);
+
+ if (ctx instanceof ConfigurableApplicationContext) {
+ ((ConfigurableApplicationContext)ctx).addApplicationListener(this);
+ }
+ }
+ private void updateContext(ServletConfig servletConfig, ApplicationContext
ctx) {
+ // This constructor works whether there is a context or not
// If the ctx is null, we just start up the default bus
if (ctx == null) {
LOG.info("LOAD_BUS_WITHOUT_APPLICATION_CONTEXT");
@@ -101,7 +114,8 @@
} else {
LOG.info("LOAD_BUS_WITH_APPLICATION_CONTEXT");
bus = new SpringBusFactory(ctx).createBus();
- }
+ }
+
ResourceManager resourceManager =
bus.getExtension(ResourceManager.class);
resourceManager.addResourceResolver(new ServletContextResourceResolver(
servletConfig.getServletContext()));
@@ -116,7 +130,7 @@
}
private void loadAdditionalConfig(ApplicationContext ctx,
- ServletConfig servletConfig) throws
ServletException {
+ ServletConfig servletConfig) {
String location = servletConfig.getInitParameter("config-location");
if (location == null) {
location = "/WEB-INF/cxf-servlet.xml";
@@ -155,5 +169,18 @@
super.destroy();
}
+ public void onApplicationEvent(ApplicationEvent event) {
+ if (!inRefresh && event instanceof ContextRefreshedEvent) {
+ //need to re-do the bus/controller stuff
+ try {
+ inRefresh = true;
+ updateContext(this.getServletConfig(),
+
((ContextRefreshedEvent)event).getApplicationContext());
+ } finally {
+ inRefresh = false;
+ }
+ }
+ }
+
}