[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