From 00bb769d177b68dd8554928e93de970ae1f28d23 Mon Sep 17 00:00:00 2001 From: slaws Date: Sat, 18 Jul 2009 08:19:12 +0000 Subject: TUSCANY-3149 - Generally be more careful about removing object references in host-webapp. Specifically there is a problem with the axis ws binding (JIRA 3732 in the Axis project) where a shutdown hook is registered but not removed. This is fixed in Axis2 1.5 but as we are still in 1.4.1 I've worked round it here. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@795323 13f79535-47bb-0310-9956-ffa450edef68 --- .../tuscany/sca/host/webapp/TuscanyServletFilter.java | 1 + .../tuscany/sca/host/webapp/WebAppModuleActivator.java | 6 ++++++ .../tuscany/sca/host/webapp/WebAppServletHost.java | 17 ++++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) (limited to 'branches/sca-java-1.5.1/modules/host-webapp') diff --git a/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/TuscanyServletFilter.java b/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/TuscanyServletFilter.java index a5a3745d7f..2395ba0c66 100644 --- a/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/TuscanyServletFilter.java +++ b/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/TuscanyServletFilter.java @@ -70,6 +70,7 @@ public class TuscanyServletFilter implements Filter { public void destroy() { WebAppServletHost.getInstance().destroy(); + servletHost = null; } public void doFilter(ServletRequest request, ServletResponse response, javax.servlet.FilterChain chain) diff --git a/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppModuleActivator.java b/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppModuleActivator.java index dbe8a523f9..c10e5e7b5a 100644 --- a/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppModuleActivator.java +++ b/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppModuleActivator.java @@ -48,6 +48,12 @@ public class WebAppModuleActivator implements ModuleActivator { } public void stop(ExtensionPointRegistry registry) { + // as we know we are running in a webapp remove all of the servlet + // hosts. There will just be one - see start method + ServletHostExtensionPoint servletHosts = + registry.getExtensionPoint(ServletHostExtensionPoint.class); + List hosts = servletHosts.getServletHosts(); + hosts.clear(); } /** diff --git a/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java b/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java index 26114ab8b2..045cae4e75 100644 --- a/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java +++ b/branches/sca-java-1.5.1/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java @@ -19,7 +19,9 @@ package org.apache.tuscany.sca.host.webapp; +import java.beans.Introspector; import java.io.File; +import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.InetAddress; import java.net.MalformedURLException; @@ -28,6 +30,7 @@ import java.net.URL; import java.net.UnknownHostException; import java.util.Collections; import java.util.HashMap; +import java.util.IdentityHashMap; import java.util.Map; import java.util.logging.Logger; @@ -39,6 +42,7 @@ import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; +import org.apache.commons.logging.LogFactory; import org.apache.tuscany.sca.host.embedded.SCADomain; import org.apache.tuscany.sca.host.http.SecurityContext; import org.apache.tuscany.sca.host.http.ServletHost; @@ -57,7 +61,7 @@ public class WebAppServletHost implements ServletHost { public static final String SCA_DOMAIN_ATTRIBUTE = "org.apache.tuscany.sca.SCADomain"; - private static final WebAppServletHost instance = new WebAppServletHost(); + private static WebAppServletHost instance = null; private Map servlets; private SCADomain scaDomain; @@ -210,6 +214,9 @@ public class WebAppServletHost implements ServletHost { } public static WebAppServletHost getInstance() { + if (instance == null){ + instance = new WebAppServletHost(); + } return instance; } @@ -309,7 +316,15 @@ public class WebAppServletHost implements ServletHost { if (scaDomain instanceof WebSCADomain) { ((WebSCADomain)scaDomain).destroy(); } + servletContext.setAttribute(SCA_DOMAIN_ATTRIBUTE, null); + scaDomain = null; } + + servletContext = null; + instance = null; + servlets.clear(); + LogFactory.release(this.getClass().getClassLoader()); + Introspector.flushCaches(); } public String getContextPath() { -- cgit v1.2.3