[jboss-cvs] JBossAS SVN: r64041 - in projects/microcontainer/trunk: classloader and 20 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jul 13 11:29:52 EDT 2007


Author: adrian at jboss.org
Date: 2007-07-13 11:29:52 -0400 (Fri, 13 Jul 2007)
New Revision: 64041

Added:
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingButJavaClassFilter.java
   projects/microcontainer/trunk/classloader/src/resources/tests/a/com/acme/p1/testResource.xml
   projects/microcontainer/trunk/classloader/src/resources/tests/a/testResource.xml
Removed:
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/jmx/
Modified:
   projects/microcontainer/trunk/build/pom.xml
   projects/microcontainer/trunk/classloader/.classpath
   projects/microcontainer/trunk/classloader/pom.xml
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/ClassLoaderUtils.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/EverythingClassFilter.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/JavaOnlyClassFilter.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingClassFilter.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/PatternClassFilter.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderDomain.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/Loader.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ParentPolicy.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseDelegateLoader.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoaderManager.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoadingTask.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/ClassFilter.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/PackageClassFilter.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderPolicy.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MatchClassFilter.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MockLoader.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/NoMatchClassFilter.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/PackageFilterUnitTestCase.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/jmx/test/JMXUnitTestCase.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/policy/support/TestDelegateLoader.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/resources/tests/ResourceUnitTestCase.java
   projects/microcontainer/trunk/deployers-impl/.classpath
   projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractTopLevelClassLoaderSystemDeployer.java
   projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/ClassLoading.java
   projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/Domain.java
   projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/Module.java
   projects/microcontainer/trunk/deployers-structure-spi/src/main/org/jboss/deployers/structure/spi/classloading/ClassLoaderMetaData.java
   projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/PackageVisitor.java
   projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSClassLoaderPolicy.java
   projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSTopLevelClassLoaderSystemDeployer.java
Log:
[JBMICROCONT-182] - Changes for vfs classloader integration.
Committed to keep Sacha happy. :-)

Modified: projects/microcontainer/trunk/build/pom.xml
===================================================================
--- projects/microcontainer/trunk/build/pom.xml	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/build/pom.xml	2007-07-13 15:29:52 UTC (rev 64041)
@@ -41,6 +41,7 @@
     <version.jaxb.api>2.0</version.jaxb.api>
     <version.jboss.aop>2.0.0-SNAPSHOT</version.jboss.aop>
     <version.jboss.logging.spi>2.0.3.GA</version.jboss.logging.spi>
+    <version.jboss.classloading.spi>5.0.0-SNAPSHOT</version.jboss.classloading.spi>
     <version.jboss.test>1.0.4-SNAPSHOT</version.jboss.test>
     <version.junit>3.8.1</version.junit>
     <version.jboss.profiler.jvmti>1.0.0.CR5</version.jboss.profiler.jvmti>
@@ -367,6 +368,11 @@
         <version>${version.jboss.logging.spi}</version>
       </dependency>
       <dependency>
+        <groupId>jboss</groupId>
+        <artifactId>jboss-classloading-spi</artifactId>
+        <version>${version.jboss.classloading.spi}</version>
+      </dependency>
+      <dependency>
         <groupId>org.apache.ant</groupId>
         <artifactId>ant-junit</artifactId>
         <version>${version.ant.junit}</version>

Modified: projects/microcontainer/trunk/classloader/.classpath
===================================================================
--- projects/microcontainer/trunk/classloader/.classpath	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/.classpath	2007-07-13 15:29:52 UTC (rev 64041)
@@ -11,6 +11,7 @@
   <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-logging-log4j/2.0.4.GA/jboss-common-logging-log4j-2.0.4.GA.jar" sourcepath="M2_REPO/jboss/jboss-common-logging-log4j/2.0.4.GA/jboss-common-logging-log4j-2.0.4.GA-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/jboss/profiler/jvmti/jboss-profiler-jvmti/1.0.0.CR5/jboss-profiler-jvmti-1.0.0.CR5.jar"/>
   <classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-spi/2.0.3.GA/jboss-logging-spi-2.0.3.GA.jar" sourcepath="M2_REPO/jboss/jboss-logging-spi/2.0.3.GA/jboss-logging-spi-2.0.3.GA-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/jboss-classloading-spi/5.0.0-SNAPSHOT/jboss-classloading-spi-5.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/jboss/jboss-classLoading-spi-5.0.0-SNAPSHOT/5.0.0-SNAPSHOT/jboss-classloading-spi-5.0.0-SNAPSHOT-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant/1.7.0/ant-1.7.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.7.1/xml-apis-2.7.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-logging-spi/2.0.4.GA/jboss-common-logging-spi-2.0.4.GA.jar" sourcepath="M2_REPO/jboss/jboss-common-logging-spi/2.0.4.GA/jboss-common-logging-spi-2.0.4.GA-sources.jar"/>

Modified: projects/microcontainer/trunk/classloader/pom.xml
===================================================================
--- projects/microcontainer/trunk/classloader/pom.xml	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/pom.xml	2007-07-13 15:29:52 UTC (rev 64041)
@@ -23,6 +23,10 @@
     <!-- Global dependencies -->
     <dependency>
 	    <groupId>jboss</groupId>
+	    <artifactId>jboss-classloading-spi</artifactId>
+     </dependency>
+    <dependency>
+	    <groupId>jboss</groupId>
 	    <artifactId>jboss-common-core</artifactId>
 	  </dependency>
     <dependency>

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/ClassLoaderUtils.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/ClassLoaderUtils.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/ClassLoaderUtils.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -101,17 +101,6 @@
          return "";
       return className.substring(0, i).replace('/', '.');
    }
-
-   /**
-    * Get the resource name in dot notation
-    * 
-    * @param name the resource name
-    * @return the resource name with / replaced by .
-    */
-   public static final String getResourceNameInDotNotation(final String name)
-   {
-      return name.replace('/', '.');
-   }
    
    /**
     * Load bytecode from a stream

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/EverythingClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/EverythingClassFilter.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/EverythingClassFilter.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -42,11 +42,16 @@
       // Singleton
    }
    
-   public boolean matches(String className)
+   public boolean matchesClassName(String className)
    {
       return true;
    }
    
+   public boolean matchesResourcePath(String resourcePath)
+   {
+      return true;
+   }
+   
    @Override
    public String toString()
    {

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/JavaOnlyClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/JavaOnlyClassFilter.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/JavaOnlyClassFilter.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -37,7 +37,7 @@
     */
    private JavaOnlyClassFilter()
    {
-      super(new String[] { "java\\..+", "javax\\..+" } );
+      super(new String[] { "java\\..+", "javax\\..+" }, new String[] { "java/.+", "javax/.+" } );
    }
 
    public String toString()

Added: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingButJavaClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingButJavaClassFilter.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingButJavaClassFilter.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -0,0 +1,47 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.classloader.plugins.filter;
+
+/**
+ * A class filter that only delegates java.* classes
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class NothingButJavaClassFilter extends PatternClassFilter
+{
+   /** The singleton instance */ 
+   public static final NothingButJavaClassFilter INSTANCE = new NothingButJavaClassFilter();
+   
+   /**
+    * Create a new JavaOnlyClassFilter.
+    */
+   private NothingButJavaClassFilter()
+   {
+      super(new String[] { "java\\..+" }, new String[] { "java/.+" });
+   }
+
+   public String toString()
+   {
+      return "NOTHING_BUT_JAVA";
+   }
+}

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingClassFilter.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingClassFilter.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -42,11 +42,16 @@
       // Singleton
    }
    
-   public boolean matches(String className)
+   public boolean matchesClassName(String className)
    {
       return false;
    }
    
+   public boolean matchesResourcePath(String resourcePath)
+   {
+      return false;
+   }
+   
    @Override
    public String toString()
    {

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/PatternClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/PatternClassFilter.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/PatternClassFilter.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -35,71 +35,78 @@
  */
 public class PatternClassFilter implements ClassFilter
 {
-   /** The patterns as regular expressions */
-   private Pattern[] patterns;
+   /** The class patterns as regular expressions */
+   private Pattern[] classPatterns;
 
-   /**
-    * Create a new PatternClassFilter.
-    * 
-    * @param patterns the patterns
-    * @return the filter
-    * @throws IllegalArgumentException for a null pattern
-    */
-   public static PatternClassFilter createPatternClassFilter(String... patterns)
-   {
-      return new PatternClassFilter(patterns);
-   }
+   /** The resource patterns as regular expressions */
+   private Pattern[] resourcePatterns;
    
    /**
     * Create a new PatternClassFilter.
     * 
-    * @param pattern the pattern
-    */
-   public PatternClassFilter(String pattern)
-   {
-      if (pattern == null)
-         throw new IllegalArgumentException("Null pattern");
-      patterns = new Pattern[1];
-      patterns[0] = Pattern.compile(pattern);
-   }
-   
-   /**
-    * Create a new PatternClassFilter.
-    * 
-    * @param patterns the patterns
+    * @param classPatterns the class patterns
+    * @param resourcePatterns the resource patterns
     * @throws IllegalArgumentException for a null pattern
     */
-   public PatternClassFilter(String[] patterns)
+   public PatternClassFilter(String[] classPatterns, String[] resourcePatterns)
    {
-      if (patterns == null)
+      if (classPatterns == null)
          throw new IllegalArgumentException("Null patterns");
       
-      this.patterns = new Pattern[patterns.length];
-      for (int i = 0; i < patterns.length; ++i)
+      this.classPatterns = new Pattern[classPatterns.length];
+      for (int i = 0; i < classPatterns.length; ++i)
       {
-         if (patterns[i] == null)
-            throw new IllegalArgumentException("Null pattern in " + Arrays.asList(patterns));
-         this.patterns[i] = Pattern.compile(patterns[i]);
+         if (classPatterns[i] == null)
+            throw new IllegalArgumentException("Null pattern in " + Arrays.asList(classPatterns));
+         this.classPatterns[i] = Pattern.compile(classPatterns[i]);
       }
+
+      if (resourcePatterns == null)
+      {
+         this.resourcePatterns = this.classPatterns;
+         return;
+      }
+      
+      this.resourcePatterns = new Pattern[resourcePatterns.length];
+      for (int i = 0; i < resourcePatterns.length; ++i)
+      {
+         if (resourcePatterns[i] == null)
+            throw new IllegalArgumentException("Null pattern in " + Arrays.asList(resourcePatterns));
+         this.resourcePatterns[i] = Pattern.compile(resourcePatterns[i]);
+      }
    }
 
-   public boolean matches(String className)
+   public boolean matchesClassName(String className)
    {
       if (className == null)
          return false;
       
-      for (int i = 0; i < patterns.length; ++i)
+      for (int i = 0; i < classPatterns.length; ++i)
       {
-         Matcher matcher = patterns[i].matcher(className);
+         Matcher matcher = classPatterns[i].matcher(className);
          if (matcher.matches())
             return true;
       }
       return false;
    }
 
+   public boolean matchesResourcePath(String resourcePath)
+   {
+      if (resourcePath == null)
+         return false;
+      
+      for (int i = 0; i < resourcePatterns.length; ++i)
+      {
+         Matcher matcher = resourcePatterns[i].matcher(resourcePath);
+         if (matcher.matches())
+            return true;
+      }
+      return false;
+   }
+
    @Override
    public String toString()
    {
-      return Arrays.asList(patterns).toString();
+      return Arrays.asList(classPatterns).toString();
    }
 }

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -64,7 +64,7 @@
       accessControlContext = AccessController.getContext();
    }
 
-   public URL getResource(final String name, String resourceName)
+   public URL getResource(final String name)
    {
       URL url;
       SecurityManager sm = System.getSecurityManager();
@@ -94,7 +94,7 @@
       return url;
    }
 
-   public void getResources(final String name, String resourceName, Set<URL> urls) throws IOException
+   public void getResources(final String name, Set<URL> urls) throws IOException
    {
       Enumeration<URL> enumeration;
       SecurityManager sm = System.getSecurityManager();

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderDomain.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderDomain.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderDomain.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -148,34 +148,34 @@
    }
    
    @Override
-   protected Loader findBeforeLoader(String name, String resourceName)
+   protected Loader findBeforeLoader(String name)
    {
       boolean trace = log.isTraceEnabled();
       ClassFilter filter = getParentPolicy().getBeforeFilter();
-      if (filter.matches(resourceName))
+      if (filter.matchesResourcePath(name))
       {
          if (trace)
-            log.trace(this + " " + resourceName + " matches parent beforeFilter=" + filter);
-         return findLoaderFromParent(name, resourceName);
+            log.trace(this + " " + name + " matches parent beforeFilter=" + filter);
+         return findLoaderFromParent(name);
       }
       if (trace)
-         log.trace(this + " " + resourceName + " does NOT match parent beforeFilter=" + filter);
+         log.trace(this + " " + name + " does NOT match parent beforeFilter=" + filter);
       return null;
    }
 
    @Override
-   protected Loader findAfterLoader(String name, String resourceName)
+   protected Loader findAfterLoader(String name)
    {
       boolean trace = log.isTraceEnabled();
       ClassFilter filter = getParentPolicy().getAfterFilter();
-      if (filter.matches(resourceName))
+      if (filter.matchesResourcePath(name))
       {
          if (trace)
-            log.trace(this + " " + resourceName + " matches parent afterFilter=" + filter);
-         return findLoaderFromParent(name, resourceName);
+            log.trace(this + " " + name + " matches parent afterFilter=" + filter);
+         return findLoaderFromParent(name);
       }
       if (trace)
-         log.trace(this + " " + resourceName + " does NOT match parent afterFilter=" + filter);
+         log.trace(this + " " + name + " does NOT match parent afterFilter=" + filter);
       return null;
    }
 
@@ -183,10 +183,9 @@
     * Try to find a loader from the parent
     * 
     * @param name the name
-    * @param resourceName the name in dot notation
     * @return the loader if found
     */
-   protected Loader findLoaderFromParent(String name, String resourceName)
+   protected Loader findLoaderFromParent(String name)
    {
       Loader parentLoader = getParent();
 
@@ -199,32 +198,32 @@
       }
 
       if (trace)
-         log.trace(this + " load from parent " + resourceName + " parent=" + parent);
+         log.trace(this + " load from parent " + name + " parent=" + parent);
 
       // Recurse into parent domains
       if (parentLoader instanceof ClassLoaderDomain)
       {
          ClassLoaderDomain parentDomain = (ClassLoaderDomain) parentLoader;
-         return parentDomain.findLoader(name, resourceName);
+         return parentDomain.findLoader(name);
       }
       
       // A normal loader
-      if (parentLoader.getResource(name, resourceName) != null)
+      if (parentLoader.getResource(name) != null)
          return parentLoader;
       
       return null;
    }
    
    @Override
-   protected URL beforeGetResource(String name, String resourceName)
+   protected URL beforeGetResource(String name)
    {
       boolean trace = log.isTraceEnabled();
       ClassFilter filter = getParentPolicy().getBeforeFilter();
-      if (filter.matches(resourceName))
+      if (filter.matchesResourcePath(name))
       {
          if (trace)
             log.trace(this + " " + name + " matches parent beforeFilter=" + filter);
-         return getResourceFromParent(name, resourceName);
+         return getResourceFromParent(name);
       }
       if (trace)
          log.trace(this + " " + name + " does NOT match parent beforeFilter=" + filter);
@@ -232,15 +231,15 @@
    }
 
    @Override
-   protected URL afterGetResource(String name, String resourceName)
+   protected URL afterGetResource(String name)
    {
       boolean trace = log.isTraceEnabled();
       ClassFilter filter = getParentPolicy().getAfterFilter();
-      if (filter.matches(resourceName))
+      if (filter.matchesResourcePath(name))
       {
          if (trace)
             log.trace(this + " " + name + " matches parent afterFilter=" + filter);
-         return getResourceFromParent(name, resourceName);
+         return getResourceFromParent(name);
       }
       if (trace)
          log.trace(this + " " + name + " does NOT match parent afterFilter=" + filter);
@@ -251,10 +250,9 @@
     * Try to get a resource from the parent
     * 
     * @param name the name
-    * @param resourceName the name of the resource in dot notation
     * @return the url if found
     */
-   protected URL getResourceFromParent(String name, String resourceName)
+   protected URL getResourceFromParent(String name)
    {
       Loader parentLoader = getParent();
 
@@ -269,7 +267,7 @@
       if (trace)
          log.trace(this + " get resource from parent " + name + " parent=" + parentLoader);
       
-      URL result = parentLoader.getResource(name, resourceName);
+      URL result = parentLoader.getResource(name);
 
       if (trace)
       {
@@ -283,30 +281,30 @@
    }
    
    @Override
-   protected void beforeGetResources(String name, String resourceName, Set<URL> urls) throws IOException
+   protected void beforeGetResources(String name, Set<URL> urls) throws IOException
    {
       boolean trace = log.isTraceEnabled();
       ClassFilter filter = getParentPolicy().getBeforeFilter();
-      if (filter.matches(resourceName))
+      if (filter.matchesResourcePath(name))
       {
          if (trace)
             log.trace(this + " " + name + " matches parent beforeFilter=" + filter);
-         getResourcesFromParent(name, resourceName, urls);
+         getResourcesFromParent(name, urls);
       }
       else if (trace)
          log.trace(this + " " + name + " does NOT match parent beforeFilter=" + filter);
    }
 
    @Override
-   protected void afterGetResources(String name, String resourceName, Set<URL> urls) throws IOException
+   protected void afterGetResources(String name, Set<URL> urls) throws IOException
    {
       boolean trace = log.isTraceEnabled();
       ClassFilter filter = getParentPolicy().getAfterFilter();
-      if (filter.matches(resourceName))
+      if (filter.matchesResourcePath(name))
       {
          if (trace)
             log.trace(this + " " + name + " matches parent afterFilter=" + filter);
-         getResourcesFromParent(name, resourceName, urls);
+         getResourcesFromParent(name, urls);
       }
       else if (trace)
          log.trace(this + " " + name + " does NOT match parent afterFilter=" + filter);
@@ -317,10 +315,9 @@
     * 
     * @param name the name
     * @param urls the urls to add to
-    * @param resourceName the name of the resource in dot notation
     * @throws IOException for any error
     */
-   protected void getResourcesFromParent(String name, String resourceName, Set<URL> urls) throws IOException
+   protected void getResourcesFromParent(String name, Set<URL> urls) throws IOException
    {
       Loader parentLoader = getParent();
 
@@ -335,7 +332,7 @@
       if (trace)
          log.trace(this + " get resources from parent " + name + " parent=" + parentLoader);
       
-      parentLoader.getResources(name, resourceName, urls);
+      parentLoader.getResources(name, urls);
    }
 
    /**

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/Loader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/Loader.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/Loader.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -45,18 +45,16 @@
     * Get a resource
     * 
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @return the url or null if not found
     */
-   URL getResource(String name, String resourceName);
+   URL getResource(String name);
 
    /**
     * Get resources
     * 
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param urls the list of urls to add to
     * @throws IOException for any error
     */
-   void getResources(String name, String resourceName, Set<URL> urls) throws IOException;
+   void getResources(String name, Set<URL> urls) throws IOException;
 }

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ParentPolicy.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ParentPolicy.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ParentPolicy.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -35,7 +35,7 @@
    public static final ParentPolicy BEFORE = new ParentPolicy(ClassFilter.EVERYTHING, ClassFilter.NOTHING, "BEFORE");
 
    /** Servlet style */
-   public static final ParentPolicy AFTER = new ParentPolicy(ClassFilter.NOTHING, ClassFilter.EVERYTHING, "AFTER");
+   public static final ParentPolicy AFTER = new ParentPolicy(ClassFilter.NOTHING_BUT_JAVA, ClassFilter.EVERYTHING, "AFTER");
 
    /** Standard Java Delegation for java classes */
    public static final ParentPolicy BEFORE_BUT_JAVA_ONLY = new ParentPolicy(ClassFilter.JAVA_ONLY, ClassFilter.NOTHING, "BEFORE_BUT_JAVA_ONLY");

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -45,7 +45,7 @@
 import org.jboss.classloader.spi.ClassLoaderPolicy;
 import org.jboss.classloader.spi.DelegateLoader;
 import org.jboss.classloader.spi.PackageInformation;
-import org.jboss.classloader.spi.jmx.JMXClassLoader;
+import org.jboss.classloading.spi.RealClassLoader;
 import org.jboss.logging.Logger;
 import org.jboss.util.collection.Iterators;
 
@@ -55,7 +55,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $
  */
-public class BaseClassLoader extends SecureClassLoader implements BaseClassLoaderMBean, JMXClassLoader
+public class BaseClassLoader extends SecureClassLoader implements BaseClassLoaderMBean, RealClassLoader 
 {
    /** The log */
    private static final Logger log = Logger.getLogger(BaseClassLoader.class);
@@ -100,8 +100,7 @@
       if (basePolicy.isBlackListable())
          blackList = new CopyOnWriteArraySet<String>();
       
-      if (log.isTraceEnabled())
-         log.debug("Created " + this + " with policy " + policy);
+      log.debug("Created " + this + " with policy " + policy.toLongString());
    }
 
    public ObjectName getObjectName()
@@ -187,7 +186,7 @@
          log.trace(this + " getResource " + name + " domain=" + domain);
 
       if (domain != null)
-         return domain.getResource(this, name, ClassLoaderUtils.getResourceNameInDotNotation(name));
+         return domain.getResource(this, name);
       return null;
    }
 
@@ -203,7 +202,7 @@
 
       Set<URL> resourceURLs = new HashSet<URL>();
       if (domain != null)
-         domain.getResources(this, name, ClassLoaderUtils.getResourceNameInDotNotation(name), resourceURLs);
+         domain.getResources(this, name, resourceURLs);
       return Iterators.toEnumeration(resourceURLs.iterator());
    }
 
@@ -240,17 +239,17 @@
       }
 
       // Look for the resource
-      final String resourceName = ClassLoaderUtils.classNameToPath(name);
+      final String resourcePath = ClassLoaderUtils.classNameToPath(name);
       
       return AccessController.doPrivileged(new PrivilegedAction<Class>()
       {
          public Class<?> run()
          {
-            InputStream is = policy.getResourceAsStream(resourceName);
+            InputStream is = policy.getResourceAsStream(resourcePath);
             if (is == null)
             {
                if (trace)
-                  log.trace(this + " resource not found locally " + resourceName + " for " + name);
+                  BaseClassLoader.log.trace(this + " resource not found locally " + resourcePath + " for " + name);
                return null;
             }
 
@@ -259,7 +258,7 @@
             
             // Let the policy do things before we define the class
             BaseClassLoaderPolicy basePolicy = policy;
-            ProtectionDomain protectionDomain = basePolicy.getProtectionDomain(name, resourceName);
+            ProtectionDomain protectionDomain = basePolicy.getProtectionDomain(name, resourcePath);
             byteCode = policy.transform(name, byteCode, protectionDomain);
             
             // Create the package if necessary
@@ -272,7 +271,7 @@
             else
                result = defineClass(name, byteCode, 0, byteCode.length);
             if (trace)
-               log.trace(this + " loaded class locally " + ClassLoaderUtils.classToString(result));
+               BaseClassLoader.log.trace(this + " loaded class locally " + ClassLoaderUtils.classToString(result));
             return result;
          }
       }, policy.getAccessControlContext());
@@ -282,23 +281,21 @@
     * Try to find the resource locally
     * 
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @return the url if found
     */
-   URL getResourceLocally(String name, String resourceName)
+   URL getResourceLocally(String name)
    {
-      return getResourceLocally(name, resourceName, log.isTraceEnabled());
+      return getResourceLocally(name, log.isTraceEnabled());
    }
 
    /**
     * Try to find the resource locally
     * 
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param trace whether trace is enabled
     * @return the URL if found
     */
-   URL getResourceLocally(final String name, final String resourceName, final boolean trace)
+   URL getResourceLocally(final String name, final boolean trace)
    {
       if (trace)
          log.trace(this + " get resource locally " + name);
@@ -333,11 +330,11 @@
             if (result == null)
             {
                if (trace)
-                  log.trace(this + " resource not found locally " + name);
+                  BaseClassLoader.log.trace(this + " resource not found locally " + name);
                return null;
             }
             if (trace)
-               log.trace(this + " got resource locally " + name);
+               BaseClassLoader.log.trace(this + " got resource locally " + name);
             return result;
          }
       }, policy.getAccessControlContext());
@@ -357,25 +354,23 @@
     * Try to find the resource locally
     * 
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param urls the urls to add to
     * @throws IOException for any error
     */
-   void getResourcesLocally(String name, String resourceName, Set<URL> urls) throws IOException
+   void getResourcesLocally(String name, Set<URL> urls) throws IOException
    {
-      getResourcesLocally(name, resourceName, urls, log.isTraceEnabled());
+      getResourcesLocally(name, urls, log.isTraceEnabled());
    }
 
    /**
     * Try to find the resources locally
     * 
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param urls the urls to add to
     * @param trace whether trace is enabled
     * @throws IOException for any error
     */
-   void getResourcesLocally(final String name, final String resourceName, final Set<URL> urls, boolean trace) throws IOException
+   void getResourcesLocally(final String name, final Set<URL> urls, boolean trace) throws IOException
    {
       if (trace)
          log.trace(this + " get resources locally " + name);
@@ -486,7 +481,25 @@
          unlock(trace);
       }
    }
+
+   public boolean isValid()
+   {
+      BaseClassLoaderPolicy basePolicy = policy;
+      return basePolicy.getClassLoader() != null;
+   }
    
+   public Class<?> getCachedClass(String name)
+   {
+      // TODO look in global and/or local cache
+      return null;
+   }
+
+   public URL getCachedResource(String name)
+   {
+      // TODO look in global and/or local cache
+      return null;
+   }
+
    /**
     * A long version of the classloader
     * 
@@ -502,7 +515,7 @@
       builder.append('}');
       return builder.toString();
    }
-
+   
    /**
     * Shutdown the classloader
     */

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -182,7 +182,7 @@
       
       String path = ClassLoaderUtils.classNameToPath(name);
 
-      Loader loader = findLoader(classLoader, path, name, allExports);
+      Loader loader = findLoader(classLoader, path, allExports);
       if (loader != null)
       {
          Thread thread = Thread.currentThread();
@@ -217,12 +217,11 @@
     * Find a loader for a class
     * 
     * @param name the class resource name
-    * @param resourceName the resource name in dot notation
     * @return the loader
     */
-   protected Loader findLoader(String name, String resourceName)
+   protected Loader findLoader(String name)
    {
-      return findLoader(null, name, resourceName, true);
+      return findLoader(null, name, true);
    }
 
    /**
@@ -230,21 +229,20 @@
     * 
     * @param classLoader the classloader
     * @param name the class resource name
-    * @param resourceName the resource name in dot notation
     * @param allExports whether we should look at all exports
     * @return the loader
     */
-   Loader findLoader(BaseClassLoader classLoader, String name, String resourceName, boolean allExports)
+   Loader findLoader(BaseClassLoader classLoader, String name, boolean allExports)
    {
       boolean trace = log.isTraceEnabled();
       if (trace)
-         log.trace(this + " findLoader " + resourceName + " classLoader=" + classLoader + " allExports=" + allExports);
+         log.trace(this + " findLoader " + name + " classLoader=" + classLoader + " allExports=" + allExports);
       
       if (getClassLoaderSystem() == null)
          throw new IllegalStateException("Domain is not registered with a classloader system: " + toLongString());
       
       // Try the before attempt (e.g. from the parent)
-      Loader loader = findBeforeLoader(name, resourceName);
+      Loader loader = findBeforeLoader(name);
       if (loader != null)
          return loader;
 
@@ -262,17 +260,17 @@
       // Next we try the old "big ball of mud" model      
       if (allExports)
       {
-         loader = findLoaderInExports(classLoader, name, resourceName, trace);
+         loader = findLoaderInExports(classLoader, name, trace);
          if (loader != null)
             return loader;
       }
       else if (trace)
-         log.trace(this + " not loading " + resourceName + " from all exports");
+         log.trace(this + " not loading " + name + " from all exports");
       
       // Next we try the imports
       if (info != null)
       {
-         loader = findLoaderInImports(info, name, resourceName, trace);
+         loader = findLoaderInImports(info, name, trace);
          if (loader != null)
             return loader;
       }
@@ -281,13 +279,13 @@
       if (classLoader != null)
       {
          if (trace)
-            log.trace(this + " trying to load " + resourceName + " from requesting " + classLoader);
-         if (classLoader.getResourceLocally(name, resourceName) != null)
+            log.trace(this + " trying to load " + name + " from requesting " + classLoader);
+         if (classLoader.getResourceLocally(name) != null)
             return classLoader.getLoader();
       }
 
       // Try the after attempt (e.g. from the parent)
-      return findAfterLoader(name, resourceName);
+      return findAfterLoader(name);
    }
    
    /**
@@ -295,11 +293,10 @@
     * 
     * @param classLoader the classloader
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param allExports whether we should look at all exports
     * @return the url
     */
-   URL getResource(BaseClassLoader classLoader, String name, String resourceName, boolean allExports)
+   URL getResource(BaseClassLoader classLoader, String name, boolean allExports)
    {
       boolean trace = log.isTraceEnabled();
 
@@ -307,7 +304,7 @@
          throw new IllegalStateException("Domain is not registered with a classloader system: " + toLongString());
 
       // Try the before attempt
-      URL result = beforeGetResource(name, resourceName);
+      URL result = beforeGetResource(name);
       if (result != null)
          return result;
 
@@ -325,7 +322,7 @@
       // Next we try the old "big ball of mud" model      
       if (allExports)
       {
-         result = getResourceFromExports(classLoader, name, resourceName, trace);
+         result = getResourceFromExports(classLoader, name, trace);
          if (result != null)
             return result;
       }
@@ -335,7 +332,7 @@
       // Next we try the imports
       if (info != null)
       {
-         result = getResourceFromImports(info, name, resourceName, trace);
+         result = getResourceFromImports(info, name, trace);
          if (result != null)
             return result;
       }
@@ -345,7 +342,7 @@
       {
          if (trace)
             log.trace(this + " trying to get resource " + name + " from requesting " + classLoader);
-         result = classLoader.getResourceLocally(name, resourceName);
+         result = classLoader.getResourceLocally(name);
          if (result != null)
          {
             if (trace)
@@ -355,7 +352,7 @@
       }
 
       // Try the after attempt
-      result = afterGetResource(name, resourceName);
+      result = afterGetResource(name);
       if (result != null)
          return result;
       
@@ -368,12 +365,11 @@
     * 
     * @param classLoader the classloader
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param allExports whether we should look at all exports
     * @param urls the urls to add to
     * @throws IOException for any error
     */
-   void getResources(BaseClassLoader classLoader, String name, String resourceName, Set<URL> urls, boolean allExports) throws IOException
+   void getResources(BaseClassLoader classLoader, String name, Set<URL> urls, boolean allExports) throws IOException
    {
       boolean trace = log.isTraceEnabled();
 
@@ -381,7 +377,7 @@
          throw new IllegalStateException("Domain is not registered with a classloader system: " + toLongString());
 
       // Try the before attempt
-      beforeGetResources(name, resourceName, urls);
+      beforeGetResources(name, urls);
 
       // Work out the rules
       ClassLoaderInformation info = null;
@@ -396,24 +392,24 @@
 
       // Next we try the old "big ball of mud" model      
       if (allExports)
-         getResourcesFromExports(classLoader, name, resourceName, urls, trace);
+         getResourcesFromExports(classLoader, name, urls, trace);
       else if (trace)
          log.trace(this + " not getting resource " + name + " from all exports");
       
       // Next we try the imports
       if (info != null)
-         getResourcesFromImports(info, name, resourceName, urls, trace);
+         getResourcesFromImports(info, name, urls, trace);
 
       // Finally use any requesting classloader
       if (classLoader != null)
       {
          if (trace)
             log.trace(this + " trying to get resources " + name + " from requesting " + classLoader);
-         classLoader.getResourcesLocally(name, resourceName, urls);
+         classLoader.getResourcesLocally(name, urls);
       }
 
       // Try the after attempt
-      afterGetResources(name, resourceName, urls);
+      afterGetResources(name, urls);
    }
    
    /**
@@ -421,17 +417,16 @@
     * 
     * @param classLoader the classloader
     * @param name the class resource name
-    * @param resourceName the resource name in dot notation
     * @param trace whether trace is enabled
     * @return the loader
     */
-   private Loader findLoaderInExports(BaseClassLoader classLoader, String name, String resourceName, boolean trace)
+   private Loader findLoaderInExports(BaseClassLoader classLoader, String name, boolean trace)
    {
       Loader loader = globalClassCache.get(name);
       if (loader != null)
       {
          if (trace)
-            log.trace(this + " found in global class cache " + resourceName);
+            log.trace(this + " found in global class cache " + name);
 
          return loader;
       }
@@ -439,16 +434,16 @@
       if (globalClassBlackList.contains(name))
       {
          if (trace)
-            log.trace(this + " class is black listed " + resourceName);
+            log.trace(this + " class is black listed " + name);
          return null;
       }
       boolean canCache = true;
       boolean canBlackList = true;
       
-      String packageName = ClassLoaderUtils.getClassPackageName(resourceName);
+      String packageName = ClassLoaderUtils.getResourcePackageName(name);
       List<ClassLoaderInformation> list = classLoadersByPackageName.get(packageName);
       if (trace)
-         log.trace(this + " trying to load " + resourceName + " from all exports of package " + packageName + " " + list);
+         log.trace(this + " trying to load " + name + " from all exports of package " + packageName + " " + list);
       if (list != null && list.isEmpty() == false)
       {
          for (ClassLoaderInformation info : list)
@@ -462,7 +457,7 @@
             if (loaderPolicy.isBlackListable() == false)
                canBlackList = false;
 
-            if (exported.getResource(name, resourceName) != null)
+            if (exported.getResource(name) != null)
             {
                if (canCache)
                   globalClassCache.put(name, exported);
@@ -482,11 +477,10 @@
     * 
     * @param classLoader the classloader
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param trace whether trace is enabled
     * @return the url
     */
-   private URL getResourceFromExports(BaseClassLoader classLoader, String name, String resourceName, boolean trace)
+   private URL getResourceFromExports(BaseClassLoader classLoader, String name, boolean trace)
    {
       URL result = globalResourceCache.get(name);
       if (result != null)
@@ -521,7 +515,7 @@
             if (loaderPolicy.isBlackListable() == false)
                canBlackList = false;
 
-            result = loader.getResource(name, resourceName);
+            result = loader.getResource(name);
             if (result != null)
             {
                if (canCache)
@@ -541,12 +535,11 @@
     * 
     * @param classLoader the classloader
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param urls the urls to add to
     * @param trace whether trace is enabled
     * @throws IOException for any error
     */
-   void getResourcesFromExports(BaseClassLoader classLoader, String name, String resourceName, Set<URL> urls, boolean trace) throws IOException
+   void getResourcesFromExports(BaseClassLoader classLoader, String name, Set<URL> urls, boolean trace) throws IOException
    {
       String packageName = ClassLoaderUtils.getResourcePackageName(name);
       List<ClassLoaderInformation> list = classLoadersByPackageName.get(packageName);
@@ -557,7 +550,7 @@
          for (ClassLoaderInformation info : list)
          {
             BaseDelegateLoader loader = info.getExported();
-            loader.getResources(name, resourceName, urls);
+            loader.getResources(name, urls);
          }
       }
    }
@@ -567,17 +560,16 @@
     * 
     * @param info the classloader information
     * @param name the class resource name
-    * @param resourceName the resource name in dot notation
     * @param trace whether trace is enabled
     * @return the loader
     */
-   Loader findLoaderInImports(ClassLoaderInformation info, String name, String resourceName, boolean trace)
+   Loader findLoaderInImports(ClassLoaderInformation info, String name, boolean trace)
    {
       List<? extends DelegateLoader> delegates = info.getDelegates();
       if (delegates == null || delegates.isEmpty())
       {
          if (trace)
-            log.trace(this + " not loading " + resourceName + " from imports it has no delegates");
+            log.trace(this + " not loading " + name + " from imports it has no delegates");
          return null;
       }
 
@@ -599,8 +591,8 @@
       for (DelegateLoader delegate : delegates)
       {
          if (trace)
-            log.trace(this + " trying to load " + resourceName + " from import " + delegate + " for " + info.getClassLoader());
-         if (delegate.getResource(name, resourceName) != null)
+            log.trace(this + " trying to load " + name + " from import " + delegate + " for " + info.getClassLoader());
+         if (delegate.getResource(name) != null)
          {
             info.cacheLoader(name, delegate);
             return delegate;
@@ -615,11 +607,10 @@
     * 
     * @param info the classloader information
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param trace whether trace is enabled
     * @return the url
     */
-   private URL getResourceFromImports(ClassLoaderInformation info, String name, String resourceName, boolean trace)
+   private URL getResourceFromImports(ClassLoaderInformation info, String name, boolean trace)
    {
       List<? extends DelegateLoader> delegates = info.getDelegates();
       if (delegates == null || delegates.isEmpty())
@@ -649,7 +640,7 @@
 
       for (DelegateLoader delegate : delegates)
       {
-         URL result = delegate.getResource(name, resourceName);
+         URL result = delegate.getResource(name);
          if (result != null)
          {
             info.cacheResource(name, result);
@@ -665,12 +656,11 @@
     * 
     * @param info the classloader info
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param urls the urls to add to
     * @param trace whether trace is enabled
     * @throws IOException for any error
     */
-   void getResourcesFromImports(ClassLoaderInformation info, String name, String resourceName, Set<URL> urls, boolean trace) throws IOException
+   void getResourcesFromImports(ClassLoaderInformation info, String name, Set<URL> urls, boolean trace) throws IOException
    {
       List<? extends DelegateLoader> delegates = info.getDelegates();
       if (delegates == null || delegates.isEmpty())
@@ -682,64 +672,58 @@
       if (trace)
          log.trace(this + " trying to get resources " + name + " from imports " + delegates + " for " + info.getClassLoader());
       for (DelegateLoader delegate : delegates)
-         delegate.getResources(name, resourceName, urls);
+         delegate.getResources(name, urls);
    }
 
    /**
     * Invoked before classloading is attempted to allow a preload attempt, e.g. from the parent
     * 
     * @param name the class resource name
-    * @param resourceName the resource name in dot notation
     * @return the loader if found or null otherwise
     */
-   protected abstract Loader findBeforeLoader(String name, String resourceName);
+   protected abstract Loader findBeforeLoader(String name);
    
    /**
     * Invoked after classloading is attempted to allow a postload attempt, e.g. from the parent
     * 
     * @param name the class resource name
-    * @param resourceName the resource name in dot notation
     * @return the loader if found or null otherwise
     */
-   protected abstract Loader findAfterLoader(String name, String resourceName);
+   protected abstract Loader findAfterLoader(String name);
    
    /**
     * Invoked before getResources is attempted to allow a preload attempt, e.g. from the parent
     * 
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param urls the urls to add to
     * @throws IOException for any error
     */
-   protected abstract void beforeGetResources(String name, String resourceName, Set<URL> urls) throws IOException;
+   protected abstract void beforeGetResources(String name,  Set<URL> urls) throws IOException;
    
    /**
     * Invoked after getResources is attempted to allow a postload attempt, e.g. from the parent
     * 
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param urls the urls to add to
     * @throws IOException for any error
     */
-   protected abstract void afterGetResources(String name, String resourceName, Set<URL> urls) throws IOException;
+   protected abstract void afterGetResources(String name, Set<URL> urls) throws IOException;
    
    /**
     * Invoked before getResource is attempted to allow a preload attempt, e.g. from the parent
     * 
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @return the url if found or null otherwise
     */
-   protected abstract URL beforeGetResource(String name, String resourceName);
+   protected abstract URL beforeGetResource(String name);
    
    /**
     * Invoked after getResource is attempted to allow a postload attempt, e.g. from the parent
     * 
     * @param name the class name
-    * @param resourceName the name of the resource in dot notation
     * @return the url if found or null otherwise
     */
-   protected abstract URL afterGetResource(String name, String resourceName);
+   protected abstract URL afterGetResource(String name);
    
    public Class<?> loadClass(String name)
    {
@@ -766,9 +750,9 @@
       return loadClass(classLoader, name, false);
    }
    
-   public URL getResource(String name, String resourceName)
+   public URL getResource(String name)
    {
-      return getResource(null, name, resourceName, true);
+      return getResource(null, name, true);
    }
    
    /**
@@ -776,17 +760,16 @@
     * 
     * @param classLoader the classloader
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @return the url
     */
-   URL getResource(BaseClassLoader classLoader, String name, String resourceName)
+   URL getResource(BaseClassLoader classLoader, String name)
    {
-      return getResource(classLoader, name, resourceName, false);
+      return getResource(classLoader, name, false);
    }
    
-   public void getResources(String name, String resourceName, Set<URL> urls) throws IOException
+   public void getResources(String name, Set<URL> urls) throws IOException
    {
-      getResources(null, name, resourceName, urls, true);
+      getResources(null, name, urls, true);
    }
    
    /**
@@ -794,13 +777,12 @@
     * 
     * @param classLoader the classloader
     * @param name the resource name
-    * @param resourceName the name of the resource in dot notation
     * @param urls the urls to add to
     * @throws IOException for any error
     */
-   void getResources(BaseClassLoader classLoader, String name, String resourceName, Set<URL> urls) throws IOException
+   void getResources(BaseClassLoader classLoader, String name, Set<URL> urls) throws IOException
    {
-      getResources(classLoader, name, resourceName, urls, false);
+      getResources(classLoader, name, urls, false);
    }
 
    /**

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseDelegateLoader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseDelegateLoader.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseDelegateLoader.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -75,7 +75,7 @@
       return classLoader.loadClassLocally(className);
    }
    
-   public URL getResource(String name, String resourceName)
+   public URL getResource(String name)
    {
       BaseClassLoader classLoader;
       try
@@ -87,10 +87,10 @@
          log.warn("Not loading from policy that has no classLoader: " + toLongString());
          return null;
       }
-      return classLoader.getResourceLocally(name, resourceName);
+      return classLoader.getResourceLocally(name);
    }
 
-   public void getResources(String name, String resourceName, Set<URL> urls) throws IOException
+   public void getResources(String name, Set<URL> urls) throws IOException
    {
       BaseClassLoader classLoader;
       try
@@ -102,7 +102,7 @@
          log.warn("Not loading from policy that has no classLoader: " + toLongString());
          return;
       }
-      classLoader.getResourcesLocally(name, resourceName, urls);
+      classLoader.getResourcesLocally(name, urls);
    }
 
    /**

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoaderManager.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoaderManager.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoaderManager.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -42,7 +42,7 @@
 public class ClassLoaderManager
 {
    /** The log */
-   private static Logger log = Logger.getLogger(ClassLoaderManager.class);
+   private static Logger log = Logger.getLogger("org.jboss.detailed.classloader.ClassLoaderManager");
 
    /** The threads owning the classloader lock */
    private static Map<BaseClassLoader, Thread> loadClassThreads = new HashMap<BaseClassLoader, Thread>();

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoadingTask.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoadingTask.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoadingTask.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -42,7 +42,7 @@
 class ClassLoadingTask
 {
    /** The log */
-   protected static Logger log = Logger.getLogger(ClassLoadingTask.class);
+   protected static Logger log = Logger.getLogger("org.jboss.detailed.classloader.ClassLoadinTask");
 
    /**
     * TaskState.

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/ClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/ClassFilter.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/ClassFilter.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -23,6 +23,7 @@
 
 import org.jboss.classloader.plugins.filter.EverythingClassFilter;
 import org.jboss.classloader.plugins.filter.JavaOnlyClassFilter;
+import org.jboss.classloader.plugins.filter.NothingButJavaClassFilter;
 import org.jboss.classloader.plugins.filter.NothingClassFilter;
 
 /**
@@ -39,6 +40,9 @@
    /** Match nothing */
    ClassFilter NOTHING = NothingClassFilter.INSTANCE;
 
+   /** Match nothing */
+   ClassFilter NOTHING_BUT_JAVA = NothingButJavaClassFilter.INSTANCE;
+
    /** Java Only */
    ClassFilter JAVA_ONLY = JavaOnlyClassFilter.INSTANCE;
    
@@ -48,5 +52,13 @@
     * @param className the class name
     * @return true when it matches the filter
     */
-   boolean matches(String className);
+   boolean matchesClassName(String className);
+   
+   /** 
+    * Whether the resource name matches the filter
+    * 
+    * @param resourcePath the resource path
+    * @return true when it matches the filter
+    */
+   boolean matchesResourcePath(String resourcePath);
 }

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -83,39 +83,39 @@
    public Class<?> loadClass(String className)
    {
       boolean trace = log.isTraceEnabled();
-      if (filter.matches(className))
+      if (filter.matchesClassName(className))
       {
          if (trace)
-            log.trace(this + " " + className + " matches filter=" + filter);
+            log.trace(this + " " + className + " matches class filter=" + filter);
          return super.loadClass(className);
       }
       if (trace)
-         log.trace(this + " " + className + " does NOT match filter=" + filter);
+         log.trace(this + " " + className + " does NOT match class filter=" + filter);
       return null;
    }
 
-   public URL getResource(String name, String resourceName)
+   public URL getResource(String name)
    {
       boolean trace = log.isTraceEnabled();
-      if (filter.matches(resourceName))
+      if (filter.matchesResourcePath(name))
       {
          if (trace)
-            log.trace(this + " " + name + " matches filter=" + filter);
-         return super.getResource(name, resourceName);
+            log.trace(this + " " + name + " matches resource filter=" + filter);
+         return super.getResource(name);
       }
       if (trace)
-         log.trace(this + " " + name + " does NOT match filter=" + filter);
+         log.trace(this + " " + name + " does NOT match resource filter=" + filter);
       return null;
    }
 
-   public void getResources(String name, String resourceName, Set<URL> urls) throws IOException
+   public void getResources(String name, Set<URL> urls) throws IOException
    {
       boolean trace = log.isTraceEnabled();
-      if (filter.matches(resourceName))
+      if (filter.matchesResourcePath(name))
       {
          if (trace)
             log.trace(this + " " + name + " matches filter=" + filter);
-         super.getResources(name, resourceName, urls);
+         super.getResources(name, urls);
       }
       if (trace)
          log.trace(this + " " + name + " does NOT match filter=" + filter);

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/PackageClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/PackageClassFilter.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/PackageClassFilter.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -37,12 +37,12 @@
    private String[] packageNames;
    
    /**
-    * Convert package names to patterns
+    * Convert package names to class patterns
     * 
     * @param packageNames the package names
     * @return the patterns
     */
-   private static String[] convertPackageNamesToPatterns(String[] packageNames)
+   private static String[] convertPackageNamesToClassPatterns(String[] packageNames)
    {
       if (packageNames == null)
          throw new IllegalArgumentException("Null package names");
@@ -64,6 +64,33 @@
    }
    
    /**
+    * Convert package names to resource patterns
+    * 
+    * @param packageNames the package names
+    * @return the patterns
+    */
+   private static String[] convertPackageNamesToResourcePatterns(String[] packageNames)
+   {
+      if (packageNames == null)
+         throw new IllegalArgumentException("Null package names");
+      
+      String[] patterns = new String[packageNames.length];
+      for (int i = 0; i < packageNames.length; ++i)
+      {
+         if (packageNames[i] == null)
+            throw new IllegalArgumentException("Null package name in " + Arrays.asList(packageNames));
+
+         if (packageNames[i].length() == 0)
+            // Base package - it is a match if there is no / in the path
+            patterns[i] = "[^/]*";
+         else
+            // Replace the dots with slashs and match non slashes after that
+            patterns[i] = packageNames[i].replace(".", "/") + "/[^/]+";
+      }
+      return patterns;
+   }
+   
+   /**
     * Create a new package class filter
     * 
     * @param packageNames the package names
@@ -83,7 +110,7 @@
     */
    public PackageClassFilter(String[] packageNames)
    {
-      super(convertPackageNamesToPatterns(packageNames));
+      super(convertPackageNamesToClassPatterns(packageNames), convertPackageNamesToResourcePatterns(packageNames));
       this.packageNames = packageNames;
    }
 

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderPolicy.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderPolicy.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderPolicy.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -92,19 +92,19 @@
     */
    public MockClassLoaderPolicy(String name)
    {
-      this(name, "org\\.jboss\\..*");
+      this(name, new String[] { "org\\.jboss\\..+" }, new String[] { "org/jboss/.+" });
    }
 
    /**
-    * Create a new MockClassLoaderPolicy filtering the given patterns
+    * Create a new MockClassLoaderPolicy filtering org.jboss.* classes
     * 
-    * @param name the logical name of the policy
-    * @param nonJDKPatterns the patterns to filter
-    * @throws IllegalArgumentException for null patterns
+    * @param name the name
+    * @param classPatterns the class patterns
+    * @param resourcePatterns the resourcePatterns
     */
-   public MockClassLoaderPolicy(String name, String... nonJDKPatterns)
+   public MockClassLoaderPolicy(String name, String[] classPatterns, String[] resourcePatterns)
    {
-      this(name, new PatternClassFilter(nonJDKPatterns));
+      this(name, new PatternClassFilter(classPatterns, resourcePatterns));
    }
 
    /**
@@ -398,7 +398,7 @@
    @Override
    protected ClassLoader isJDKRequest(String name)
    {
-      if (nonJDKFilter.matches(name))
+      if (nonJDKFilter.matchesClassName(name))
          return null;
       return super.isJDKRequest(name);
    }

Added: projects/microcontainer/trunk/classloader/src/resources/tests/a/com/acme/p1/testResource.xml
===================================================================
--- projects/microcontainer/trunk/classloader/src/resources/tests/a/com/acme/p1/testResource.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloader/src/resources/tests/a/com/acme/p1/testResource.xml	2007-07-13 15:29:52 UTC (rev 64041)
@@ -0,0 +1 @@
+a/com/acme/p1/testResource.xml
\ No newline at end of file

Added: projects/microcontainer/trunk/classloader/src/resources/tests/a/testResource.xml
===================================================================
--- projects/microcontainer/trunk/classloader/src/resources/tests/a/testResource.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloader/src/resources/tests/a/testResource.xml	2007-07-13 15:29:52 UTC (rev 64041)
@@ -0,0 +1 @@
+a/com/acme/p1/testResource.xml
\ No newline at end of file

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -255,21 +255,37 @@
       }
    }
    
-   protected void assertFilterMatches(String test, ClassFilter filter)
+   protected void assertFilterMatchesClassName(String test, ClassFilter filter)
    {
       getLog().debug("Checking " + test + " expect it to match filter=" + filter);
-      boolean result = filter.matches(test);
+      boolean result = filter.matchesClassName(test);
       getLog().debug("Checked " + test + " result was " + result + " for filter=" + filter);
       assertTrue("Expected " + test + " to match " + filter, result);
    }
    
-   protected void assertFilterNoMatch(String test, ClassFilter filter)
+   protected void assertFilterNoMatchClassName(String test, ClassFilter filter)
    {
       getLog().debug("Checking " + test + " expect it NOT to match filter=" + filter);
-      boolean result = filter.matches(test);
+      boolean result = filter.matchesClassName(test);
       getLog().debug("Checked " + test + " result was " + result + " for filter=" + filter);
       assertFalse("Expected " + test + " NOT to match " + filter, result);
    }
+   
+   protected void assertFilterMatchesResourcePath(String test, ClassFilter filter)
+   {
+      getLog().debug("Checking " + test + " expect it to match filter=" + filter);
+      boolean result = filter.matchesResourcePath(test);
+      getLog().debug("Checked " + test + " result was " + result + " for filter=" + filter);
+      assertTrue("Expected " + test + " to match " + filter, result);
+   }
+   
+   protected void assertFilterNoMatchResourcePath(String test, ClassFilter filter)
+   {
+      getLog().debug("Checking " + test + " expect it NOT to match filter=" + filter);
+      boolean result = filter.matchesResourcePath(test);
+      getLog().debug("Checked " + test + " result was " + result + " for filter=" + filter);
+      assertFalse("Expected " + test + " NOT to match " + filter, result);
+   }
 
    protected void configureLogging()
    {

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MatchClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MatchClassFilter.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MatchClassFilter.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -21,6 +21,7 @@
  */
 package org.jboss.test.classloader.domain.support;
 
+import org.jboss.classloader.plugins.ClassLoaderUtils;
 import org.jboss.classloader.spi.filter.ClassFilter;
 
 /**
@@ -40,10 +41,17 @@
       this.className = clazz.getName();
    }
    
-   public boolean matches(String className)
+   public boolean matchesClassName(String className)
    {
       if (this.className.equals(className))
          filtered = true;
       return true;
    }
+   
+   public boolean matchesResourcePath(String resourcePath)
+   {
+      if (ClassLoaderUtils.classNameToPath(this.className).equals(resourcePath))
+         filtered = true;
+      return true;
+   }
 }

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MockLoader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MockLoader.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MockLoader.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -40,13 +40,13 @@
    public Set<String> getResources = new HashSet<String>();
    public Set<String> loadClass = new HashSet<String>();
    
-   public URL getResource(String name, String resourceName)
+   public URL getResource(String name)
    {
       getResource.add(name);
       return getClass().getClassLoader().getResource(name);
    }
 
-   public void getResources(String name, String resourceName, Set<URL> urls) throws IOException
+   public void getResources(String name, Set<URL> urls) throws IOException
    {
       // Nothing
    }

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/NoMatchClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/NoMatchClassFilter.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/NoMatchClassFilter.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -21,6 +21,7 @@
  */
 package org.jboss.test.classloader.domain.support;
 
+import org.jboss.classloader.plugins.ClassLoaderUtils;
 import org.jboss.classloader.spi.filter.ClassFilter;
 
 /**
@@ -40,7 +41,7 @@
       this.className = clazz.getName();
    }
    
-   public boolean matches(String className)
+   public boolean matchesClassName(String className)
    {
       if (this.className.equals(className))
       {
@@ -49,4 +50,14 @@
       }
       return true;
    }
+   
+   public boolean matchesResourcePath(String resourcePath)
+   {
+      if (ClassLoaderUtils.classNameToPath(this.className).equals(resourcePath))
+      {
+         filtered = true;
+         return false;
+      }
+      return true;
+   }
 }

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -140,10 +140,10 @@
          assertEmpty(loader.getResources);
          return;
       }
-      Set<String> resourceNames = new HashSet<String>();
+      Set<String> resourcePaths = new HashSet<String>();
       for (Class clazz : classes)
-         resourceNames.add(ClassLoaderUtils.classNameToPath(clazz.getName()));
-      assertEquals(resourceNames, loader.getResource);
+         resourcePaths.add(ClassLoaderUtils.classNameToPath(clazz.getName()));
+      assertEquals(resourcePaths, loader.getResource);
    }
    
    protected void checkLoadClass(MockLoader loader, Class... classes)

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -47,38 +47,38 @@
    public void testEverything() throws Exception
    {
       ClassFilter filter = ClassFilter.EVERYTHING;
-      assertFilterMatches("gibberish", filter);
-      assertFilterMatches("", filter);
-      assertFilterMatches(null, filter);
+      assertFilterMatchesClassName("gibberish", filter);
+      assertFilterMatchesClassName("", filter);
+      assertFilterMatchesClassName(null, filter);
    }
    
    public void testNothing() throws Exception
    {
       ClassFilter filter = ClassFilter.NOTHING;
-      assertFilterNoMatch("gibberish", filter);
-      assertFilterNoMatch("", filter);
-      assertFilterNoMatch(null, filter);
+      assertFilterNoMatchClassName("gibberish", filter);
+      assertFilterNoMatchClassName("", filter);
+      assertFilterNoMatchClassName(null, filter);
    }
    
    public void testJavaOnly() throws Exception
    {
       ClassFilter filter = ClassFilter.JAVA_ONLY;
-      assertFilterMatches("java.x", filter);
-      assertFilterMatches("java.lang.Object", filter);
-      assertFilterMatches("java.lang.ref.Method", filter);
-      assertFilterMatches("java.util.Collection", filter);
-      assertFilterMatches("javax.x", filter);
-      assertFilterMatches("javax.naming.Context", filter);
-      assertFilterNoMatch("java.", filter);
-      assertFilterNoMatch("java", filter);
-      assertFilterNoMatch("javaa.", filter);
-      assertFilterNoMatch("javaa.whatever", filter);
-      assertFilterNoMatch("javax", filter);
-      assertFilterNoMatch("javax.", filter);
-      assertFilterNoMatch("javaxa.", filter);
-      assertFilterNoMatch("javaxa.whatever", filter);
-      assertFilterNoMatch("gibberish", filter);
-      assertFilterNoMatch("", filter);
-      assertFilterNoMatch(null, filter);
+      assertFilterMatchesClassName("java.x", filter);
+      assertFilterMatchesClassName("java.lang.Object", filter);
+      assertFilterMatchesClassName("java.lang.ref.Method", filter);
+      assertFilterMatchesClassName("java.util.Collection", filter);
+      assertFilterMatchesClassName("javax.x", filter);
+      assertFilterMatchesClassName("javax.naming.Context", filter);
+      assertFilterNoMatchClassName("java.", filter);
+      assertFilterNoMatchClassName("java", filter);
+      assertFilterNoMatchClassName("javaa.", filter);
+      assertFilterNoMatchClassName("javaa.whatever", filter);
+      assertFilterNoMatchClassName("javax", filter);
+      assertFilterNoMatchClassName("javax.", filter);
+      assertFilterNoMatchClassName("javaxa.", filter);
+      assertFilterNoMatchClassName("javaxa.whatever", filter);
+      assertFilterNoMatchClassName("gibberish", filter);
+      assertFilterNoMatchClassName("", filter);
+      assertFilterNoMatchClassName(null, filter);
    }
 }

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/PackageFilterUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/PackageFilterUnitTestCase.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/PackageFilterUnitTestCase.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -48,38 +48,40 @@
    public void testNothing() throws Exception
    {
       ClassFilter filter = PackageClassFilter.createPackageClassFilter();
-      assertFilterNoMatch("gibberish", filter);
-      assertFilterNoMatch("", filter);
-      assertFilterNoMatch(null, filter);
+      assertFilterNoMatchClassName("gibberish", filter);
+      assertFilterNoMatchClassName("", filter);
+      assertFilterNoMatchClassName(null, filter);
+      assertFilterNoMatchResourcePath("x.xml", filter);
    }
    
    public void testJavaLang() throws Exception
    {
       ClassFilter filter = PackageClassFilter.createPackageClassFilter("java.lang");
-      assertFilterMatches("java.lang.Object", filter);
-      assertFilterMatches("java.lang.X", filter);
-      assertFilterNoMatch("java.lang", filter);
-      assertFilterNoMatch("java.lang.", filter);
-      assertFilterNoMatch("java.lang.reflect.Method", filter);
-      assertFilterNoMatch("gibberish", filter);
-      assertFilterNoMatch("", filter);
-      assertFilterNoMatch(null, filter);
+      assertFilterMatchesClassName("java.lang.Object", filter);
+      assertFilterMatchesClassName("java.lang.X", filter);
+      assertFilterNoMatchClassName("java.lang", filter);
+      assertFilterNoMatchClassName("java.lang.", filter);
+      assertFilterNoMatchClassName("java.lang.reflect.Method", filter);
+      assertFilterNoMatchClassName("gibberish", filter);
+      assertFilterNoMatchClassName("", filter);
+      assertFilterNoMatchClassName(null, filter);
+      assertFilterMatchesResourcePath("java/lang/something.xml", filter);
    }
    
    public void testJavaLangAndJavaLangReflect() throws Exception
    {
       ClassFilter filter = PackageClassFilter.createPackageClassFilter("java.lang", "java.lang.reflect");
-      assertFilterMatches("java.lang.Object", filter);
-      assertFilterMatches("java.lang.X", filter);
-      assertFilterMatches("java.lang.reflect.Method", filter);
-      assertFilterMatches("java.lang.reflect.X", filter);
-      assertFilterMatches("java.lang.reflect", filter);
-      assertFilterNoMatch("java.lang", filter);
-      assertFilterNoMatch("java.lang.", filter);
-      assertFilterNoMatch("java.lang.reflect.", filter);
-      assertFilterNoMatch("java.lang.reflect.subpackage.Something", filter);
-      assertFilterNoMatch("gibberish", filter);
-      assertFilterNoMatch("", filter);
-      assertFilterNoMatch(null, filter);
+      assertFilterMatchesClassName("java.lang.Object", filter);
+      assertFilterMatchesClassName("java.lang.X", filter);
+      assertFilterMatchesClassName("java.lang.reflect.Method", filter);
+      assertFilterMatchesClassName("java.lang.reflect.X", filter);
+      assertFilterMatchesClassName("java.lang.reflect", filter);
+      assertFilterNoMatchClassName("java.lang", filter);
+      assertFilterNoMatchClassName("java.lang.", filter);
+      assertFilterNoMatchClassName("java.lang.reflect.", filter);
+      assertFilterNoMatchClassName("java.lang.reflect.subpackage.Something", filter);
+      assertFilterNoMatchClassName("gibberish", filter);
+      assertFilterNoMatchClassName("", filter);
+      assertFilterNoMatchClassName(null, filter);
    }
 }

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/jmx/test/JMXUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/jmx/test/JMXUnitTestCase.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/jmx/test/JMXUnitTestCase.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -29,8 +29,8 @@
 import junit.framework.Test;
 
 import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloader.spi.jmx.JMXClassLoader;
 import org.jboss.classloader.test.support.MockClassLoaderPolicy;
+import org.jboss.classloading.spi.RealClassLoader;
 import org.jboss.test.classloader.AbstractClassLoaderTest;
 import org.jboss.test.classloader.jmx.support.Simple;
 
@@ -58,7 +58,7 @@
 
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy("simple");
       policy.setPathsAndPackageNames(Simple.class);
-      JMXClassLoader cl = (JMXClassLoader) system.registerClassLoaderPolicy(policy);
+      RealClassLoader cl = (RealClassLoader) system.registerClassLoaderPolicy(policy);
       
       MBeanServer server = MBeanServerFactory.newMBeanServer();
       ObjectName clName = cl.getObjectName();

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/policy/support/TestDelegateLoader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/policy/support/TestDelegateLoader.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/policy/support/TestDelegateLoader.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -49,7 +49,8 @@
       return null;
    }
 
-   public URL getResource(String name, String resourceName)
+   @Override
+   public URL getResource(String name)
    {
       getResourceInvoked = name;
       return TestClassLoaderPolicy.codeSourceURL;

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/resources/tests/ResourceUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/resources/tests/ResourceUnitTestCase.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/resources/tests/ResourceUnitTestCase.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -109,6 +109,42 @@
       assertGetResource("a/", "testResource", classLoader);
    }
    
+   public void testGetResourceWithDotFromDelegate() throws Exception
+   {
+      enableTrace("org.jboss.classloader");
+      ClassLoaderSystem system = createClassLoaderSystem();
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
+      policy.setPrefix("a/");
+      policy.setPath("com/acme/p1");
+      policy.setPackageNames(new String[] { "com.acme.p1" } );
+
+      MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
+      policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
+      
+      system.registerClassLoaderPolicy(policy);
+      ClassLoader classLoader = system.registerClassLoaderPolicy(policy2);
+      
+      assertGetResource("a/", "com/acme/p1/testResource.xml", classLoader);
+   }
+   
+   public void testGetResourceWithDotFromDelegatNotFound() throws Exception
+   {
+      enableTrace("org.jboss.classloader");
+      ClassLoaderSystem system = createClassLoaderSystem();
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
+      policy.setPrefix("a/");
+      policy.setPath("com/acme/p1");
+      policy.setPackageNames(new String[] { "com.acme.p1" } );
+
+      MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
+      policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
+      
+      system.registerClassLoaderPolicy(policy);
+      ClassLoader classLoader = system.registerClassLoaderPolicy(policy2);
+      
+      assertGetResourceFail("testResource.xml", classLoader);
+   }
+   
    public void testGetResourceUsingAllImports() throws Exception
    {
       ClassLoaderSystem system = createClassLoaderSystem();
@@ -321,6 +357,40 @@
       assertGetResources("testResource", classLoader, "a/");
    }
    
+   public void testGetResourcesWithDotFromDelegate() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystem();
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
+      policy.setPrefix("a/");
+      policy.setPath("com/acme/p1");
+      policy.setPackageNames(new String[] { "com.acme.p1" } );
+
+      MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
+      policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
+      
+      system.registerClassLoaderPolicy(policy);
+      ClassLoader classLoader = system.registerClassLoaderPolicy(policy2);
+      
+      assertGetResources("com/acme/p1/testResource.xml", classLoader, "a/");
+   }
+   
+   public void testGetResourcesWithDotFromDelegateNotFound() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystem();
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
+      policy.setPrefix("a/");
+      policy.setPath("com/acme/p1");
+      policy.setPackageNames(new String[] { "com.acme.p1" } );
+
+      MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
+      policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
+      
+      system.registerClassLoaderPolicy(policy);
+      ClassLoader classLoader = system.registerClassLoaderPolicy(policy2);
+      
+      assertGetResourcesFail("testResource.xml", classLoader);
+   }
+   
    public void testGetResourcesUsingAllImports() throws Exception
    {
       ClassLoaderSystem system = createClassLoaderSystem();
@@ -428,10 +498,10 @@
       assertGetResources("testResource", classLoader, "a/", "b/");
    }
    
-   protected URL assertGetResource(String prefix, String resourceName, ClassLoader classLoader) throws Exception
+   protected URL assertGetResource(String prefix, String resourcePath, ClassLoader classLoader) throws Exception
    {
-      URL url = classLoader.getResource(resourceName);
-      assertNotNull("Should have got resource prefix=" + prefix + " resourceName " + resourceName + " from " + classLoader, url);
+      URL url = classLoader.getResource(resourcePath);
+      assertNotNull("Should have got resource prefix=" + prefix + " resourcePath " + resourcePath + " from " + classLoader, url);
       SecurityManager sm = suspendSecurity();
       try
       {
@@ -448,7 +518,7 @@
                read = reader.read(chars, read, 1000 - read);
             }
             String string = new String(chars, 0, count);
-            assertEquals("Should have read the correct resource", prefix + resourceName, string);
+            assertEquals("Should have read the correct resource", prefix + resourcePath, string);
          }
          finally
          {
@@ -462,15 +532,15 @@
       return url;
    }
    
-   protected void assertGetResourceFail(String resourceName, ClassLoader classLoader) throws Exception
+   protected void assertGetResourceFail(String resourcePath, ClassLoader classLoader) throws Exception
    {
-      URL url = classLoader.getResource(resourceName);
-      assertNull("Should NOT have got resource " + resourceName + " from " + classLoader, url);
+      URL url = classLoader.getResource(resourcePath);
+      assertNull("Should NOT have got resource " + resourcePath + " from " + classLoader, url);
    }
    
-   protected Enumeration<URL> assertGetResources(String resourceName, ClassLoader classLoader, String... prefixes) throws Exception
+   protected Enumeration<URL> assertGetResources(String resourcePath, ClassLoader classLoader, String... prefixes) throws Exception
    {
-      Enumeration<URL> urls = classLoader.getResources(resourceName);
+      Enumeration<URL> urls = classLoader.getResources(resourcePath);
       
       HashSet<String> foundResources = new HashSet<String>();
       SecurityManager sm = suspendSecurity();
@@ -507,22 +577,22 @@
       
       HashSet<String> expectedResources = new HashSet<String>();
       for (String prefix : prefixes)
-         expectedResources.add(prefix + resourceName);
+         expectedResources.add(prefix + resourcePath);
       
       assertEquals(expectedResources, foundResources);
       
       return urls;
    }
    
-   protected void assertGetResourcesFail(String resourceName, ClassLoader classLoader) throws Exception
+   protected void assertGetResourcesFail(String resourcePath, ClassLoader classLoader) throws Exception
    {
-      Enumeration<URL> urls = classLoader.getResources(resourceName);
+      Enumeration<URL> urls = classLoader.getResources(resourcePath);
       if (urls.hasMoreElements())
       {
          HashSet<URL> found = new HashSet<URL>();
          while (urls.hasMoreElements())
             found.add(urls.nextElement());
-         fail("Should NOT have got resources " + resourceName + " from " + classLoader + " found " + urls);
+         fail("Should NOT have got resources " + resourcePath + " from " + classLoader + " found " + urls);
       }
    }
 }

Modified: projects/microcontainer/trunk/deployers-impl/.classpath
===================================================================
--- projects/microcontainer/trunk/deployers-impl/.classpath	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/deployers-impl/.classpath	2007-07-13 15:29:52 UTC (rev 64041)
@@ -36,6 +36,7 @@
   <classpathentry kind="src" path="/jboss-dependency"/>
   <classpathentry kind="src" path="/jboss-deployers-structure-spi"/>
   <classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-spi/2.0.3.GA/jboss-logging-spi-2.0.3.GA.jar" sourcepath="M2_REPO/jboss/jboss-logging-spi/2.0.3.GA/jboss-logging-spi-2.0.3.GA-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/jboss-classloading-spi/5.0.0-SNAPSHOT/jboss-classloading-spi-5.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/jboss/jboss-classLoading-spi-5.0.0-SNAPSHOT/5.0.0-SNAPSHOT/jboss-classloading-spi-5.0.0-SNAPSHOT-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/jboss/jbossxb/2.0.0.CR3/jbossxb-2.0.0.CR3.jar" sourcepath="M2_REPO/jboss/jbossxb/2.0.0.CR3/jbossxb-2.0.0.CR3-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jboss/javassist/3.6-beta/javassist-3.6-beta.jar" sourcepath="M2_REPO/org/jboss/javassist/3.6-beta/javassist-3.6-beta-sources.jar"/>
   <classpathentry kind="src" path="/jboss-deployers-core-spi"/>

Modified: projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractTopLevelClassLoaderSystemDeployer.java
===================================================================
--- projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractTopLevelClassLoaderSystemDeployer.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractTopLevelClassLoaderSystemDeployer.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -21,10 +21,14 @@
  */
 package org.jboss.deployers.plugins.classloading;
 
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderPolicy;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloading.spi.RealClassLoader;
 import org.jboss.deployers.spi.deployer.helpers.AbstractTopLevelClassLoaderDeployer;
 import org.jboss.deployers.structure.spi.DeploymentContext;
 
@@ -42,6 +46,9 @@
    /** The classloader system */
    private ClassLoaderSystem system;
    
+   /** The MBeanServer */
+   private MBeanServer mbeanServer;
+   
    /**
     * Get the classLoading.
     * 
@@ -82,6 +89,26 @@
       this.system = system;
    }
 
+   /**
+    * Get the mbeanServer.
+    * 
+    * @return the mbeanServer.
+    */
+   public MBeanServer getMbeanServer()
+   {
+      return mbeanServer;
+   }
+
+   /**
+    * Set the mbeanServer.
+    * 
+    * @param mbeanServer the mbeanServer.
+    */
+   public void setMbeanServer(MBeanServer mbeanServer)
+   {
+      this.mbeanServer = mbeanServer;
+   }
+
    @Override
    protected ClassLoader createTopLevelClassLoader(DeploymentContext context) throws Exception
    {
@@ -113,24 +140,90 @@
             domain = system.createAndRegisterDomain(domainName, parentPolicy, parent);
          }
       }
-      return system.registerClassLoaderPolicy(domain, policy);
+      ClassLoader classLoader = system.registerClassLoaderPolicy(domain, policy);
+      try
+      {
+         registerClassLoaderWithMBeanServer(classLoader);
+      }
+      catch (Throwable t)
+      {
+         log.warn("Unable to register classloader with mbeanserver: " + classLoader, t);
+      }
+      return classLoader;
    }
    
    @Override
    protected void removeTopLevelClassLoader(DeploymentContext context) throws Exception
    {
-      // Remove the classloader
       ClassLoader classLoader = context.getClassLoader();
-      system.unregisterClassLoader(classLoader);
+      try
+      {
+         unregisterClassLoaderFromMBeanServer(classLoader);
+      }
+      catch (Throwable t)
+      {
+         log.warn("Unable to unregister classloader from mbeanserver: " + classLoader, t);
+      }
+      
+      try
+      {
+         // Remove the classloader
+         system.unregisterClassLoader(classLoader);
+      }
+      finally
+      {
+         // Reset the module to avoid possible memory leaks
+         Module module = context.getTransientAttachments().getAttachment(Module.class);
+         if (module == null)
+            throw new IllegalStateException("Deployment Context has no module: " + context);
+         module.reset();
+      }
+   }
 
-      // Reset the module to avoid possible memory leaks
-      Module module = context.getTransientAttachments().getAttachment(Module.class);
-      if (module == null)
-         throw new IllegalStateException("Deployment Context has no module: " + context);
-      module.reset();
+   /**
+    * Register the classloader with the mbeanserver
+    * 
+    * @param classLoader the classloader
+    * @throws Exception for any error
+    */
+   protected void registerClassLoaderWithMBeanServer(ClassLoader classLoader) throws Exception
+   {
+      if (mbeanServer == null)
+         return;
+      
+      if (classLoader instanceof RealClassLoader == false)
+         return;
+      
+      RealClassLoader jmxClassLoader = (RealClassLoader) classLoader;
+      ObjectName name = jmxClassLoader.getObjectName();
+      if (mbeanServer.isRegistered(name))
+         return;
+      
+      mbeanServer.registerMBean(classLoader, name);
    }
 
    /**
+    * Unregister the classloader from the mbeanserver
+    * 
+    * @param classLoader the classloader
+    * @throws Exception for any error
+    */
+   protected void unregisterClassLoaderFromMBeanServer(ClassLoader classLoader) throws Exception
+   {
+      if (mbeanServer == null)
+         return;
+      
+      if (classLoader instanceof RealClassLoader == false)
+         return;
+      
+      RealClassLoader jmxClassLoader = (RealClassLoader) classLoader;
+      ObjectName name = jmxClassLoader.getObjectName();
+      if (mbeanServer.isRegistered(name) == false)
+         return;
+      mbeanServer.unregisterMBean(name);
+   }
+   
+   /**
     * Create a top level classloader policy
     * 
     * @param context the deployment context

Modified: projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/ClassLoading.java
===================================================================
--- projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/ClassLoading.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/ClassLoading.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -25,7 +25,6 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.deployers.structure.spi.DeploymentContext;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.deployers.structure.spi.classloading.ClassLoaderMetaData;
 import org.jboss.deployers.structure.spi.classloading.ExportAll;
@@ -42,25 +41,25 @@
    private Map<String, Domain> domains = new ConcurrentHashMap<String, Domain>();
    
    /**
-    * Add a deployment context
+    * Add a deployment unit
     * 
-    * @param deploymentContext the deployment context
-    * @throws IllegalArgumentException for a null deployment context
+    * @param deploymentUnit the deployment unit
+    * @throws IllegalArgumentException for a null deployment unit
     */
-   public void addDeploymentContext(DeploymentContext deploymentContext)
+   public void addDeploymentUnit(DeploymentUnit deploymentUnit)
    {
-      if (deploymentContext == null)
-         throw new IllegalArgumentException("Null deployment context");
+      if (deploymentUnit == null)
+         throw new IllegalArgumentException("Null deployment unit");
       
-      DeploymentUnit unit = deploymentContext.getDeploymentUnit();
-      ClassLoaderMetaData metadata = unit.getAttachment(ClassLoaderMetaData.class);
+      ClassLoaderMetaData metadata = deploymentUnit.getAttachment(ClassLoaderMetaData.class);
       if (metadata == null)
       {
          metadata = new ClassLoaderMetaData();
-         metadata.setName(deploymentContext.getName());
+         metadata.setName(deploymentUnit.getName());
          metadata.setExportAll(ExportAll.NON_EMPTY);
+         metadata.setImportAll(true);
          // TODO JBMICROCONT-182 default version
-         unit.addAttachment(ClassLoaderMetaData.class, metadata);
+         deploymentUnit.addAttachment(ClassLoaderMetaData.class, metadata);
       }
       
       String domainName = metadata.getDomain();
@@ -81,23 +80,23 @@
          }
       }
       
-      domain.addDeploymentContext(deploymentContext, metadata);
+      domain.addDeploymentUnit(deploymentUnit, metadata);
    }
    
    /**
-    * Remove a deployment context
+    * Remove a deployment unit
     * 
-    * @param deploymentContext the deployment context
+    * @param deploymentUnit the deployment unit
     * @throws IllegalArgumentException for a null deployment context
     */
-   public void removeDeploymentContext(DeploymentContext deploymentContext)
+   public void removeDeploymentUnit(DeploymentUnit deploymentUnit)
    {
-      if (deploymentContext == null)
+      if (deploymentUnit == null)
          throw new IllegalArgumentException("Null deployment context");
 
-      Module module = deploymentContext.getTransientAttachments().getAttachment(Module.class);
+      Module module = deploymentUnit.getAttachment(Module.class);
       if (module == null)
-         throw new IllegalStateException("Deployment Context has no module: " + deploymentContext);
+         throw new IllegalStateException("Deployment Unit has no module: " + deploymentUnit);
       module.release();
    }
 }

Modified: projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/Domain.java
===================================================================
--- projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/Domain.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/Domain.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -24,7 +24,7 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.jboss.deployers.structure.spi.DeploymentContext;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.deployers.structure.spi.classloading.ClassLoaderMetaData;
 
 /**
@@ -38,8 +38,8 @@
    /** The domain name */
    private String name;
    
-   /** The registered deployment contexts */
-   private Map<DeploymentContext, Module> contexts = new ConcurrentHashMap<DeploymentContext, Module>();
+   /** The registered deployment units */
+   private Map<DeploymentUnit, Module> units = new ConcurrentHashMap<DeploymentUnit, Module>();
 
    /**
     * Create a new Domain.
@@ -67,15 +67,15 @@
    /**
     * Add a deployment context
     * 
-    * @param deploymentContext the deployment context
+    * @param deploymentUnit the deployment unit
     * @param metadata the classloader metadata 
     * @throws IllegalArgumentException for a null parameter
     */
-   public void addDeploymentContext(DeploymentContext deploymentContext, ClassLoaderMetaData metadata)
+   public void addDeploymentUnit(DeploymentUnit deploymentUnit, ClassLoaderMetaData metadata)
    {
-      Module module = new Module(this, deploymentContext, metadata);
-      deploymentContext.getTransientAttachments().addAttachment(Module.class, module);
-      contexts.put(deploymentContext, module);
+      Module module = new Module(this, deploymentUnit, metadata);
+      deploymentUnit.addAttachment(Module.class, module);
+      units.put(deploymentUnit, module);
       module.createDependencies();
    }
    
@@ -89,7 +89,7 @@
    {
       if (module == null)
          throw new IllegalArgumentException("Null module");
-      DeploymentContext context = module.getDeploymentContext();
-      contexts.remove(context);
+      DeploymentUnit unit = module.getDeploymentUnit();
+      units.remove(unit);
    }
 }

Modified: projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/Module.java
===================================================================
--- projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/Module.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/Module.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -26,7 +26,7 @@
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloader.spi.DelegateLoader;
 import org.jboss.classloader.spi.ParentPolicy;
-import org.jboss.deployers.structure.spi.DeploymentContext;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.deployers.structure.spi.classloading.ClassLoaderMetaData;
 import org.jboss.deployers.structure.spi.classloading.ExportAll;
 
@@ -41,8 +41,8 @@
    /** The domain */
    private Domain domain;
    
-   /** The deployment context */
-   private DeploymentContext deploymentContext;
+   /** The deployment unit */
+   private DeploymentUnit deploymentUnit;
    
    /** The classloader metadata */
    private ClassLoaderMetaData metadata;
@@ -54,31 +54,31 @@
     * Create a new Module.
     * 
     * @param domain the domain
-    * @param deploymentContext the deployment context
+    * @param deploymentUnit the deployment unit
     * @param metadata the metadata
     * @throws IllegalArgumentException for a null parameter
     */
-   public Module(Domain domain, DeploymentContext deploymentContext, ClassLoaderMetaData metadata)
+   public Module(Domain domain, DeploymentUnit deploymentUnit, ClassLoaderMetaData metadata)
    {
       if (domain == null)
          throw new IllegalArgumentException("Null domain");
-      if (deploymentContext == null)
-         throw new IllegalArgumentException("Null context");
+      if (deploymentUnit == null)
+         throw new IllegalArgumentException("Null unit");
       if (metadata == null)
          throw new IllegalArgumentException("Null metadata");
       this.domain = domain;
-      this.deploymentContext = deploymentContext;
+      this.deploymentUnit = deploymentUnit;
       this.metadata = metadata;
    }
 
    /**
-    * Get the deploymentContext.
+    * Get the deploymentUnit.
     * 
-    * @return the deploymentContext.
+    * @return the deploymentUnit.
     */
-   public DeploymentContext getDeploymentContext()
+   public DeploymentUnit getDeploymentUnit()
    {
-      return deploymentContext;
+      return deploymentUnit;
    }
 
    /**
@@ -138,6 +138,16 @@
    }
 
    /**
+    * Get the import all for the module
+    * 
+    * @return the import all
+    */
+   public boolean isImportAll()
+   {
+      return getMetadata().isImportAll();
+   }
+
+   /**
     * Get delegate policy
     * 
     * @return the delegation policy

Modified: projects/microcontainer/trunk/deployers-structure-spi/src/main/org/jboss/deployers/structure/spi/classloading/ClassLoaderMetaData.java
===================================================================
--- projects/microcontainer/trunk/deployers-structure-spi/src/main/org/jboss/deployers/structure/spi/classloading/ClassLoaderMetaData.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/deployers-structure-spi/src/main/org/jboss/deployers/structure/spi/classloading/ClassLoaderMetaData.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -54,6 +54,9 @@
    /** Whether to export all */
    private ExportAll exportAll;
    
+   /** Whether to import all */
+   private boolean importAll;
+   
    /** The requirements */
    private Set<Requirement> requirements;
    
@@ -207,10 +210,20 @@
     */
    public boolean isImportAll()
    {
-      return requirements == null || requirements.isEmpty();
+      return importAll;
    }
    
    /**
+    * Set the importAll.
+    * 
+    * @param importAll the importAll.
+    */
+   public void setImportAll(boolean importAll)
+   {
+      this.importAll = importAll;
+   }
+
+   /**
     * Get the requirements.
     * 
     * @return the requirements.

Modified: projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/PackageVisitor.java
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/PackageVisitor.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/PackageVisitor.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -43,12 +43,15 @@
    /** The packages */
    private Set<String> packages = new HashSet<String>();
    
+   /** The root */
+   private String rootPath;
+   
    /** The exportAll policy */
    private ExportAll exportAll;
 
    /**
     * Create a new PackageVisitor.
-    * 
+    *
     * @param exportAll the export all policy
     * @throws IllegalArgumentException for a null exportAll policy
     */
@@ -60,6 +63,19 @@
    }
 
    /**
+    * Set the root
+    * 
+    * @param root the root
+    * @throws IllegalArgumentException for a null root
+    */
+   public void setRoot(VirtualFile root)
+   {
+      if (root == null)
+         throw new IllegalArgumentException("Null root");
+      rootPath = root.getPathName() + "/";
+   }
+   
+   /**
     * Get the packages.
     * 
     * @return the packages.
@@ -109,6 +125,8 @@
             if (empty == false)
             {
                String path = file.getPathName();
+               if (path.startsWith(rootPath))
+                  path = path.substring(rootPath.length());
                packages.add(path.replace('/', '.'));
             }
          }

Modified: projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSClassLoaderPolicy.java
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSClassLoaderPolicy.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSClassLoaderPolicy.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -60,6 +60,9 @@
    /** The exported packages */
    private String[] exportedPackages;
    
+   /** The import all */
+   private boolean importAll;
+   
    /**
     * Create a new VFSClassLoaderPolicy.
     * 
@@ -116,6 +119,22 @@
    }
 
    @Override
+   public boolean isImportAll()
+   {
+      return importAll;
+   }
+
+   /**
+    * Set the importAll.
+    * 
+    * @param importAll the importAll.
+    */
+   public void setImportAll(boolean importAll)
+   {
+      this.importAll = importAll;
+   }
+
+   @Override
    public String[] getPackageNames()
    {
       return exportedPackages;
@@ -228,6 +247,15 @@
    }
 
    @Override
+   protected void toLongString(StringBuilder builder)
+   {
+      builder.append(" roots=").append(Arrays.asList(roots)).append(" ");
+      super.toLongString(builder);
+      if (exportAll != null)
+         builder.append(exportAll);
+   }
+
+   @Override
    protected ProtectionDomain getProtectionDomain(String className, String path)
    {
       VirtualFile clazz = findChild(path);
@@ -264,6 +292,7 @@
       {
          try
          {
+            visitor.setRoot(root);
             root.visit(visitor);
          }
          catch (Exception e)

Modified: projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSTopLevelClassLoaderSystemDeployer.java
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSTopLevelClassLoaderSystemDeployer.java	2007-07-13 15:23:24 UTC (rev 64040)
+++ projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/plugins/classloader/VFSTopLevelClassLoaderSystemDeployer.java	2007-07-13 15:29:52 UTC (rev 64041)
@@ -41,12 +41,17 @@
    protected VFSClassLoaderPolicy createTopLevelClassLoaderPolicy(DeploymentContext context, Module module) throws Exception
    {
       ClassPathVisitor visitor = new ClassPathVisitor();
-      visitor.visit(context);
-      Set<VirtualFile> roots = visitor.getClassPath();
-      VFSClassLoaderPolicy policy = new VFSClassLoaderPolicy(roots.toArray(new VirtualFile[roots.size()]));
+      context.visit(visitor);
+      Set<VirtualFile> classPath = visitor.getClassPath();
+      
+      VirtualFile[] roots = new VirtualFile[classPath.size()];
+      int i = 0;
+      for (VirtualFile path : classPath)
+         roots[i++] = path;
+      VFSClassLoaderPolicy policy = new VFSClassLoaderPolicy(roots);
       policy.setExportAll(module.getExportAll());
+      policy.setImportAll(module.isImportAll());
       // TODO JBMICROCONT-182 more policy from "module"
       return policy;
    }
-
 }




More information about the jboss-cvs-commits mailing list