[jboss-cvs] JBossAS SVN: r106275 - in projects/jboss-cl/trunk: classloading-vfs/src/main/java/org/jboss/classloading/spi/vfs/policy and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jun 25 07:44:34 EDT 2010
Author: alesj
Date: 2010-06-25 07:44:33 -0400 (Fri, 25 Jun 2010)
New Revision: 106275
Modified:
projects/jboss-cl/trunk/classloading-vfs/src/main/java/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java
projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
Log:
[JBCL-170, JBCL-171]; cache resolved rdi, remove class's cache item after it's loaded.
Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java 2010-06-25 11:33:12 UTC (rev 106274)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java 2010-06-25 11:44:33 UTC (rev 106275)
@@ -31,7 +31,12 @@
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
-import org.jboss.classloader.spi.*;
+import org.jboss.classloader.spi.ClassLoaderPolicyFactory;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloader.spi.DelegateLoader;
+import org.jboss.classloader.spi.ImportType;
+import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloader.spi.ShutdownPolicy;
import org.jboss.classloader.spi.base.BaseClassLoader;
import org.jboss.classloader.spi.filter.ClassFilter;
import org.jboss.classloading.plugins.metadata.PackageCapability;
@@ -41,7 +46,11 @@
import org.jboss.classloading.spi.visitor.ResourceFilter;
import org.jboss.classloading.spi.visitor.ResourceVisitor;
import org.jboss.dependency.plugins.ResolvedState;
-import org.jboss.dependency.spi.*;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyInfo;
+import org.jboss.dependency.spi.DependencyItem;
import org.jboss.logging.Logger;
/**
@@ -85,6 +94,9 @@
/** The requirements */
private List<RequirementDependencyItem> requirementDependencies;
+
+ /** Already resolved dependency items */
+ private Map<RequirementDependencyItem, Module> resolved;
/** Any lifecycle associated with the classloader */
private LifeCycle lifeCycle;
@@ -94,7 +106,7 @@
/** Requirements resolved to us */
private Set<RequirementDependencyItem> depends = new CopyOnWriteArraySet<RequirementDependencyItem>();
-
+
/**
* Register a classloader for a module
*
@@ -1191,6 +1203,7 @@
addIDependOn(item);
requirementDependencies.add(item);
}
+ resolved = new ConcurrentHashMap<RequirementDependencyItem, Module>();
}
}
@@ -1205,6 +1218,7 @@
removeIDependOn(item);
}
requirementDependencies = null;
+ resolved = null;
}
/**
@@ -1216,7 +1230,10 @@
if (requirementDependencies != null && requirementDependencies.isEmpty() == false)
{
for (RequirementDependencyItem item : requirementDependencies)
+ {
item.unresolved(controller);
+ resolved.remove(item);
+ }
}
}
@@ -1336,14 +1353,34 @@
*/
protected Module resolveModule(RequirementDependencyItem dependency, boolean resolveSpace)
{
+ if (resolved != null)
+ {
+ Module resolvedModule = resolved.get(dependency);
+ if (resolvedModule != null)
+ return resolvedModule;
+ }
+
ClassLoadingSpace space = getClassLoadingSpace();
if (resolveSpace && space != null)
space.resolve(this);
+ if (resolved != null)
+ {
+ // did we resolve it as part of CLS::resolve
+ Module resolvedModule = resolved.get(dependency);
+ if (resolvedModule != null)
+ return resolvedModule;
+ }
+
Requirement requirement = dependency.getRequirement();
- return checkDomain().resolveModule(this, requirement);
+ Module result = checkDomain().resolveModule(this, requirement);
+
+ if (resolved != null && result != null)
+ resolved.put(dependency, result);
+
+ return result;
}
-
+
/**
* Release the module
*/
Modified: projects/jboss-cl/trunk/classloading-vfs/src/main/java/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java
===================================================================
--- projects/jboss-cl/trunk/classloading-vfs/src/main/java/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java 2010-06-25 11:33:12 UTC (rev 106274)
+++ projects/jboss-cl/trunk/classloading-vfs/src/main/java/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java 2010-06-25 11:44:33 UTC (rev 106275)
@@ -24,11 +24,11 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
+import java.security.CodeSigner;
import java.security.CodeSource;
import java.security.PermissionCollection;
import java.security.Policy;
import java.security.ProtectionDomain;
-import java.security.CodeSigner;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -38,6 +38,8 @@
import java.util.jar.Manifest;
import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloader.spi.ClassFoundEvent;
+import org.jboss.classloader.spi.ClassFoundHandler;
import org.jboss.classloader.spi.ClassLoaderPolicy;
import org.jboss.classloader.spi.DelegateLoader;
import org.jboss.classloader.spi.PackageInformation;
@@ -54,9 +56,7 @@
/**
* VFSClassLoaderPolicy.
*
- * [TODO] add meaningful javadoc
- *
- * @author <a href="adrian at jboss.org">Adrian Brock</a>
+ * @author <a href="adrian at jboss.org">Adrian Brock</a>
* @author <a href="ales.justin at jboss.org">Ales Justin</a>
* @author <a href="anil.saldhana at jboss.org">Anil Saldhana</a>
* @author Thomas.Diesler at jboss.com
@@ -254,6 +254,7 @@
this.name = name;
this.roots = roots;
this.excludedRoots = excludedRoots;
+ addClassFoundHandler(new VFSCacheRemove());
}
@Override
@@ -671,4 +672,14 @@
}
return false;
}
+
+ private class VFSCacheRemove implements ClassFoundHandler
+ {
+ public void classFound(ClassFoundEvent event)
+ {
+ String className = event.getClassName();
+ String path = ClassLoaderUtils.classNameToPath(className);
+ vfsCache.remove(path); // remove the entry once we loaded the class
+ }
+ }
}
More information about the jboss-cvs-commits
mailing list