From 263f8187d4b75d7c2ec3af0ed1f103d3ccccf06c Mon Sep 17 00:00:00 2001 From: antelder Date: Tue, 1 May 2012 14:06:54 +0000 Subject: TUSCANY-4034: Move the freeing up of contribution resources to a helper method that can be shared and have that called from remove in Contribution Listener git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1332661 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/tuscany/sca/impl/NodeImpl.java | 45 ++++++++-------------- 1 file changed, 15 insertions(+), 30 deletions(-) (limited to 'sca-java-2.x/trunk/modules') diff --git a/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java b/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java index 27f00be0ba..52a6c7ede5 100644 --- a/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java +++ b/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java @@ -38,10 +38,10 @@ import javax.xml.stream.XMLStreamException; import org.apache.tuscany.sca.Node; import org.apache.tuscany.sca.TuscanyRuntime; -import org.apache.tuscany.sca.assembly.AssemblyFactory; import org.apache.tuscany.sca.assembly.Composite; import org.apache.tuscany.sca.assembly.xml.Utils; import org.apache.tuscany.sca.common.java.io.IOHelper; +import org.apache.tuscany.sca.common.xml.dom.DOMHelper; import org.apache.tuscany.sca.contribution.Contribution; import org.apache.tuscany.sca.contribution.ContributionMetadata; import org.apache.tuscany.sca.contribution.Import; @@ -52,13 +52,8 @@ import org.apache.tuscany.sca.contribution.resolver.ClassReference; import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver; import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.core.invocation.ProxyFactory; -import org.apache.tuscany.sca.core.invocation.ProxyFactoryExtensionPoint; -import org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper; import org.apache.tuscany.sca.deployment.Deployer; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; import org.apache.tuscany.sca.monitor.Monitor; import org.apache.tuscany.sca.monitor.ValidationException; import org.apache.tuscany.sca.runtime.ActivationException; @@ -80,7 +75,6 @@ public class NodeImpl implements Node { private DomainRegistry domainRegistry; private ExtensionPointRegistry extensionPointRegistry; private UtilityExtensionPoint utilityExtensionPoint; - private FactoryExtensionPoint factoryExtensionPoint; private TuscanyRuntime tuscanyRuntime; private Map loadedContributions = new ConcurrentHashMap(); @@ -107,7 +101,6 @@ public class NodeImpl implements Node { this.tuscanyRuntime = tuscanyRuntime; utilityExtensionPoint = extensionPointRegistry.getExtensionPoint(UtilityExtensionPoint.class); - factoryExtensionPoint = extensionPointRegistry.getExtensionPoint(FactoryExtensionPoint.class); utilityExtensionPoint.getUtility(ActiveNodes.class).getActiveNodes().add(this); @@ -123,10 +116,13 @@ public class NodeImpl implements Node { } private void unloadContribution(String curi) { Contribution c = loadedContributions.remove(curi); - if (releaseOnUnload && (c != null)) { + if (c != null) { ClassLoader cl = c.getClassLoader(); - if (cl instanceof URLClassLoader) { - ClassLoaderUtil.releaseLoader((URLClassLoader)cl); + ContributionHelper.close(c, NodeImpl.this.extensionPointRegistry); + if (releaseOnUnload) { + if (cl instanceof URLClassLoader) { + ClassLoaderUtil.releaseLoader((URLClassLoader)cl); + } } } } @@ -241,25 +237,9 @@ public class NodeImpl implements Node { } public void uninstallContribution(String contributionURI) { - // give the runtime the chance to release only artifacts - // held by this contribution (and its classloader) - Contribution contribution = loadedContributions.get(contributionURI); - if (contribution != null) { - ClassLoader contributionClassloader = contribution.getClassLoader(); - - // These are very specific at the moment as there is no - // common lifecycle interface at this level - JAXBContextHelper jaxbContextHelper = utilityExtensionPoint.getUtility(JAXBContextHelper.class); - jaxbContextHelper.removeJAXBContextForContribution(contributionClassloader); - - JavaInterfaceFactory javaInterfaceFactory = factoryExtensionPoint.getFactory(JavaInterfaceFactory.class); - javaInterfaceFactory.removeInterfacesForContribution(contributionClassloader); - - ProxyFactoryExtensionPoint proxyFactoryExtensionPoint = extensionPointRegistry.getExtensionPoint(ProxyFactoryExtensionPoint.class); - ProxyFactory interfaceProxyFactory = proxyFactoryExtensionPoint.getInterfaceProxyFactory(); - interfaceProxyFactory.removeProxiesForContribution(contributionClassloader); - } - + + // note that the contribution listener that this class registers will free up the contribution's resources + domainRegistry.uninstallContribution(contributionURI); // remove any stopped composite that used the contribution @@ -271,6 +251,11 @@ public class NodeImpl implements Node { } } + if (loadedContributions.size() < 1) { + DOMHelper.getInstance(extensionPointRegistry).stop(); + java.beans.Introspector.flushCaches(); + } + if (logger.isLoggable(quietLogging? Level.FINE : Level.INFO)) logger.log(quietLogging? Level.FINE : Level.INFO, "uninstallContribution: " + contributionURI); } -- cgit v1.2.3