[jboss-cvs] JBossAS SVN: r96656 - projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Nov 20 15:16:29 EST 2009
Author: flavia.rainone at jboss.com
Date: 2009-11-20 15:16:29 -0500 (Fri, 20 Nov 2009)
New Revision: 96656
Modified:
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java
Log:
[JBREFLECT-68] VFSClassLoaderDomainRegistry is singleton. This commit also includes refactoring:
- code has been moved away from RegisterModuleCallback and into VFSClassLoaderDomainRegistry
- DomainRegistry.initMapsForLoader(ClassLoader,Module) has been refactored into initMapsForModule(Module)
- DomainRegistry.cleanUpLoader(ClassLoader) has been refactored to cleanUpModule(Module)
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java 2009-11-20 20:11:36 UTC (rev 96655)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java 2009-11-20 20:16:29 UTC (rev 96656)
@@ -37,9 +37,9 @@
ClassLoaderDomain getDefaultDomain();
- boolean initMapsForLoader(ClassLoader loader, Module module, ClassLoader parentUnitLoader);
+ boolean initMapsForModule(Module module);
- void cleanupLoader(ClassLoader loader);
+ void cleanupModule(Module module);
ClassLoaderDomain getClassLoaderDomainForLoader(ClassLoader cl);
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java 2009-11-20 20:11:36 UTC (rev 96655)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java 2009-11-20 20:16:29 UTC (rev 96656)
@@ -26,13 +26,9 @@
import java.util.HashSet;
import java.util.Set;
-import org.jboss.classloading.spi.dependency.ClassLoading;
import org.jboss.classloading.spi.dependency.Module;
import org.jboss.classloading.spi.dependency.ModuleRegistry;
-import org.jboss.classloading.spi.vfs.dependency.VFSClassLoaderPolicyModule;
-import org.jboss.classpool.spi.ClassPoolRepository;
-import org.jboss.deployers.plugins.classloading.AbstractDeploymentClassLoaderPolicyModule;
-import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.classpool.plugins.as5.jbosscl.JBossClDelegatingClassPoolRepository;
import org.jboss.logging.Logger;
/**
@@ -40,6 +36,7 @@
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
* @version $Revision$
*/
public class RegisterModuleCallback implements ModuleRegistry
@@ -57,37 +54,42 @@
public synchronized void addModule(Module module)
{
- logger.debug("Adding module " + module);
+ if (logger.isTraceEnabled())
+ {
+ logger.trace("Adding module " + module);
+ }
unregisteredModules.add(module);
}
public synchronized void removeModule(Module module)
{
- logger.debug("Removing module " + module);
- ClassLoader classLoader = ClassLoading.getClassLoaderForModule(module);
- ClassPoolRepository.getInstance().unregisterClassLoader(classLoader);
+
+ ClassLoader classLoader = domainRegistry.getClassLoader(module);
+ if (logger.isTraceEnabled())
+ {
+ logger.trace("Removing module " + module + " and class loader " + classLoader);
+ }
+ JBossClDelegatingClassPoolRepository.getInstance().unregisterClassLoader(classLoader, module);
+ domainRegistry.cleanupModule(module);
registeredModules.remove(module);
unregisteredModules.remove(module);
}
- public synchronized Collection<Module> getUnregisteredModules()
- {
- return new ArrayList<Module>(unregisteredModules);
- }
-
public synchronized void registerModule(Module module)
{
- logger.debug("Registering module " + module);
+ if (logger.isTraceEnabled())
+ {
+ logger.trace("Registering module " + module);
+ }
+
registeredModules.add(module);
unregisteredModules.remove(module);
- ClassLoader cl = ClassLoading.getClassLoaderForModule(module);
- ClassLoader parentUnitLoader = null;
- if (module instanceof AbstractDeploymentClassLoaderPolicyModule)
- {
- DeploymentUnit unit = AbstractDeploymentClassLoaderPolicyModule.class.cast(module).getDeploymentUnit();
- parentUnitLoader = unit.isTopLevel() ? null : unit.getParent().getClassLoader();
- }
- domainRegistry.initMapsForLoader(cl, module, parentUnitLoader);
+ domainRegistry.initMapsForModule(module);
}
-}
+
+ public synchronized Collection<Module> getUnregisteredModules()
+ {
+ return new ArrayList<Module>(unregisteredModules);
+ }
+}
\ No newline at end of file
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java 2009-11-20 20:11:36 UTC (rev 96655)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java 2009-11-20 20:16:29 UTC (rev 96656)
@@ -21,10 +21,14 @@
*/
package org.jboss.classpool.plugins.as5;
+import java.lang.reflect.Method;
import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
+import org.jboss.classloader.spi.base.BaseClassLoaderSource;
+
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -77,4 +81,38 @@
return GetParentAction.PRIVILEGED.getParent(loader);
}
}
+
+ private static final Method getClassLoader;
+
+ static
+ {
+ getClassLoader = AccessController.doPrivileged(new PrivilegedAction<Method>()
+ {
+ public Method run()
+ {
+ try
+ {
+ Method method = BaseClassLoaderSource.class.getDeclaredMethod("getClassLoader");
+ method.setAccessible(true);
+ return method;
+ }
+ catch (NoSuchMethodException e)
+ {
+ throw new RuntimeException("Cannot get classloader from " + BaseClassLoaderSource.class.getName(), e);
+ }
+ }
+ });
+ }
+
+ static ClassLoader getClassLoader(BaseClassLoaderSource clSource)
+ {
+ try
+ {
+ return (ClassLoader)getClassLoader.invoke(clSource);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
}
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java 2009-11-20 20:11:36 UTC (rev 96655)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java 2009-11-20 20:16:29 UTC (rev 96656)
@@ -26,9 +26,13 @@
import java.util.Map;
import java.util.WeakHashMap;
+import org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter;
import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.dependency.ClassLoading;
import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.deployers.plugins.classloading.AbstractDeploymentClassLoaderPolicyModule;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
/**
*
@@ -39,6 +43,13 @@
{
protected final static ClassLoaderDomain domain = new ClassLoaderDomain("NOT_USED_PLACEHOLDER");
+ private static final VFSClassLoaderDomainRegistry instance = new VFSClassLoaderDomainRegistry();
+
+ public static final VFSClassLoaderDomainRegistry getInstance()
+ {
+ return instance;
+ }
+
private ClassLoaderSystem system;
private ClassLoaderDomain defaultDomain;
@@ -57,6 +68,8 @@
protected Map<ClassLoaderDomain, Integer> classLoaderDomainReferenceCounts = new WeakHashMap<ClassLoaderDomain, Integer>();
+ protected VFSClassLoaderDomainRegistry() {}
+
/**
* Needed for the tests, not expected to be needed in production
*/
@@ -91,8 +104,10 @@
return defaultDomain;
}
- public synchronized boolean initMapsForLoader(ClassLoader loader, Module module, ClassLoader parentUnitLoader)
+ public synchronized boolean initMapsForModule(Module module)
{
+ ClassLoader loader = ClassLoading.getClassLoaderForModule(module);
+ ClassLoader parentUnitLoader = findParentUnitLoader(module);
if (loader == parentUnitLoader)
{
throw new IllegalArgumentException("initMapsForLoader() should only be called if parentUnitLoader is different from loader");
@@ -132,8 +147,9 @@
}
- public synchronized void cleanupLoader(ClassLoader loader)
+ public synchronized void cleanupModule(Module module)
{
+ ClassLoader loader = this.getClassLoader(module);
validateCleanupLoader(loader);
WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.remove(loader);
ClassLoaderDomain clDomain = clDomainRef == null ? null : clDomainRef.get();
@@ -148,38 +164,17 @@
}
if (cnt == 0)
{
- //aopDomainsByClassLoaderDomain.remove(clDomain);
classLoaderDomainReferenceCounts.remove(clDomain);
}
else
{
classLoaderDomainReferenceCounts.put(clDomain, ++cnt);
}
- //ScopedVFSClassLoaderDomain aopDomain = aopDomainsByClassLoader.remove(loader);
classLoaderUnitParents.remove(loader);
- WeakReference<Module> moduleRef = classLoaderModules.remove(loader);
- if (moduleRef != null)
- {
- Module module = moduleRef.get();
- if (module != null)
- {
- moduleClassLoaders.remove(module);
- }
- }
-
-
- /*List<ScopedVFSClassLoaderDomain> aopDomains = aopDomainsByClassLoaderDomain.get(clDomain);
- if (aopDomains != null)
- {
- aopDomains.remove(aopDomain);
- }
- if (aopDomain != null)
- {
- aopDomain.getParent().unsubscribeSubDomain(aopDomain);
- }*/
+ classLoaderModules.remove(loader);
+ moduleClassLoaders.remove(module);
}
cleanupLoaderDone(loader, clDomain, cnt);
- //aopDomainsByClassLoader.remove(loader);
}
protected void validateCleanupLoader(ClassLoader loader) {}
@@ -236,4 +231,20 @@
}
return null;
}
-}
+
+ private ClassLoader findParentUnitLoader(Module module)
+ {
+ if (module instanceof AbstractDeploymentClassLoaderPolicyModule)
+ {
+ DeploymentUnit unit = AbstractDeploymentClassLoaderPolicyModule.class.cast(module).getDeploymentUnit();
+ return unit.isTopLevel() ? null : unit.getParent().getClassLoader();
+ }
+ ClassLoaderDomain domain = ClassLoaderSystem.getInstance().getDomain(module.getDeterminedDomainName());
+ if (domain.getParent() instanceof ClassLoaderToLoaderAdapter)
+ {
+ ClassLoaderToLoaderAdapter cp2la = (ClassLoaderToLoaderAdapter)domain.getParent();
+ return SecurityActions.getClassLoader(cp2la);
+ }
+ return null;
+ }
+}
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list