[jboss-cvs] JBossAS SVN: r98009 - in projects/jboss-cl/branches/vfs3-int: classloader/src/main/java/org/jboss/classloader/plugins and 34 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Dec 18 21:42:16 EST 2009


Author: johnbailey
Date: 2009-12-18 21:42:11 -0500 (Fri, 18 Dec 2009)
New Revision: 98009

Added:
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassFoundEvent.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassFoundHandler.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderEvent.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderEventHandler.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassNotFoundEvent.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassNotFoundHandler.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/ClassFilterUtils.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/ClassLoaderNotificationsTestSuite.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/A.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassFoundHandlerUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassLoaderEventHandlerUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassNotFoundHandlerUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/LifeCycle.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/ResolutionContext.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Resolver.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/LifeCycleTestSuite.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/A.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycle.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycleClassLoaderPolicyModule.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/AbstractMockLifeCycleUnitTest.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/LifeCycleUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/ResolverTestSuite.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/A.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/test/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/test/ResolverUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/resources/org/jboss/test/classloading/metadata/xml/test/ModuleTopLevelClassLoader.xml
Removed:
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/ClassLoaderNotificationsTestSuite.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/A.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassFoundHandlerUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassLoaderEventHandlerUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassNotFoundHandlerUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/LifeCycleTestSuite.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/A.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycle.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycleClassLoaderPolicyModule.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/AbstractMockLifeCycleUnitTest.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/LifeCycleUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/ResolverTestSuite.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/A.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/test/
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/test/ResolverUnitTestCase.java
Modified:
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/plugins/ClassLoaderUtils.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderDomain.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderDomainMBean.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderPolicy.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderSystem.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/Loader.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ParentPolicy.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderMBean.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseDelegateLoader.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/ClassFilter.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/LazyFilteredDelegateLoader.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/test/support/IsolatedClassLoaderTestHelper.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/test/support/MockClassLoaderPolicy.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/ClassLoaderAllTestSuite.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/delegate/test/DelegateLoaderUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/HierarchicalParentClassLoaderUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/HierarchicalParentLoaderUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/ParentPolicyUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/policy/test/ClassLoaderPolicyUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/java/org/jboss/classloading/plugins/vfs/VFSResourceVisitor.java
   projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/java/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java
   projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/resources/schema/jboss-classloading-1.0.xsd
   projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/ManagedObjectVFSClassLoaderFactoryUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Domain.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/metadata/ClassLoadingMetaData.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/ClassLoadingAllTestSuite.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/dependency/test/AbstractMockClassLoaderUnitTest.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/dependency/test/MockClassLoadingMetaDataUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/test/ClassLoadingMetaDataUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/test/ManagedObjectClassLoadingMetaDataUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/xml/test/ClassLoadingMetaDataXmlUnitTestCase.java
   projects/jboss-cl/branches/vfs3-int/pom.xml
Log:
Merged changes from trunk onto the VFS3 integration branch to keep from diverging too much.

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/plugins/ClassLoaderUtils.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/plugins/ClassLoaderUtils.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/plugins/ClassLoaderUtils.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -24,10 +24,13 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.Serializable;
+import java.net.URL;
 import java.security.AccessController;
 import java.security.CodeSource;
 import java.security.PrivilegedAction;
 import java.security.ProtectionDomain;
+import java.util.Comparator;
 
 /**
  * ClassLoaderUtils.
@@ -308,4 +311,74 @@
          return null;
       return protectionDomain.getCodeSource();
    }
+   
+   /**
+    * Compare two urls
+    * 
+    * @param one the first url
+    * @param two the second url
+    * @return whether one is less than two
+    */
+   public static int compareURL(URL one, URL two)
+   {
+      if (one == null)
+         throw new IllegalArgumentException("Null one");
+      if (two == null)
+         throw new IllegalArgumentException("Null one");
+
+      String a = one.getProtocol();
+      String b = two.getProtocol();
+      int result = compare(a, b);
+      if (result != 0)
+         return result;
+
+      a = one.getHost();
+      b = two.getHost();
+      result = compare(a, b);
+      if (result != 0)
+         return result;
+
+      a = one.getFile();
+      b = two.getFile();
+      result = compare(a, b);
+      if (result != 0)
+         return result;
+
+      int c = one.getPort();
+      int d = two.getPort();
+      result = c - d;
+      if (result != 0)
+         return result;
+      
+      String ref1 = one.getRef();
+      String ref2 = two.getRef();
+      return compare(ref1, ref2);
+   }
+   
+   private static int compare(String one, String two)
+   {
+      if (one == null &&  two == null)
+         return 0;
+      if (one == null)
+         return -1;
+      if (two == null)
+         return +1;
+      return one.compareTo(two);
+   }
+   
+   /**
+    * URLComparator.
+    */
+   public static class URLComparator implements Comparator<URL>, Serializable
+   {
+      /** The serialVersionUID */
+      private static final long serialVersionUID = 169805004616968144L;
+
+      public static final URLComparator INSTANCE = new URLComparator();
+      
+      public int compare(URL o1, URL o2)
+      {
+         return compareURL(o1, o2);
+      }
+   }
 }

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -127,6 +127,7 @@
       return url;
    }
 
+   // FindBugs: The Set doesn't use equals/hashCode
    public void getResources(final String name, Set<URL> urls) throws IOException
    {
       final ClassLoader classLoader = getClassLoader();

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassFoundEvent.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/ClassFoundEvent.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassFoundEvent.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassFoundEvent.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,87 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.spi;
+
+import java.util.EventObject;
+
+/**
+ * ClassFoundEvent.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassFoundEvent extends EventObject
+{
+   /** The serialVersionUID */
+   private static final long serialVersionUID = -8258925782380851534L;
+
+   /** The class */
+   private Class<?> clazz;
+   
+   /**
+    * Create a new ClassFoundEvent.
+    * 
+    * @param classLoader classLoader
+    * @param clazz the class
+    */
+   public ClassFoundEvent(ClassLoader classLoader, Class<?> clazz)
+   {
+      super(classLoader);
+      this.clazz = clazz;
+   }
+
+   /**
+    * Get the className.
+    * 
+    * @return the className.
+    */
+   public String getClassName()
+   {
+      return clazz.getName();
+   }
+
+   /**
+    * Get the class.
+    * 
+    * @return the class.
+    */
+   public Class<?> getClazz()
+   {
+      return clazz;
+   }
+
+   /**
+    * Get the classLoader.
+    * 
+    * @return the classLoader
+    */
+   public ClassLoader getClassLoader()
+   {
+      return (ClassLoader) getSource();
+   }
+
+   @Override
+   public String toString()
+   {
+      return getClass().getSimpleName() + "[classLoader=" + getClassLoader() + " class=" + getClassName() + "]";
+   }
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassFoundHandler.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/ClassFoundHandler.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassFoundHandler.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassFoundHandler.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,38 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.spi;
+
+/**
+ * ClassFoundHandler.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ClassFoundHandler
+{
+   /**
+    * Fired when a class is found
+    * 
+    * @param event the event
+    */
+   void classFound(ClassFoundEvent event);
+}

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderDomain.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderDomain.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderDomain.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -31,14 +31,18 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeSet;
 import java.util.Map.Entry;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.management.MBeanRegistration;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
+import org.jboss.classloader.plugins.ClassLoaderUtils;
 import org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter;
 import org.jboss.classloader.spi.base.BaseClassLoaderDomain;
+import org.jboss.classloader.spi.base.BaseClassLoaderSource;
 import org.jboss.classloader.spi.filter.ClassFilter;
 import org.jboss.classloading.spi.RealClassLoader;
 import org.jboss.logging.Logger;
@@ -49,7 +53,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $
  */
-public class ClassLoaderDomain extends BaseClassLoaderDomain implements Loader, ClassLoaderDomainMBean, MBeanRegistration
+public class ClassLoaderDomain extends BaseClassLoaderDomain implements Loader, ClassLoaderDomainMBean, MBeanRegistration, ClassNotFoundHandler, ClassFoundHandler
 {
    /** The log */
    private static final Logger log = Logger.getLogger(ClassLoaderDomain.class);
@@ -71,6 +75,15 @@
    
    /** Whether to use load class for the parent */
    private boolean useLoadClassForParent = false;
+
+   /** The class not found handlers */
+   private List<ClassNotFoundHandler> classNotFoundHandlers;
+
+   /** The class found handlers */
+   private List<ClassFoundHandler> classFoundHandlers;
+
+   /** The class loader event handlers */
+   private List<ClassLoaderEventHandler> classLoaderEventHandlers;
    
    /**
     * Create a new ClassLoaderDomain with the {@link ParentPolicy#BEFORE} loading rules.
@@ -261,9 +274,10 @@
       return null;
    }
 
+   // FindBugs: The Set doesn't use equals/hashCode
    public Set<URL> loadResources(String name) throws IOException
    {
-      HashSet<URL> result = new HashSet<URL>();
+      TreeSet<URL> result = new TreeSet<URL>(ClassLoaderUtils.URLComparator.INSTANCE);
       getResources(name, result);
       return result;
    }
@@ -284,7 +298,229 @@
       else
          builder.append(getParentClassLoader());
    }
+   
+   /**
+    * Add a ClassNotFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void addClassNotFoundHandler(ClassNotFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classNotFoundHandlers == null)
+         classNotFoundHandlers = new CopyOnWriteArrayList<ClassNotFoundHandler>();
+      
+      classNotFoundHandlers.add(handler);
+   }
+   
+   /**
+    * Remove a ClassNotFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void removeClassNotFoundHandler(ClassNotFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classNotFoundHandlers == null)
+         return;
+      classNotFoundHandlers.remove(handler);
+   }
 
+   public boolean classNotFound(ClassNotFoundEvent event)
+   {
+      String className = event.getClassName();
+
+      ClassNotFoundHandler parent = null;
+      Loader parentLoader = getParent();
+      if (parentLoader instanceof ClassNotFoundHandler)
+         parent = (ClassNotFoundHandler) parentLoader;
+      else
+      {
+         ClassLoaderPolicy parentPolicy = getClassLoaderPolicy(parentLoader);
+         if (parentPolicy != null)
+            parent = parentPolicy;
+      }
+      
+      boolean parentResult = false;
+      if (parent != null)
+         parentResult = parent.classNotFound(event);
+
+      // Try the parent before
+      if (parentResult && getParentPolicy().getBeforeFilter().matchesClassName(className))
+         return true;
+      
+      if (classNotFoundHandlers != null && classNotFoundHandlers.isEmpty() == false)
+      {
+         for (ClassNotFoundHandler handler : classNotFoundHandlers)
+         {
+            try
+            {
+               if (handler.classNotFound(event))
+                  return true;
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error invoking classNotFoundHandler: " + handler, t);
+            }
+         }
+      }
+
+      // Try the parent after
+      if (parentResult && getParentPolicy().getAfterFilter().matchesClassName(className))
+         return true;
+      
+      ClassLoaderSystem system = (ClassLoaderSystem) getClassLoaderSystem();
+      return system != null && system.classNotFound(event);
+   }
+   
+   /**
+    * Add a ClassFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void addClassFoundHandler(ClassFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classFoundHandlers == null)
+         classFoundHandlers = new CopyOnWriteArrayList<ClassFoundHandler>();
+      
+      classFoundHandlers.add(handler);
+   }
+   
+   /**
+    * Remove a ClassFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void removeClassFoundHandler(ClassFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classFoundHandlers == null)
+         return;
+      classFoundHandlers.remove(handler);
+   }
+
+   public void classFound(ClassFoundEvent event)
+   {
+      ClassFoundHandler parent = null;
+      Loader parentLoader = getParent();
+      if (parentLoader instanceof ClassFoundHandler)
+         parent = (ClassFoundHandler) parentLoader;
+      else
+      {
+         ClassLoaderPolicy parentPolicy = getClassLoaderPolicy(parentLoader);
+         if (parentPolicy != null)
+            parent = parentPolicy;
+      }
+      
+      if (parent != null)
+         parent.classFound(event);
+      
+      if (classFoundHandlers != null && classFoundHandlers.isEmpty() == false)
+      {
+         for (ClassFoundHandler handler : classFoundHandlers)
+         {
+            try
+            {
+               handler.classFound(event);
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error invoking classFoundHandler: " + handler, t);
+            }
+         }
+      }
+      
+      ClassLoaderSystem system = (ClassLoaderSystem) getClassLoaderSystem();
+      if (system != null)
+         system.classFound(event);
+   }
+   
+   /**
+    * Add a ClassLoaderEventHandler
+    * 
+    * @param handler the handler
+    */
+   public void addClassLoaderEventHandler(ClassLoaderEventHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classLoaderEventHandlers == null)
+         classLoaderEventHandlers = new CopyOnWriteArrayList<ClassLoaderEventHandler>();
+      
+      classLoaderEventHandlers.add(handler);
+   }
+   
+   /**
+    * Remove a ClassLoaderEventHandler
+    * 
+    * @param handler the handler
+    */
+   public void removeClassLoaderEventHandler(ClassLoaderEventHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classLoaderEventHandlers == null)
+         return;
+      classLoaderEventHandlers.remove(handler);
+   }
+
+   private void fireRegisterClassLoader(ClassLoaderEvent event)
+   {
+      if (classLoaderEventHandlers != null && classLoaderEventHandlers.isEmpty() == false)
+      {
+         for (ClassLoaderEventHandler handler : classLoaderEventHandlers)
+         {
+            try
+            {
+               handler.fireRegisterClassLoader(event);
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error invoking classLoaderEventHandler: " + handler, t);
+            }
+         }
+      }
+      
+      ClassLoaderSystem system = (ClassLoaderSystem) getClassLoaderSystem();
+      if (system == null)
+         return;
+      system.fireRegisterClassLoader(event);
+   }
+
+   private void fireUnregisterClassLoader(ClassLoaderEvent event)
+   {
+      if (classLoaderEventHandlers != null && classLoaderEventHandlers.isEmpty() == false)
+      {
+         for (ClassLoaderEventHandler handler : classLoaderEventHandlers)
+         {
+            try
+            {
+               handler.fireUnregisterClassLoader(event);
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error invoking classLoaderEventHandler: " + handler, t);
+            }
+         }
+      }
+      
+      ClassLoaderSystem system = (ClassLoaderSystem) getClassLoaderSystem();
+      if (system == null)
+         return;
+      system.fireUnregisterClassLoader(event);
+   }
+
    @Override
    public String toString()
    {
@@ -486,6 +722,7 @@
    }
    
    @Override
+   // FindBugs: The Set doesn't use equals/hashCode
    protected void beforeGetResources(String name, Set<URL> urls) throws IOException
    {
       boolean trace = log.isTraceEnabled();
@@ -501,6 +738,7 @@
    }
 
    @Override
+   // FindBugs: The Set doesn't use equals/hashCode
    protected void afterGetResources(String name, Set<URL> urls) throws IOException
    {
       boolean trace = log.isTraceEnabled();
@@ -522,6 +760,7 @@
     * @param urls the urls to add to
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    protected void getResourcesFromParent(String name, Set<URL> urls) throws IOException
    {
       Loader parentLoader = getParent();
@@ -680,7 +919,8 @@
       }
       finally
       {
-         setUseLoadClassForParent(parent instanceof ClassLoaderDomain == false);
+         if ((parent instanceof ClassLoaderDomain == false) && (parent instanceof BaseClassLoaderSource == false))
+            setUseLoadClassForParent(true);
       }
    }
 
@@ -722,11 +962,13 @@
    protected void afterRegisterClassLoader(ClassLoader classLoader, ClassLoaderPolicy policy)
    {
       registerClassLoaderMBean(classLoader);
+      fireRegisterClassLoader(new ClassLoaderEvent(this, classLoader));
    }
 
    @Override
    protected void beforeUnregisterClassLoader(ClassLoader classLoader, ClassLoaderPolicy policy)
    {
+      fireUnregisterClassLoader(new ClassLoaderEvent(this, classLoader));
       unregisterClassLoaderMBean(classLoader);
    }
 

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderDomainMBean.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderDomainMBean.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderDomainMBean.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -110,6 +110,7 @@
     * @return the resource urls
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    Set<URL> loadResources(String name) throws IOException;
    
    /**

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderEvent.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderEvent.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderEvent.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderEvent.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,77 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.spi;
+
+import java.util.EventObject;
+
+/**
+ * ClassLoaderEvent.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassLoaderEvent extends EventObject
+{
+   /** The serialVersionUID */
+   private static final long serialVersionUID = -5874702798336257018L;
+
+   /** The classLoader */
+   private ClassLoader classLoader;
+   
+   /**
+    * Create a new ClassLoaderEvent.
+    *
+    * @param classLoaderDomain the classLoaderDomain
+    * @param classLoader classLoader
+    */
+   public ClassLoaderEvent(ClassLoaderDomain classLoaderDomain, ClassLoader classLoader)
+   {
+      super(classLoaderDomain);
+      this.classLoader = classLoader;
+   }
+
+   /**
+    * Get the classLoader.
+    * 
+    * @return the classLoader
+    */
+   public ClassLoader getClassLoader()
+   {
+      return classLoader;
+   }
+
+   /**
+    * Get the classLoaderDomain.
+    * 
+    * @return the classLoaderDomain
+    */
+   public ClassLoaderDomain getClassLoaderDomain()
+   {
+      return (ClassLoaderDomain) getSource();
+   }
+
+   @Override
+   public String toString()
+   {
+      return getClass().getSimpleName() + "[classLoaderDomain=" + getClassLoaderDomain() + " classLoader=" + getClassLoader() + "]";
+   }
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderEventHandler.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderEventHandler.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderEventHandler.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderEventHandler.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,45 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.spi;
+
+/**
+ * ClassLoaderEventHandler.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ClassLoaderEventHandler
+{
+   /**
+    * Fired when a classLoader is registered
+    * 
+    * @param event the classloader event
+    */
+   void fireRegisterClassLoader(ClassLoaderEvent event);
+
+   /**
+    * Fired when a classLoader is registered
+    * 
+    * @param event the classloader event
+    */
+   void fireUnregisterClassLoader(ClassLoaderEvent event);
+}

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderPolicy.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderPolicy.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderPolicy.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -31,6 +31,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
@@ -48,11 +49,17 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $
  */
-public abstract class ClassLoaderPolicy extends BaseClassLoaderPolicy
+public abstract class ClassLoaderPolicy extends BaseClassLoaderPolicy implements ClassNotFoundHandler, ClassFoundHandler
 {
    /** The log */
    private static final Logger log = Logger.getLogger(ClassLoaderPolicy.class);
 
+   /** The class not found handlers */
+   private List<ClassNotFoundHandler> classNotFoundHandlers;
+
+   /** The class found handlers */
+   private List<ClassFoundHandler> classFoundHandlers;
+   
    /**
     * Get the delegate loader for exported stuff<p>
     *
@@ -142,6 +149,7 @@
     * @param path the path
     * @return the url or null if not found
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    public abstract URL getResource(String path);
 
    /**
@@ -224,7 +232,7 @@
    /**
     * Check whether this a request from the jdk if it is return the relevant classloader<p>
     * 
-    * By default this uses the {@Link JDKCheckerFactory} and returns the system classloader if true.
+    * By default this uses the {@link JDKCheckerFactory} and returns the system classloader if true.
     * 
     * @param name the class name
     * @return the classloader
@@ -236,7 +244,113 @@
          return getSystemClassLoader();
       return null;
    }
+   
+   /**
+    * Add a ClassNotFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void addClassNotFoundHandler(ClassNotFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classNotFoundHandlers == null)
+         classNotFoundHandlers = new CopyOnWriteArrayList<ClassNotFoundHandler>();
+      
+      classNotFoundHandlers.add(handler);
+   }
+   
+   /**
+    * Remove a ClassNotFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void removeClassNotFoundHandler(ClassNotFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classNotFoundHandlers == null)
+         return;
+      classNotFoundHandlers.remove(handler);
+   }
 
+   public boolean classNotFound(ClassNotFoundEvent event)
+   {
+      if (classNotFoundHandlers != null && classNotFoundHandlers.isEmpty() == false)
+      {
+         for (ClassNotFoundHandler handler : classNotFoundHandlers)
+         {
+            try
+            {
+               if (handler.classNotFound(event))
+                  return true;
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error invoking classNotFoundHandler: " + handler, t);
+            }
+         }
+      }
+      
+      ClassLoaderDomain domain = getDomain();
+      return domain != null && domain.classNotFound(event);
+   }
+   
+   /**
+    * Add a ClassFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void addClassFoundHandler(ClassFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classFoundHandlers == null)
+         classFoundHandlers = new CopyOnWriteArrayList<ClassFoundHandler>();
+      
+      classFoundHandlers.add(handler);
+   }
+   
+   /**
+    * Remove a ClassFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void removeClassFoundHandler(ClassFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classFoundHandlers == null)
+         return;
+      classFoundHandlers.remove(handler);
+   }
+
+   public void classFound(ClassFoundEvent event)
+   {
+      if (classFoundHandlers != null && classFoundHandlers.isEmpty() == false)
+      {
+         for (ClassFoundHandler handler : classFoundHandlers)
+         {
+            try
+            {
+               handler.classFound(event);
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error invoking classFoundHandler: " + handler, t);
+            }
+         }
+      }
+      
+      ClassLoaderDomain domain = getDomain();
+      if (domain != null)
+         domain.classFound(event);
+   }
+
    @Override
    public ObjectName getObjectName()
    {

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderSystem.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderSystem.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassLoaderSystem.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -23,6 +23,7 @@
 
 import java.security.ProtectionDomain;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Hashtable;
@@ -30,7 +31,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.Collections;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.management.MBeanRegistration;
 import javax.management.MBeanServer;
@@ -50,7 +51,7 @@
  * @author <a href="ales.justin at jboss.com">Ales Justin</a>
  * @version $Revision: 1.1 $
  */
-public abstract class ClassLoaderSystem extends BaseClassLoaderSystem implements ClassLoaderSystemMBean, MBeanRegistration
+public abstract class ClassLoaderSystem extends BaseClassLoaderSystem implements ClassLoaderSystemMBean, MBeanRegistration, ClassNotFoundHandler, ClassFoundHandler, ClassLoaderEventHandler
 {
    /** The log */
    private static final Logger log = Logger.getLogger(ClassLoaderSystem.class);
@@ -78,6 +79,15 @@
    
    /** The object name */
    private ObjectName objectName;
+
+   /** The class not found handlers */
+   private List<ClassNotFoundHandler> classNotFoundHandlers;
+
+   /** The class found handlers */
+   private List<ClassFoundHandler> classFoundHandlers;
+
+   /** The class loader event handlers */
+   private List<ClassLoaderEventHandler> classLoaderEventHandlers;
    
    /**
     * Get the classloading system instance
@@ -182,6 +192,9 @@
    public ClassLoaderDomain createAndRegisterDomain(String name, ParentPolicy parentPolicy, Loader parent)
    {
       ClassLoaderDomain result = createDomain(name);
+      if (result == null)
+         throw new IllegalArgumentException("Created null domain: " + name);
+
       result.setParentPolicy(parentPolicy);
       result.setParent(parent);
       registerDomain(result);
@@ -520,7 +533,7 @@
     * @deprecated use translator list
     */
    @Deprecated
-   public Translator getTranslator()
+   public synchronized Translator getTranslator()
    {
       if (translators == null || translators.isEmpty())
          return null;
@@ -535,7 +548,7 @@
     * @deprecated use translator list
     */
    @Deprecated
-   public void setTranslator(Translator translator)
+   public synchronized void setTranslator(Translator translator)
    {
       log.debug(this + " set translator to " + translator);
 
@@ -548,7 +561,7 @@
    @Override
    protected byte[] transform(ClassLoader classLoader, String className, byte[] byteCode, ProtectionDomain protectionDomain) throws Exception
    {
-      byte[] result = TranslatorUtils.applyTranslatorsOnTransform(translators, classLoader, className, byteCode, protectionDomain);
+      byte[] result = TranslatorUtils.applyTranslatorsOnTransform(getTranslators(), classLoader, className, byteCode, protectionDomain);
       return super.transform(classLoader, className, result, protectionDomain);
    }
 
@@ -557,7 +570,7 @@
    {
       try
       {
-         TranslatorUtils.applyTranslatorsAtUnregister(translators, classLoader);
+         TranslatorUtils.applyTranslatorsAtUnregister(getTranslators(), classLoader);
       }
       catch (Throwable t)
       {
@@ -685,7 +698,174 @@
          log.warn("Error unregistering domain: " + domain, e);
       }
    }
+   
+   /**
+    * Add a ClassNotFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void addClassNotFoundHandler(ClassNotFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classNotFoundHandlers == null)
+         classNotFoundHandlers = new CopyOnWriteArrayList<ClassNotFoundHandler>();
+      
+      classNotFoundHandlers.add(handler);
+   }
+   
+   /**
+    * Remove a ClassNotFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void removeClassNotFoundHandler(ClassNotFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classNotFoundHandlers == null)
+         return;
+      classNotFoundHandlers.remove(handler);
+   }
 
+   public boolean classNotFound(ClassNotFoundEvent event)
+   {
+      if (classNotFoundHandlers != null && classNotFoundHandlers.isEmpty() == false)
+      {
+         for (ClassNotFoundHandler handler : classNotFoundHandlers)
+         {
+            try
+            {
+               if (handler.classNotFound(event))
+                  return true;
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error invoking classNotFoundHandler: " + handler, t);
+            }
+         }
+      }
+      return false;
+   }
+   
+   /**
+    * Add a ClassFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void addClassFoundHandler(ClassFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classFoundHandlers == null)
+         classFoundHandlers = new CopyOnWriteArrayList<ClassFoundHandler>();
+      
+      classFoundHandlers.add(handler);
+   }
+   
+   /**
+    * Remove a ClassFoundHandler
+    * 
+    * @param handler the handler
+    */
+   public void removeClassFoundHandler(ClassFoundHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classFoundHandlers == null)
+         return;
+      classFoundHandlers.remove(handler);
+   }
+
+   public void classFound(ClassFoundEvent event)
+   {
+      if (classFoundHandlers != null && classFoundHandlers.isEmpty() == false)
+      {
+         for (ClassFoundHandler handler : classFoundHandlers)
+         {
+            try
+            {
+               handler.classFound(event);
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error invoking classFoundHandler: " + handler, t);
+            }
+         }
+      }
+   }
+   
+   /**
+    * Add a ClassLoaderEventHandler
+    * 
+    * @param handler the handler
+    */
+   public void addClassLoaderEventHandler(ClassLoaderEventHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classLoaderEventHandlers == null)
+         classLoaderEventHandlers = new CopyOnWriteArrayList<ClassLoaderEventHandler>();
+      
+      classLoaderEventHandlers.add(handler);
+   }
+   
+   /**
+    * Remove a ClassLoaderEventHandler
+    * 
+    * @param handler the handler
+    */
+   public void removeClassLoaderEventHandler(ClassLoaderEventHandler handler)
+   {
+      if (handler == null)
+         throw new IllegalArgumentException("Null handler");
+      
+      if (classLoaderEventHandlers == null)
+         return;
+      classLoaderEventHandlers.remove(handler);
+   }
+
+   public void fireRegisterClassLoader(ClassLoaderEvent event)
+   {
+      if (classLoaderEventHandlers != null && classLoaderEventHandlers.isEmpty() == false)
+      {
+         for (ClassLoaderEventHandler handler : classLoaderEventHandlers)
+         {
+            try
+            {
+               handler.fireRegisterClassLoader(event);
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error invoking classLoaderEventHandler: " + handler, t);
+            }
+         }
+      }
+   }
+
+   public void fireUnregisterClassLoader(ClassLoaderEvent event)
+   {
+      if (classLoaderEventHandlers != null && classLoaderEventHandlers.isEmpty() == false)
+      {
+         for (ClassLoaderEventHandler handler : classLoaderEventHandlers)
+         {
+            try
+            {
+               handler.fireUnregisterClassLoader(event);
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error invoking classLoaderEventHandler: " + handler, t);
+            }
+         }
+      }
+   }
+
    @Override
    protected void toLongString(StringBuilder builder)
    {
@@ -700,7 +880,7 @@
     *
     * @return the translators
     */
-   public List<Translator> getTranslators()
+   public synchronized List<Translator> getTranslators()
    {
       if (translators == null || translators.isEmpty())
          return Collections.emptyList();

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassNotFoundEvent.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/ClassNotFoundEvent.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassNotFoundEvent.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassNotFoundEvent.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,77 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.spi;
+
+import java.util.EventObject;
+
+/**
+ * ClassNotFoundEvent.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassNotFoundEvent extends EventObject
+{
+   /** The serialVersionUID */
+   private static final long serialVersionUID = 7445562838711417089L;
+
+   /** The class name */
+   private String className;
+   
+   /**
+    * Create a new ClassNotFoundEvent.
+    * 
+    * @param classLoader the classLoader
+    * @param className the class name
+    */
+   public ClassNotFoundEvent(ClassLoader classLoader, String className)
+   {
+      super(classLoader);
+      this.className = className;
+   }
+
+   /**
+    * Get the className.
+    * 
+    * @return the className.
+    */
+   public String getClassName()
+   {
+      return className;
+   }
+
+   /**
+    * Get the classLoader.
+    * 
+    * @return the classLoader
+    */
+   public ClassLoader getClassLoader()
+   {
+      return (ClassLoader) getSource();
+   }
+
+   @Override
+   public String toString()
+   {
+      return getClass().getSimpleName() + "[classLoader=" + getClassLoader() + " class=" + getClassName() + "]";
+   }
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassNotFoundHandler.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/ClassNotFoundHandler.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassNotFoundHandler.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ClassNotFoundHandler.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,39 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.spi;
+
+/**
+ * ClassNotFoundHandler.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ClassNotFoundHandler
+{
+   /**
+    * Fired when a class is not found
+    * 
+    * @param event the event
+    * @return true when the a retry of the classloading should be tried
+    */
+   boolean classNotFound(ClassNotFoundEvent event);
+}

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/Loader.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/Loader.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/Loader.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -56,6 +56,7 @@
     * @param urls the list of urls to add to
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    void getResources(String name, Set<URL> urls) throws IOException;
    
    /**

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ParentPolicy.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ParentPolicy.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/ParentPolicy.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -22,6 +22,7 @@
 package org.jboss.classloader.spi;
 
 import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 
 /**
  * ParentPolicy
@@ -32,19 +33,19 @@
 public class ParentPolicy
 {
    /** Standard Java Delegation */
-   public static final ParentPolicy BEFORE = new ParentPolicy(ClassFilter.EVERYTHING, ClassFilter.NOTHING, "BEFORE");
+   public static final ParentPolicy BEFORE = new ParentPolicy(ClassFilterUtils.EVERYTHING, ClassFilterUtils.NOTHING, "BEFORE");
 
    /** Servlet style */
-   public static final ParentPolicy AFTER = new ParentPolicy(ClassFilter.NOTHING_BUT_JAVA, ClassFilter.EVERYTHING, "AFTER");
+   public static final ParentPolicy AFTER = new ParentPolicy(ClassFilterUtils.NOTHING_BUT_JAVA, ClassFilterUtils.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");
+   public static final ParentPolicy BEFORE_BUT_JAVA_ONLY = new ParentPolicy(ClassFilterUtils.JAVA_ONLY, ClassFilterUtils.NOTHING, "BEFORE_BUT_JAVA_ONLY");
 
    /** Java and Javax classes before, everything else after */
-   public static final ParentPolicy AFTER_BUT_JAVA_BEFORE = new ParentPolicy(ClassFilter.JAVA_ONLY, ClassFilter.EVERYTHING, "AFTER_BUT_JAVA_BEFORE");
+   public static final ParentPolicy AFTER_BUT_JAVA_BEFORE = new ParentPolicy(ClassFilterUtils.JAVA_ONLY, ClassFilterUtils.EVERYTHING, "AFTER_BUT_JAVA_BEFORE");
 
    /** Java classes before, everything else after */
-   public static final ParentPolicy AFTER_BUT_ONLY_JAVA_BEFORE = new ParentPolicy(ClassFilter.NOTHING_BUT_JAVA, ClassFilter.EVERYTHING, "AFTER_BUT_JAVA_BEFORE");
+   public static final ParentPolicy AFTER_BUT_ONLY_JAVA_BEFORE = new ParentPolicy(ClassFilterUtils.NOTHING_BUT_JAVA, ClassFilterUtils.EVERYTHING, "AFTER_BUT_JAVA_BEFORE");
    
    /** The before filter */
    private ClassFilter beforeFilter;

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -38,6 +38,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReentrantLock;
@@ -45,8 +46,10 @@
 import javax.management.ObjectName;
 
 import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloader.spi.ClassFoundEvent;
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderPolicy;
+import org.jboss.classloader.spi.ClassNotFoundEvent;
 import org.jboss.classloader.spi.DelegateLoader;
 import org.jboss.classloader.spi.Loader;
 import org.jboss.classloader.spi.PackageInformation;
@@ -56,39 +59,39 @@
 
 /**
  * BaseClassLoader.
- * 
+ *
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $
  */
-public class BaseClassLoader extends SecureClassLoader implements BaseClassLoaderMBean, RealClassLoader 
+public class BaseClassLoader extends SecureClassLoader implements BaseClassLoaderMBean, RealClassLoader
 {
    /** The log */
    private static final Logger log = Logger.getLogger(BaseClassLoader.class);
 
    /** The lock object */
    private ReentrantLock lock = new ReentrantLock(true);
-   
+
    /** The policy for this classloader */
    private ClassLoaderPolicy policy;
-   
+
    /** Our Loader front end */
    private DelegateLoader loader;
-   
+
    /** The loaded classes */
    private Map<String, String> loadedClasses = new ConcurrentHashMap<String, String>();
-   
+
    /** Our resource cache */
    private Map<String, URL> resourceCache;
-   
+
    /** Our black list */
    private Map<String, String> blackList;
-   
+
    /**
     * Create a new ClassLoader with no parent.
-    * 
+    *
     * @param policy the policy
-    * @throws IllegalArgumentException for a null policy 
-    * @throws IllegalStateException if the policy is already associated with a classloader 
+    * @throws IllegalArgumentException for a null policy
+    * @throws IllegalStateException if the policy is already associated with a classloader
     */
    public BaseClassLoader(ClassLoaderPolicy policy)
    {
@@ -107,7 +110,7 @@
 
       if (basePolicy.isBlackListable())
          blackList = new ConcurrentHashMap<String, String>();
-      
+
       log.debug("Created " + this + " with policy " + policy.toLongString());
    }
 
@@ -115,7 +118,7 @@
    {
       return policy.getObjectName();
    }
-   
+
    public ObjectName getClassLoaderDomain()
    {
       BaseClassLoaderPolicy basePolicy = policy;
@@ -127,7 +130,7 @@
    {
       return policy.getName();
    }
-   
+
    public boolean isBlackListable()
    {
       BaseClassLoaderPolicy basePolicy = policy;
@@ -172,7 +175,7 @@
       }
       return result;
    }
-   
+
    public String listPolicyDetails()
    {
       return policy.toLongString();
@@ -183,18 +186,18 @@
       final Class<?> clazz = loadClass(name);
       if (clazz == null)
          return null;
-      
+
       ClassLoader cl = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
       {
          public ClassLoader run()
          {
-            return clazz.getClassLoader(); 
+            return clazz.getClassLoader();
          }
       });
-      
+
       if (cl != null && cl instanceof RealClassLoader)
          return ((RealClassLoader) cl).getObjectName();
-      
+
       return null;
    }
 
@@ -210,16 +213,19 @@
       return new HashSet<String>(resourceCache.keySet());
    }
 
+   // FindBugs: The Set doesn't use equals/hashCode
    public Set<URL> listLoadedResources()
    {
       if (resourceCache == null)
          return Collections.emptySet();
-      return new HashSet<URL>(resourceCache.values());
+      Set<URL> result = new TreeSet<URL>(ClassLoaderUtils.URLComparator.INSTANCE);
+      result.addAll(resourceCache.values());
+      return result;
    }
 
    /**
     * Get the policy.
-    * 
+    *
     * @return the policy.
     */
    ClassLoaderPolicy getPolicy()
@@ -229,7 +235,7 @@
 
    /**
     * Get the loader.
-    * 
+    *
     * @return the loader.
     */
    DelegateLoader getLoader()
@@ -246,12 +252,12 @@
 
       if (name == null)
          return null;
-      
+
       // Did we already load this package?
       Package result = super.getPackage(name);
       if (result != null && trace)
          log.trace(this + " already loaded package " + name + " " + result.getName());
-      
+
       // Not already loaded use the domain
       if (result == null)
       {
@@ -263,14 +269,14 @@
             log.trace(this + " getPackage " + name + " domain=" + domain);
          result = domain.getPackage(this, name);
       }
-      
+
       // Still not found
       if (result == null)
       {
          if (trace)
             log.trace(this + " package not found " + name);
       }
-      
+
       return result;
    }
 
@@ -292,7 +298,7 @@
 
    /**
     * Get a package locally
-    * 
+    *
     * @param name the package name
     * @return the package
     */
@@ -303,7 +309,7 @@
 
    /**
     * Get the packages locally
-    * 
+    *
     * @param packages the packages
     */
    void getPackagesLocally(Set<Package> packages)
@@ -312,10 +318,10 @@
       for (Package pkg : pkgs)
          packages.add(pkg);
    }
-   
+
    /**
     * Check to see if the class is already loaded
-    * 
+    *
     * @param name the name of the class
     * @param trace whether trace is enabled
     * @return the class is if it is already loaded, null otherwise
@@ -343,10 +349,10 @@
          log.trace(this + " already loaded class " + ClassLoaderUtils.classToString(result));
       return result;
    }
-   
+
    /**
     * Check the cache and blacklist
-    * 
+    *
     * @param name the name of the class
     * @param failIfBlackListed <code>true</code> if a blacklisted class should
     *                          result in ClassNotFoundException; <code>false</code>
@@ -363,12 +369,12 @@
       if (domain == null)
          return null;
 
-      return domain.checkClassCacheAndBlackList(this, name, null, basePolicy.isImportAll(), failIfBlackListed);
+      return domain.checkClassCacheAndBlackList(this, name, null, basePolicy.isImportAll(), false);
    }
 
    /**
     * Find the classloader for a class but don't load the class
-    * 
+    *
     * @param className the class name
     * @return the classloader
     * @throws ClassNotFoundException if the class is not found
@@ -388,11 +394,11 @@
 
       ClassLoaderUtils.checkClassName(className);
       String path = ClassLoaderUtils.classNameToPath(className);
-      
+
       Loader loader = domain.findLoader(this, path, basePolicy.isImportAll(), true);
       if (loader == null)
          throw new ClassNotFoundException("Class " + className + " not found from " + this);
-      
+
       // This is a bit ugly but we can't abstract this behind an interface because
       // that would make the methods public
       if (loader instanceof BaseClassLoaderSource)
@@ -408,10 +414,10 @@
       boolean trace = log.isTraceEnabled();
       if (trace)
          log.trace(this + " loadClass " + name + " resolve=" + resolve);
-      
+
       // Validate the class name makes sense
       ClassLoaderUtils.checkClassName(name);
-      
+
       // Did we already load this class?
       Class<?> result = isLoadedClass(name, trace);
 
@@ -430,21 +436,72 @@
       result = checkCacheAndBlackList(name, false, trace);
       if (result != null)
          return result;
+
+      // Try to load the class
+      ClassNotFoundException exception = null;
+      try
+      {
+         result = doLoadClass(name, resolve, trace);
+      }
+      catch (ClassNotFoundException e)
+      {
+         exception = e;
+      }
       
+      // If we failed, try any class not found handlers and retry if one says it is resolved
+      if (result == null)
+      {
+         ClassLoaderPolicy policy = getPolicy();
+         if (policy != null && policy.classNotFound(new ClassNotFoundEvent(this, name)))
+         {
+            try
+            {
+               result = doLoadClass(name, resolve, trace);
+            }
+            catch (ClassNotFoundException e)
+            {
+               exception = e;
+            }
+         }
+      }
+      
+      if (result == null)
+      {
+         if (trace)
+            log.trace(this + " class not found " + name);
+         if (exception != null)
+            throw exception;
+         throw new ClassNotFoundException(name + " from " + toString());
+      }
+      return result;
+   }
+
+   /**
+    * Do the load class
+    * 
+    * @param name the name
+    * @param resolve whether to resolve
+    * @param trace whether trace is enabled
+    * @return the class or null if not found
+    * @throws ClassNotFoundException if a problem is raised
+    */
+   protected Class<?> doLoadClass(String name, boolean resolve, boolean trace) throws ClassNotFoundException
+   {
+      Class<?> result;
+      
       synchronized (this)
       {
+         // JBCL-114: did we lose the race to the synchronized?
+         result = isLoadedClass(name, trace);
+         
          // Not already loaded use the domain
          if (result == null)
             result = loadClassFromDomain(name, trace);
-         
+
          // Still not found
          if (result == null)
-         {
-            if (trace)
-               log.trace(this + " class not found " + name);
-            throw new ClassNotFoundException(name + " from " + toLongString());
-         }
-         
+            return null;
+
          // Link the class if requested
          if (resolve)
          {
@@ -452,7 +509,7 @@
                log.trace(this + " resolveClass " + ClassLoaderUtils.classToString(result));
             resolveClass(result);
          }
-         
+
          return result;
       }
    }
@@ -479,6 +536,7 @@
       return Iterators.toEnumeration(resourceURLs.iterator());
    }
 
+   // FindBugs: The Set doesn't use equals/hashCode
    public Set<URL> loadResources(String name) throws IOException
    {
       BaseClassLoaderPolicy basePolicy = policy;
@@ -487,15 +545,15 @@
       if (trace)
          log.trace(this + " findResources " + name + " domain=" + domain);
 
-      Set<URL> resourceURLs = new HashSet<URL>();
+      Set<URL> resourceURLs = new TreeSet<URL>(ClassLoaderUtils.URLComparator.INSTANCE);
       if (domain != null)
          domain.getResources(this, name, resourceURLs);
       return resourceURLs;
    }
-   
+
    /**
     * Try to load the class locally
-    * 
+    *
     * @param name the class name
     * @return the class
     */
@@ -506,7 +564,7 @@
 
    /**
     * Try to load the class locally
-    * 
+    *
     * @param name the class name
     * @param trace whether trace is enabled
     * @return the class if found
@@ -523,7 +581,7 @@
 
       // Look for the resource
       final String resourcePath = ClassLoaderUtils.classNameToPath(name);
-      
+
       result = AccessController.doPrivileged(new PrivilegedAction<Class<?>>()
       {
          public Class<?> run()
@@ -538,7 +596,7 @@
 
             // Load the bytecode
             byte[] byteCode = ClassLoaderUtils.loadByteCode(name, is);
-            
+
             // Let the policy do things before we define the class
             BaseClassLoaderPolicy basePolicy = policy;
             ProtectionDomain protectionDomain = basePolicy.getProtectionDomain(name, resourcePath);
@@ -552,7 +610,7 @@
             {
                throw new RuntimeException("Unexpected error transforming class " + name, t);
             }
-            
+
             // Create the package if necessary
             URL codeSourceURL = null;
             if (protectionDomain != null)
@@ -562,7 +620,7 @@
                   codeSourceURL = codeSource.getLocation();
             }
             definePackage(name, codeSourceURL);
-            
+
             // Finally we can define the class
             Class<?> result;
             if (protectionDomain != null)
@@ -574,15 +632,16 @@
             return result;
          }
       }, policy.getAccessControlContext());
-      
+
       loadedClasses.put(name, name);
-      
+      policy.classFound(new ClassFoundEvent(this, result));
+
       return result;
    }
 
    /**
     * Try to find the resource locally
-    * 
+    *
     * @param name the resource name
     * @return the url if found
     */
@@ -593,7 +652,7 @@
 
    /**
     * Try to find the resource locally
-    * 
+    *
     * @param name the resource name
     * @param trace whether trace is enabled
     * @return the URL if found
@@ -614,7 +673,7 @@
             return url;
          }
       }
-      
+
       // Is this resource blacklisted?
       if (blackList != null && blackList.containsKey(name))
       {
@@ -622,7 +681,7 @@
             log.trace(this + " resource is blacklisted " + name);
          return null;
       }
-      
+
       // Ask the policy for the resource
       URL result = AccessController.doPrivileged(new PrivilegedAction<URL>()
       {
@@ -645,21 +704,22 @@
       // Cache what we found
       if (resourceCache != null && result != null)
          resourceCache.put(name, result);
-      
+
       // Blacklist when not found
       if (blackList != null && result == null)
          blackList.put(name, name);
-      
+
       return result;
    }
 
    /**
     * Try to find the resource locally
-    * 
+    *
     * @param name the resource name
     * @param urls the urls to add to
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    void getResourcesLocally(String name, Set<URL> urls) throws IOException
    {
       getResourcesLocally(name, urls, log.isTraceEnabled());
@@ -667,12 +727,13 @@
 
    /**
     * Try to find the resources locally
-    * 
+    *
     * @param name the resource name
     * @param urls the urls to add to
     * @param trace whether trace is enabled
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    void getResourcesLocally(final String name, final Set<URL> urls, boolean trace) throws IOException
    {
       if (trace)
@@ -702,7 +763,7 @@
          throw e2;
       }
    }
-   
+
    /**
     * Define the package for the class if not already done
     *
@@ -714,10 +775,10 @@
       String packageName = ClassLoaderUtils.getClassPackageName(className);
       if (packageName.length() == 0)
          return;
-      
+
       // Ask the policy for the information
       PackageInformation pi = policy.getClassPackageInformation(className, packageName);
-      
+
       // Already defined?
       Package pkge = getPackage(packageName);
       if (pkge != null)
@@ -754,7 +815,7 @@
 
    /**
     * Try to load the class from the domain
-    * 
+    *
     * @param name the class name
     * @param trace whether trace is enabled
     * @return the class if found in the parent
@@ -764,17 +825,17 @@
    {
       // Because of the broken classloading in the Sun JDK we need to
       // serialize access to the classloader.
-      
+
       // Additionally, acquiring the lock on the policy for this classloader
       // ensures that we don't race with somebody undeploying the classloader
       // which could cause leaks
       acquireLockFairly(trace);
       try
       {
-         // Here we have synchronized with the policy 
+         // Here we have synchronized with the policy
          BaseClassLoaderPolicy basePolicy = policy;
          BaseClassLoaderDomain domain = basePolicy.getClassLoaderDomain();
-         
+
          if (trace)
             log.trace(this + " load from domain " + name + " domain=" + domain);
 
@@ -784,7 +845,7 @@
          if (domain == null)
          {
             Class<?> result = loadClassLocally(name, trace);
-            
+
             // So this is almost certainly a classloader leak
             if (result == null)
                throw new IllegalStateException(this + " classLoader is not connected to a domain (probably undeployed?) for class " + name);
@@ -808,7 +869,7 @@
       BaseClassLoaderPolicy basePolicy = policy;
       return basePolicy.getClassLoaderUnchecked() != null;
    }
-   
+
    public Class<?> getCachedClass(String name)
    {
       // TODO look in global and/or local cache
@@ -873,10 +934,10 @@
          policy.clearBlackList(name);
       }
    }
-   
+
    /**
     * A long version of the classloader
-    * 
+    *
     * @return the long string
     */
    public String toLongString()
@@ -889,28 +950,29 @@
       builder.append('}');
       return builder.toString();
    }
-   
+
    /**
     * Shutdown the classloader
     */
    protected void shutdownClassLoader()
    {
       log.debug(toString() + " shutdown!");
+      loadedClasses.clear();
       if (resourceCache != null)
          resourceCache.clear();
       if (blackList != null)
          blackList.clear();
    }
-   
+
    /**
     * For subclasses to add things to the long string
-    * 
+    *
     * @param builder the builder
     */
    protected void toLongString(StringBuilder builder)
    {
    }
-   
+
    @Override
    public String toString()
    {
@@ -923,7 +985,7 @@
 
    /**
     * Attempt to lock, but don't wait
-    * 
+    *
     * @return true when the lock was obtained
     */
    boolean attemptLock()
@@ -933,7 +995,7 @@
 
    /**
     * Lock
-    * 
+    *
     * This method must be invoked with the monitor held
     */
    void lock()
@@ -943,7 +1005,7 @@
 
    /**
     * Unlock
-    * 
+    *
     * @param rescheduleTasks whether to reschedule tasks
     */
    void unlock(boolean rescheduleTasks)
@@ -953,7 +1015,7 @@
 
    /**
     * Attempt to get the lock but don't wait
-    * 
+    *
     * @param trace whether trace is enabled
     * @return true when obtained the lock
     */
@@ -993,12 +1055,12 @@
 
       return result;
    }
-   
+
    /**
     * Acquire the lock on the classloader fairly<p>
     *
     * This must be invoked with the monitor held
-    * 
+    *
     * @param trace whether trace is enabled
     */
    private void acquireLockFairly(boolean trace)
@@ -1010,7 +1072,7 @@
       boolean interrupted = Thread.interrupted();
 
       int waits = 0;
-      
+
       try
       {
          while (true)
@@ -1045,14 +1107,14 @@
          if (interrupted)
             thread.interrupt();
       }
-      
+
       if (lock.getHoldCount() == 1)
          ClassLoaderManager.registerLoaderThread(this, thread);
    }
 
    /**
     * Unlock
-    * 
+    *
     * @param trace whether trace is enabled
     * @param rescheduleTasks whether to reschedule tasks
     */
@@ -1064,8 +1126,8 @@
 
       synchronized (this)
       {
-         lock.unlock();      
-      
+         lock.unlock();
+
          if (lock.getHoldCount() == 0)
          {
             ClassLoaderManager.unregisterLoaderThread(this, thread, rescheduleTasks);
@@ -1076,7 +1138,7 @@
    
    /**
     * Get the classloader for a class
-    * 
+    *
     * @param clazz the class
     * @return the classloader or null if it doesn't have one
     */
@@ -1085,7 +1147,7 @@
       SecurityManager sm = System.getSecurityManager();
       if (sm == null)
          return clazz.getClassLoader();
-      
+
       return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
       {
          public ClassLoader run()

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -466,6 +466,7 @@
     * @param urls the urls to add to
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    void getResources(BaseClassLoader classLoader, String name, Set<URL> urls, boolean allExports) throws IOException
    {
       boolean trace = log.isTraceEnabled();
@@ -761,6 +762,7 @@
     * @param trace whether trace is enabled
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    void getResourcesFromExports(BaseClassLoader classLoader, String name, Set<URL> urls, boolean trace) throws IOException
    {
       String packageName = ClassLoaderUtils.getResourcePackageName(name);
@@ -931,6 +933,7 @@
     * @param trace whether trace is enabled
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    void getResourcesFromImports(ClassLoaderInformation info, String name, Set<URL> urls, boolean trace) throws IOException
    {
       List<? extends DelegateLoader> delegates = info.getDelegates();
@@ -1037,6 +1040,7 @@
     * @param urls the urls to add to
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    protected abstract void beforeGetResources(String name,  Set<URL> urls) throws IOException;
    
    /**
@@ -1046,6 +1050,7 @@
     * @param urls the urls to add to
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    protected abstract void afterGetResources(String name, Set<URL> urls) throws IOException;
    
    /**
@@ -1136,6 +1141,7 @@
       return getResource(classLoader, name, false);
    }
    
+   // FindBugs: The Set doesn't use equals/hashCode
    public void getResources(String name, Set<URL> urls) throws IOException
    {
       getResources(null, name, urls, true);
@@ -1149,6 +1155,7 @@
     * @param urls the urls to add to
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    void getResources(BaseClassLoader classLoader, String name, Set<URL> urls) throws IOException
    {
       getResources(classLoader, name, urls, false);
@@ -1188,6 +1195,23 @@
    }
 
    /**
+    * Get the classloader policy associated with an object
+    * 
+    * @param object the  object
+    * @return the classloader policy or null if one is not associated
+    */
+   protected ClassLoaderPolicy getClassLoaderPolicy(Object object)
+   {
+      if (object instanceof BaseClassLoader)
+         return ((BaseClassLoader) object).getPolicy();
+      
+      if (object instanceof BaseClassLoaderSource)
+         return getClassLoaderPolicy(((BaseClassLoaderSource) object).getClassLoader());
+      
+      return null;
+   }
+   
+   /**
     * A long version of toString()
     * 
     * @return the long string

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderMBean.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderMBean.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderMBean.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -119,6 +119,7 @@
     * 
     * @return the loaded resources
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    Set<URL> listLoadedResources();
    
    /**
@@ -137,6 +138,7 @@
     * @return the resource urls
     * @throws IOException for any error
     */
+   // FindBugs: The Set doesn't use equals/hashCode
    Set<URL> loadResources(String name) throws IOException;
    
    /**

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -256,6 +256,16 @@
     * 
     * @return the domain
     */
+   protected ClassLoaderDomain getDomain()
+   {
+      return (ClassLoaderDomain) getClassLoaderDomain();
+   }
+   
+   /**
+    * Get the classloader domain
+    * 
+    * @return the domain
+    */
    BaseClassLoaderDomain getClassLoaderDomain()
    {
       return domain;
@@ -336,7 +346,7 @@
       log.debug(toString() + " shutdown!");
       BaseClassLoader classLoader = this.classLoader;
       this.classLoader = null;
-      TranslatorUtils.applyTranslatorsAtUnregister(getTranslators(), classLoader);
+      TranslatorUtils.applyTranslatorsAtUnregister(translators, classLoader);
       classLoader.shutdownClassLoader();
    }
    

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseDelegateLoader.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseDelegateLoader.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/base/BaseDelegateLoader.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -143,6 +143,7 @@
       return null;
    }
 
+   // FindBugs: The Set doesn't use equals/hashCode
    public void getResources(String name, Set<URL> urls) throws IOException
    {
       BaseClassLoader classLoader = getBaseClassLoader("getting resources ", name);

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/ClassFilter.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/ClassFilter.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/ClassFilter.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * Copyright 2009, 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.
  *
@@ -23,11 +23,6 @@
 
 import java.io.Serializable;
 
-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;
-
 /**
  * ClassFilter.
  * 
@@ -36,18 +31,6 @@
  */
 public interface ClassFilter extends Serializable
 {
-   /** Match evertything */
-   ClassFilter EVERYTHING = EverythingClassFilter.INSTANCE;
-
-   /** Match nothing */
-   ClassFilter NOTHING = NothingClassFilter.INSTANCE;
-
-   /** Match nothing */
-   ClassFilter NOTHING_BUT_JAVA = NothingButJavaClassFilter.INSTANCE;
-
-   /** Java Only */
-   ClassFilter JAVA_ONLY = JavaOnlyClassFilter.INSTANCE;
-   
    /** 
     * Whether the class name matches the filter
     * 

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/ClassFilterUtils.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/filter/ClassFilterUtils.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/ClassFilterUtils.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/ClassFilterUtils.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,124 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt 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.spi.filter;
+
+import java.util.List;
+
+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;
+
+/**
+ * ClassFilterUtils.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassFilterUtils
+{
+   /** Match evertything */
+   public static final ClassFilter EVERYTHING = EverythingClassFilter.INSTANCE;
+
+   /** Match nothing */
+   public static final ClassFilter NOTHING = NothingClassFilter.INSTANCE;
+
+   /** Match nothing */
+   public static final ClassFilter NOTHING_BUT_JAVA = NothingButJavaClassFilter.INSTANCE;
+
+   /** Java Only */
+   public static final ClassFilter JAVA_ONLY = JavaOnlyClassFilter.INSTANCE;
+
+   /**
+    * Create a package class filter<p>
+    * 
+    * Creates the filter from a comma seperated list
+    * 
+    * @param string the string
+    * @return the filter
+    */
+   public static PackageClassFilter createPackageClassFilterFromString(String string)
+   {
+      return PackageClassFilter.createPackageClassFilterFromString(string);
+   }
+   
+   /**
+    * Create a new package class filter
+    * 
+    * @param packageNames the package names
+    * @return the filter
+    * @throws IllegalArgumentException for null packageNames
+    */
+   public static PackageClassFilter createPackageClassFilter(String... packageNames)
+   {
+      return PackageClassFilter.createPackageClassFilter(packageNames);
+   }
+   
+   /**
+    * Create a new package class filter
+    * 
+    * @param packageNames the package names
+    * @return the filter
+    * @throws IllegalArgumentException for null packageNames
+    */
+   public static PackageClassFilter createPackageClassFilter(List<String> packageNames)
+   {
+      return PackageClassFilter.createPackageClassFilter(packageNames);
+   }
+
+   /**
+    * Create a recursive package class filter<p>
+    * 
+    * Creates the filter from a comma seperated list
+    * 
+    * @param string the string
+    * @return the filter
+    */
+   public static RecursivePackageClassFilter createRecursivePackageClassFilterFromString(String string)
+   {
+      return RecursivePackageClassFilter.createRecursivePackageClassFilterFromString(string);
+   }
+   
+   /**
+    * Create a new recursive package class filter
+    * 
+    * @param packageNames the package names
+    * @return the filter
+    * @throws IllegalArgumentException for null packageNames
+    */
+   public static RecursivePackageClassFilter createRecursivePackageClassFilter(String... packageNames)
+   {
+      return RecursivePackageClassFilter.createRecursivePackageClassFilter(packageNames);
+   }
+   
+   /**
+    * Create a new recursive package class filter
+    * 
+    * @param packageNames the package names
+    * @return the filter
+    * @throws IllegalArgumentException for null packageNames
+    */
+   public static RecursivePackageClassFilter createRecursivePackageClassFilter(List<String> packageNames)
+   {
+      return RecursivePackageClassFilter.createRecursivePackageClassFilter(packageNames);
+   }
+}

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -53,7 +53,7 @@
     */
    public FilteredDelegateLoader(ClassLoaderPolicy delegate)
    {
-      this(delegate, ClassFilter.EVERYTHING);
+      this(delegate, ClassFilterUtils.EVERYTHING);
    }
 
    /**
@@ -79,7 +79,7 @@
     */
    public FilteredDelegateLoader(ClassLoaderPolicyFactory factory)
    {
-      this(factory, ClassFilter.EVERYTHING);
+      this(factory, ClassFilterUtils.EVERYTHING);
    }
 
    /**
@@ -115,7 +115,7 @@
    protected void setFilter(ClassFilter filter)
    {
       if (filter == null)
-         this.filter = ClassFilter.EVERYTHING;
+         this.filter = ClassFilterUtils.EVERYTHING;
       else
          this.filter = filter;
    }
@@ -149,6 +149,7 @@
       return null;
    }
 
+   // FindBugs: The Set doesn't use equals/hashCode
    public void getResources(String name, Set<URL> urls) throws IOException
    {
       boolean trace = log.isTraceEnabled();

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/LazyFilteredDelegateLoader.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/LazyFilteredDelegateLoader.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/spi/filter/LazyFilteredDelegateLoader.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -40,7 +40,7 @@
     */
    public LazyFilteredDelegateLoader(ClassLoaderPolicyFactory factory)
    {
-      super(factory, ClassFilter.EVERYTHING);
+      super(factory, ClassFilterUtils.EVERYTHING);
    }
 
    @Override

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/test/support/IsolatedClassLoaderTestHelper.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/test/support/IsolatedClassLoaderTestHelper.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/test/support/IsolatedClassLoaderTestHelper.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -28,6 +28,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.StringTokenizer;
+import java.util.Arrays;
 
 import junit.extensions.TestSetup;
 import junit.framework.Test;
@@ -41,6 +42,7 @@
 import org.jboss.classloader.spi.Loader;
 import org.jboss.classloader.spi.ParentPolicy;
 import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.classloader.spi.filter.FilteredDelegateLoader;
 import org.jboss.classloader.spi.filter.PackageClassFilter;
 import org.jboss.logging.Logger;
@@ -164,8 +166,7 @@
       MockClassLoaderPolicy policy = new MockClassLoaderPolicy();
       Set<Class<?>> classes = new HashSet<Class<?>>();
       classes.add(clazz);
-      for (Class<?> c : packages)
-         classes.add(c);
+      classes.addAll(Arrays.asList(packages));
       policy.setImportAll(importAll);
       policy.setPathsAndPackageNames(classes.toArray(new Class[classes.size()]));
 
@@ -227,7 +228,7 @@
       // The parent filter
       PackageClassFilter filter = new PackageClassFilter(parentPackages);
       filter.setIncludeJava(true);
-      return initializeClassLoader(clazz, system, filter, ClassFilter.NOTHING, policy);
+      return initializeClassLoader(clazz, system, filter, ClassFilterUtils.NOTHING, policy);
    }
 
    /**
@@ -244,8 +245,7 @@
       MockClassLoaderPolicy policy = new MockClassLoaderPolicy();
       Set<Class<?>> classes = new HashSet<Class<?>>();
       classes.add(clazz);
-      for (Class<?> c : packages)
-         classes.add(c);
+      classes.addAll(Arrays.asList(packages));
       policy.setImportAll(importAll);
       policy.setPathsAndPackageNames(classes.toArray(new Class[classes.size()]));
       return initializeClassLoader(clazz, parentFilter, policy);
@@ -281,7 +281,7 @@
       PackageClassFilter filter = new PackageClassFilter(parentPkgs);
       filter.setIncludeJava(true);
       CombiningClassFilter beforeFilter = CombiningClassFilter.create(filter, parentFilter);
-      ParentPolicy parentPolicy = new ParentPolicy(beforeFilter, ClassFilter.NOTHING);
+      ParentPolicy parentPolicy = new ParentPolicy(beforeFilter, ClassFilterUtils.NOTHING);
       return initializeClassLoader(clazz, system, parentPolicy, policy);
    }
 

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/test/support/MockClassLoaderPolicy.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/test/support/MockClassLoaderPolicy.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/main/java/org/jboss/classloader/test/support/MockClassLoaderPolicy.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -389,6 +389,7 @@
    }
 
    @Override
+   // FindBugs: The Set doesn't use equals/hashCode
    public void getResources(String path, Set<URL> urls) throws IOException
    {
       if (paths == null)

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/ClassLoaderAllTestSuite.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/ClassLoaderAllTestSuite.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/ClassLoaderAllTestSuite.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -30,6 +30,7 @@
 import org.jboss.test.classloader.filter.FilterTestSuite;
 import org.jboss.test.classloader.jmx.JMXTestSuite;
 import org.jboss.test.classloader.junit.JUnitTestSuite;
+import org.jboss.test.classloader.notifications.ClassLoaderNotificationsTestSuite;
 import org.jboss.test.classloader.old.OldTestSuite;
 import org.jboss.test.classloader.policy.test.ClassLoaderPolicyUnitTestCase;
 import org.jboss.test.classloader.resources.ResourceTestSuite;
@@ -75,6 +76,7 @@
       suite.addTest(JMXTestSuite.suite());
       suite.addTest(JUnitTestSuite.suite());
       suite.addTest(TransformTestSuite.suite());
+      suite.addTest(ClassLoaderNotificationsTestSuite.suite());
 
       return suite;
    }

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/delegate/test/DelegateLoaderUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/delegate/test/DelegateLoaderUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/delegate/test/DelegateLoaderUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -26,7 +26,7 @@
 import org.jboss.classloader.plugins.ClassLoaderUtils;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloader.spi.DelegateLoader;
-import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.classloader.spi.filter.FilteredDelegateLoader;
 import org.jboss.classloader.spi.filter.LazyFilteredDelegateLoader;
 import org.jboss.classloader.test.support.MockClassLoaderPolicy;
@@ -73,7 +73,7 @@
       policy.setPathsAndPackageNames(TestA1.class);
       system.registerClassLoaderPolicy(policy);
       
-      FilteredDelegateLoader delegate = new FilteredDelegateLoader(policy, ClassFilter.NOTHING);
+      FilteredDelegateLoader delegate = new FilteredDelegateLoader(policy, ClassFilterUtils.NOTHING);
       assertLoadClassFail(TestA1.class, delegate);
    }
    

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -23,18 +23,21 @@
 
 import java.util.HashSet;
 import java.util.Set;
+
 import javax.management.MBeanRegistration;
 
 import junit.framework.Test;
 
 import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloader.spi.ClassFoundHandler;
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderDomainMBean;
 import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloader.spi.ClassNotFoundHandler;
 import org.jboss.classloader.spi.Loader;
 import org.jboss.classloader.spi.ParentPolicy;
 import org.jboss.classloader.spi.base.BaseClassLoaderDomain;
-import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.classloader.test.support.MockClassLoaderPolicy;
 import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
 import org.jboss.test.classloader.domain.support.MockLoader;
@@ -118,7 +121,7 @@
       ClassLoaderSystem system = createClassLoaderSystem();
       MockLoader loader = new MockLoader();
       NoMatchClassFilter filter = new NoMatchClassFilter(MockLoader.class);
-      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilter.NOTHING);
+      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilterUtils.NOTHING);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy, loader);
       
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
@@ -158,7 +161,7 @@
       ClassLoader classLoader = system.registerClassLoaderPolicy(domain, policy);
       
       assertLoadClass(ClassLoaderDomain.class, classLoader);
-      checkGetResource(loader, ClassLoaderDomain.class, BaseClassLoaderDomain.class, ClassLoaderDomainMBean.class, MBeanRegistration.class, Loader.class, Object.class);
+      checkGetResource(loader, ClassLoaderDomain.class, BaseClassLoaderDomain.class, ClassLoaderDomainMBean.class, MBeanRegistration.class, Loader.class, ClassNotFoundHandler.class, ClassFoundHandler.class, Object.class);
       checkLoadClass(loader);
    }
    
@@ -198,7 +201,7 @@
       ClassLoaderSystem system = createClassLoaderSystem();
       MockLoader loader = new MockLoader();
       NoMatchClassFilter filter = new NoMatchClassFilter(MockLoader.class);
-      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilter.NOTHING);
+      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilterUtils.NOTHING);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy, loader);
       domain.setUseLoadClassForParent(false);
       

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/HierarchicalParentClassLoaderUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/HierarchicalParentClassLoaderUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/HierarchicalParentClassLoaderUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -28,7 +28,7 @@
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloader.spi.Loader;
 import org.jboss.classloader.spi.ParentPolicy;
-import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.classloader.test.support.MockClassLoaderPolicy;
 import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
 import org.jboss.test.classloader.domain.support.MockLoader;
@@ -142,7 +142,7 @@
    {
       ClassLoaderSystem system = createClassLoaderSystem();
       NoMatchClassFilter filter = new NoMatchClassFilter(MockLoader.class);
-      ParentPolicy pp = new ParentPolicy(filter, ClassFilter.NOTHING);
+      ParentPolicy pp = new ParentPolicy(filter, ClassFilterUtils.NOTHING);
       ClassLoaderDomain parent = system.createAndRegisterDomain("parent", ParentPolicy.BEFORE_BUT_JAVA_ONLY);
       
       MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy();
@@ -257,7 +257,7 @@
    {
       ClassLoaderSystem system = createClassLoaderSystem();
       NoMatchClassFilter filter = new NoMatchClassFilter(MockLoader.class);
-      ParentPolicy pp = new ParentPolicy(filter, ClassFilter.NOTHING);
+      ParentPolicy pp = new ParentPolicy(filter, ClassFilterUtils.NOTHING);
       ClassLoaderDomain parent = system.createAndRegisterDomain("parent", ParentPolicy.BEFORE_BUT_JAVA_ONLY);
       
       MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy();

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/HierarchicalParentLoaderUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/HierarchicalParentLoaderUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/HierarchicalParentLoaderUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -27,7 +27,7 @@
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloader.spi.Loader;
 import org.jboss.classloader.spi.ParentPolicy;
-import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.classloader.test.support.MockClassLoaderPolicy;
 import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
 import org.jboss.test.classloader.domain.support.MockLoader;
@@ -128,7 +128,7 @@
    {
       ClassLoaderSystem system = createClassLoaderSystem();
       NoMatchClassFilter filter = new NoMatchClassFilter(MockLoader.class);
-      ParentPolicy pp = new ParentPolicy(filter, ClassFilter.NOTHING);
+      ParentPolicy pp = new ParentPolicy(filter, ClassFilterUtils.NOTHING);
       ClassLoaderDomain parent = system.createAndRegisterDomain("parent", ParentPolicy.BEFORE_BUT_JAVA_ONLY);
       ClassLoaderDomain child = system.createAndRegisterDomain("child", pp, parent);
       

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/ParentPolicyUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/ParentPolicyUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/domain/test/ParentPolicyUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -28,7 +28,7 @@
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloader.spi.ParentPolicy;
-import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.classloader.spi.filter.PackageClassFilter;
 import org.jboss.classloader.test.support.MockClassLoaderPolicy;
 import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
@@ -198,7 +198,7 @@
    {
       ClassLoaderSystem system = createClassLoaderSystem();
       NoMatchClassFilter filter = new NoMatchClassFilter(ClassLoaderDomain.class);
-      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilter.NOTHING);
+      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilterUtils.NOTHING);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy, null);
       
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
@@ -215,7 +215,7 @@
    {
       ClassLoaderSystem system = createClassLoaderSystem();
       MatchClassFilter filter = new MatchClassFilter(ClassLoaderDomain.class);
-      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilter.NOTHING);
+      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilterUtils.NOTHING);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy, null);
       
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
@@ -232,7 +232,7 @@
    {
       ClassLoaderSystem system = createClassLoaderSystem();
       NoMatchClassFilter filter = new NoMatchClassFilter(ClassLoaderDomain.class);
-      ParentPolicy parentPolicy = new ParentPolicy(ClassFilter.JAVA_ONLY, filter);
+      ParentPolicy parentPolicy = new ParentPolicy(ClassFilterUtils.JAVA_ONLY, filter);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy, null);
       
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
@@ -249,7 +249,7 @@
    {
       ClassLoaderSystem system = createClassLoaderSystem();
       NoMatchClassFilter filter = new NoMatchClassFilter(ClassLoaderDomain.class);
-      ParentPolicy parentPolicy = new ParentPolicy(ClassFilter.JAVA_ONLY, filter);
+      ParentPolicy parentPolicy = new ParentPolicy(ClassFilterUtils.JAVA_ONLY, filter);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy, null);
       
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
@@ -264,7 +264,7 @@
    {
       ClassLoaderSystem system = createClassLoaderSystem();
       MatchClassFilter filter = new MatchClassFilter(ClassLoaderDomain.class);
-      ParentPolicy parentPolicy = new ParentPolicy(ClassFilter.JAVA_ONLY, filter);
+      ParentPolicy parentPolicy = new ParentPolicy(ClassFilterUtils.JAVA_ONLY, filter);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy, null);
       
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
@@ -279,7 +279,7 @@
    public void testNoMatchBeforeAndAfter() throws Exception
    {
       ClassLoaderSystem system = createClassLoaderSystem();
-      ParentPolicy parentPolicy = new ParentPolicy(ClassFilter.NOTHING, ClassFilter.NOTHING);
+      ParentPolicy parentPolicy = new ParentPolicy(ClassFilterUtils.NOTHING, ClassFilterUtils.NOTHING);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy, null);
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
       ClassLoader classLoader = system.registerClassLoaderPolicy(domain, policy);
@@ -290,7 +290,7 @@
    {
       ClassLoaderSystem system = createClassLoaderSystem();
       PackageClassFilter filter = PackageClassFilter.createPackageClassFilter("dummy");
-      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilter.NOTHING);
+      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilterUtils.NOTHING);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy, null);
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
       ClassLoader classLoader = system.registerClassLoaderPolicy(domain, policy);
@@ -302,7 +302,7 @@
       ClassLoaderSystem system = createClassLoaderSystem();
       PackageClassFilter filter = PackageClassFilter.createPackageClassFilter("dummy");
       filter.setIncludeJava(true);
-      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilter.NOTHING);
+      ParentPolicy parentPolicy = new ParentPolicy(filter, ClassFilterUtils.NOTHING);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy, null);
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
       ClassLoader classLoader = system.registerClassLoaderPolicy(domain, policy);

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -24,6 +24,7 @@
 import junit.framework.Test;
 
 import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
 
 /**
@@ -46,7 +47,7 @@
    
    public void testEverything() throws Exception
    {
-      ClassFilter filter = ClassFilter.EVERYTHING;
+      ClassFilter filter = ClassFilterUtils.EVERYTHING;
       assertFilterMatchesClassName("gibberish", filter);
       assertFilterMatchesClassName("", filter);
       assertFilterMatchesClassName(null, filter);
@@ -60,7 +61,7 @@
    
    public void testNothing() throws Exception
    {
-      ClassFilter filter = ClassFilter.NOTHING;
+      ClassFilter filter = ClassFilterUtils.NOTHING;
       assertFilterNoMatchClassName("gibberish", filter);
       assertFilterNoMatchClassName("", filter);
       assertFilterNoMatchClassName(null, filter);
@@ -74,7 +75,7 @@
    
    public void testJavaOnly() throws Exception
    {
-      ClassFilter filter = ClassFilter.JAVA_ONLY;
+      ClassFilter filter = ClassFilterUtils.JAVA_ONLY;
       assertFilterMatchesClassName("java.x", filter);
       assertFilterMatchesClassName("java.lang.Object", filter);
       assertFilterMatchesClassName("java.lang.ref.Method", filter);

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications (from rev 98000, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications)

Deleted: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/ClassLoaderNotificationsTestSuite.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/ClassLoaderNotificationsTestSuite.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/ClassLoaderNotificationsTestSuite.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,65 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, 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.test.classloader.notifications;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import org.jboss.test.classloader.notifications.test.ClassFoundHandlerUnitTestCase;
-import org.jboss.test.classloader.notifications.test.ClassLoaderEventHandlerUnitTestCase;
-import org.jboss.test.classloader.notifications.test.ClassNotFoundHandlerUnitTestCase;
-
-/**
- * Notifications Test Suite.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 37459 $
- */
-public class ClassLoaderNotificationsTestSuite extends TestSuite
-{
-   /**
-    * For running the testsuite from the command line
-    * 
-    * @param args the command line args
-    */
-   public static void main(String[] args)
-   {
-      TestRunner.run(suite());
-   }
-
-   /**
-    * Create the testsuite
-    * 
-    * @return the testsuite
-    */
-   public static Test suite()
-   {
-      TestSuite suite = new TestSuite("Notifications Tests");
-
-      suite.addTest(ClassLoaderEventHandlerUnitTestCase.suite());
-      suite.addTest(ClassNotFoundHandlerUnitTestCase.suite());
-      suite.addTest(ClassFoundHandlerUnitTestCase.suite());
-      
-      return suite;
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/ClassLoaderNotificationsTestSuite.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/ClassLoaderNotificationsTestSuite.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/ClassLoaderNotificationsTestSuite.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/ClassLoaderNotificationsTestSuite.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,65 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, 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.test.classloader.notifications;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+import org.jboss.test.classloader.notifications.test.ClassFoundHandlerUnitTestCase;
+import org.jboss.test.classloader.notifications.test.ClassLoaderEventHandlerUnitTestCase;
+import org.jboss.test.classloader.notifications.test.ClassNotFoundHandlerUnitTestCase;
+
+/**
+ * Notifications Test Suite.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 37459 $
+ */
+public class ClassLoaderNotificationsTestSuite extends TestSuite
+{
+   /**
+    * For running the testsuite from the command line
+    * 
+    * @param args the command line args
+    */
+   public static void main(String[] args)
+   {
+      TestRunner.run(suite());
+   }
+
+   /**
+    * Create the testsuite
+    * 
+    * @return the testsuite
+    */
+   public static Test suite()
+   {
+      TestSuite suite = new TestSuite("Notifications Tests");
+
+      suite.addTest(ClassLoaderEventHandlerUnitTestCase.suite());
+      suite.addTest(ClassNotFoundHandlerUnitTestCase.suite());
+      suite.addTest(ClassFoundHandlerUnitTestCase.suite());
+      
+      return suite;
+   }
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support (from rev 98000, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/support)

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a (from rev 98000, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a)

Deleted: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/A.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/A.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/A.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,32 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, 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.test.classloader.notifications.support.a;
-
-/**
- * A.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class A
-{
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/A.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/A.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/A.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/support/a/A.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.test.classloader.notifications.support.a;
+
+/**
+ * A.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class A
+{
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test (from rev 98000, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/test)

Deleted: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassFoundHandlerUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassFoundHandlerUnitTestCase.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassFoundHandlerUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,286 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, 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.test.classloader.notifications.test;
-
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import junit.framework.Test;
-
-import org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter;
-import org.jboss.classloader.spi.ClassFoundEvent;
-import org.jboss.classloader.spi.ClassFoundHandler;
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloader.spi.ParentPolicy;
-import org.jboss.classloader.test.support.MockClassLoaderPolicy;
-import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
-import org.jboss.test.classloader.notifications.support.a.A;
-
-/**
- * ClassFoundHnadlerUnitTestCase
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class ClassFoundHandlerUnitTestCase extends AbstractClassLoaderTestWithSecurity implements ClassFoundHandler
-{
-   public static Test suite()
-   {
-      return suite(ClassFoundHandlerUnitTestCase.class);
-   }
-
-   public ClassFoundHandlerUnitTestCase(String name)
-   {
-      super(name);
-   }
-   
-   List<ClassFoundEvent> events = new CopyOnWriteArrayList<ClassFoundEvent>();
-   
-   public void classFound(ClassFoundEvent event)
-   {
-      events.add(event);
-   }
-
-   public void testClassFoundHandlerPolicy() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setPathsAndPackageNames(A.class);
-      policy.addClassFoundHandler(this);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      assertLoadClass(A.class, cl);
-      assertLoadClassNoEvent(A.class, cl);
-   }
-
-   public void testClassFoundHandlerDomain() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain = system.getDefaultDomain();
-      domain.addClassFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setPathsAndPackageNames(A.class);
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      assertLoadClass(A.class, cl);
-      assertLoadClassNoEvent(A.class, cl);
-   }
-
-   public void testClassFoundHandlerParentDomain() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
-      defaultDomain.addClassFoundHandler(this);
-
-      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
-      parentPolicy.setPathsAndPackageNames(A.class);
-      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      assertLoadClass(A.class, cl, parentCl);
-      assertLoadClassNoEvent(A.class, cl, parentCl);
-   }
-
-   public void testClassFoundHandlerParentClassLoader() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-      defaultDomain.addClassFoundHandler(this);
-
-      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
-      parentPolicy.setPathsAndPackageNames(A.class);
-      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
-
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
-      domain.setUseLoadClassForParent(false);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      assertLoadClass(A.class, cl, parentCl);
-      assertLoadClassNoEvent(A.class, cl, parentCl);
-   }
-
-   public void testClassFoundHandlerSystem() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      system.addClassFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setPathsAndPackageNames(A.class);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      assertLoadClass(A.class, cl);
-      assertLoadClassNoEvent(A.class, cl);
-   }
-
-   public void testClassFoundHandlerPolicyNoEvent() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setPathsAndPackageNames(A.class);
-      policy.addClassFoundHandler(this);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      assertLoadClassFail("does.not.exist.Class", cl);
-   }
-
-   public void testClassFoundHandlerDomainNoEvent() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain = system.getDefaultDomain();
-      domain.addClassFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setPathsAndPackageNames(A.class);
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      assertLoadClassFail("does.not.exist.Class", cl);
-   }
-
-   public void testClassFoundHandlerParentDomainNoEvent() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
-      defaultDomain.addClassFoundHandler(this);
-
-      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
-      parentPolicy.setPathsAndPackageNames(A.class);
-      system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      assertLoadClassFail("does.not.exist.Class", cl);
-   }
-
-   public void testClassFoundHandlerParentClassLoaderNoEvent() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-      defaultDomain.addClassFoundHandler(this);
-
-      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
-      parentPolicy.setPathsAndPackageNames(A.class);
-      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
-
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
-      domain.setUseLoadClassForParent(false);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      assertLoadClassFail("does.not.exist.Class", cl);
-   }
-
-   public void testClassFoundHandlerSystemNoEvent() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      system.addClassFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setPathsAndPackageNames(A.class);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      assertLoadClassFail("does.not.exist.Class", cl);
-   }
-
-   public void testClassFoundHandlerWrongPolicy() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      policy.addClassFoundHandler(this);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
-      a.setPathsAndPackageNames(A.class);
-      ClassLoader clA = system.registerClassLoaderPolicy(a);
-
-      assertLoadClassNoEvent(A.class, cl, clA);
-   }
-
-   public void testClassFoundHandlerDifferentPolicy() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
-      a.setPathsAndPackageNames(A.class);
-      a.addClassFoundHandler(this);
-      ClassLoader clA = system.registerClassLoaderPolicy(a);
-
-      assertLoadClass(A.class, cl, clA);
-      assertLoadClassNoEvent(A.class, cl, clA);
-   }
-
-   protected Class<?> assertLoadClassNoEvent(Class<?> reference, ClassLoader start)
-   {
-      return assertLoadClass(reference, start, start);
-   }
-
-   protected Class<?> assertLoadClassNoEvent(Class<?> reference, ClassLoader start, ClassLoader expected)
-   {
-      Class<?> result = super.assertLoadClass(reference, start, expected);
-      assertNoEvent();
-      return result;
-   }
-
-   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, ClassLoader expected)
-   {
-      Class<?> result = super.assertLoadClass(reference, start, expected);
-      assertEvent(reference.getName(), expected);
-      return result;
-   }
-
-   protected void assertLoadClassFail(String name, ClassLoader start)
-   {
-      super.assertLoadClassFail(name, start);
-      assertNoEvent();
-   }
-
-   protected void assertEvent(String name, ClassLoader expected)
-   {
-      assertTrue("Expected an event", events.isEmpty() == false);
-      ClassFoundEvent event = events.remove(0);
-      assertEquals(name, event.getClassName());
-      assertEquals(expected, event.getClassLoader());
-      assertEquals(expected, event.getSource());
-   }
-
-   protected void assertNoEvent()
-   {
-      assertTrue("Expected no events: " + events, events.isEmpty());
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassFoundHandlerUnitTestCase.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassFoundHandlerUnitTestCase.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassFoundHandlerUnitTestCase.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassFoundHandlerUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,286 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, 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.test.classloader.notifications.test;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import junit.framework.Test;
+
+import org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter;
+import org.jboss.classloader.spi.ClassFoundEvent;
+import org.jboss.classloader.spi.ClassFoundHandler;
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloader.test.support.MockClassLoaderPolicy;
+import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
+import org.jboss.test.classloader.notifications.support.a.A;
+
+/**
+ * ClassFoundHnadlerUnitTestCase
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassFoundHandlerUnitTestCase extends AbstractClassLoaderTestWithSecurity implements ClassFoundHandler
+{
+   public static Test suite()
+   {
+      return suite(ClassFoundHandlerUnitTestCase.class);
+   }
+
+   public ClassFoundHandlerUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   List<ClassFoundEvent> events = new CopyOnWriteArrayList<ClassFoundEvent>();
+   
+   public void classFound(ClassFoundEvent event)
+   {
+      events.add(event);
+   }
+
+   public void testClassFoundHandlerPolicy() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setPathsAndPackageNames(A.class);
+      policy.addClassFoundHandler(this);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      assertLoadClass(A.class, cl);
+      assertLoadClassNoEvent(A.class, cl);
+   }
+
+   public void testClassFoundHandlerDomain() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain = system.getDefaultDomain();
+      domain.addClassFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setPathsAndPackageNames(A.class);
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      assertLoadClass(A.class, cl);
+      assertLoadClassNoEvent(A.class, cl);
+   }
+
+   public void testClassFoundHandlerParentDomain() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
+      defaultDomain.addClassFoundHandler(this);
+
+      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
+      parentPolicy.setPathsAndPackageNames(A.class);
+      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      assertLoadClass(A.class, cl, parentCl);
+      assertLoadClassNoEvent(A.class, cl, parentCl);
+   }
+
+   public void testClassFoundHandlerParentClassLoader() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+      defaultDomain.addClassFoundHandler(this);
+
+      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
+      parentPolicy.setPathsAndPackageNames(A.class);
+      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
+
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
+      domain.setUseLoadClassForParent(false);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      assertLoadClass(A.class, cl, parentCl);
+      assertLoadClassNoEvent(A.class, cl, parentCl);
+   }
+
+   public void testClassFoundHandlerSystem() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      system.addClassFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setPathsAndPackageNames(A.class);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      assertLoadClass(A.class, cl);
+      assertLoadClassNoEvent(A.class, cl);
+   }
+
+   public void testClassFoundHandlerPolicyNoEvent() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setPathsAndPackageNames(A.class);
+      policy.addClassFoundHandler(this);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      assertLoadClassFail("does.not.exist.Class", cl);
+   }
+
+   public void testClassFoundHandlerDomainNoEvent() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain = system.getDefaultDomain();
+      domain.addClassFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setPathsAndPackageNames(A.class);
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      assertLoadClassFail("does.not.exist.Class", cl);
+   }
+
+   public void testClassFoundHandlerParentDomainNoEvent() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
+      defaultDomain.addClassFoundHandler(this);
+
+      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
+      parentPolicy.setPathsAndPackageNames(A.class);
+      system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      assertLoadClassFail("does.not.exist.Class", cl);
+   }
+
+   public void testClassFoundHandlerParentClassLoaderNoEvent() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+      defaultDomain.addClassFoundHandler(this);
+
+      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
+      parentPolicy.setPathsAndPackageNames(A.class);
+      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
+
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
+      domain.setUseLoadClassForParent(false);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      assertLoadClassFail("does.not.exist.Class", cl);
+   }
+
+   public void testClassFoundHandlerSystemNoEvent() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      system.addClassFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setPathsAndPackageNames(A.class);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      assertLoadClassFail("does.not.exist.Class", cl);
+   }
+
+   public void testClassFoundHandlerWrongPolicy() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      policy.addClassFoundHandler(this);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
+      a.setPathsAndPackageNames(A.class);
+      ClassLoader clA = system.registerClassLoaderPolicy(a);
+
+      assertLoadClassNoEvent(A.class, cl, clA);
+   }
+
+   public void testClassFoundHandlerDifferentPolicy() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
+      a.setPathsAndPackageNames(A.class);
+      a.addClassFoundHandler(this);
+      ClassLoader clA = system.registerClassLoaderPolicy(a);
+
+      assertLoadClass(A.class, cl, clA);
+      assertLoadClassNoEvent(A.class, cl, clA);
+   }
+
+   protected Class<?> assertLoadClassNoEvent(Class<?> reference, ClassLoader start)
+   {
+      return assertLoadClass(reference, start, start);
+   }
+
+   protected Class<?> assertLoadClassNoEvent(Class<?> reference, ClassLoader start, ClassLoader expected)
+   {
+      Class<?> result = super.assertLoadClass(reference, start, expected);
+      assertNoEvent();
+      return result;
+   }
+
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, ClassLoader expected)
+   {
+      Class<?> result = super.assertLoadClass(reference, start, expected);
+      assertEvent(reference.getName(), expected);
+      return result;
+   }
+
+   protected void assertLoadClassFail(String name, ClassLoader start)
+   {
+      super.assertLoadClassFail(name, start);
+      assertNoEvent();
+   }
+
+   protected void assertEvent(String name, ClassLoader expected)
+   {
+      assertTrue("Expected an event", events.isEmpty() == false);
+      ClassFoundEvent event = events.remove(0);
+      assertEquals(name, event.getClassName());
+      assertEquals(expected, event.getClassLoader());
+      assertEquals(expected, event.getSource());
+   }
+
+   protected void assertNoEvent()
+   {
+      assertTrue("Expected no events: " + events, events.isEmpty());
+   }
+}

Deleted: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassLoaderEventHandlerUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassLoaderEventHandlerUnitTestCase.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassLoaderEventHandlerUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,186 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, 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.test.classloader.notifications.test;
-
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import junit.framework.Test;
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderEvent;
-import org.jboss.classloader.spi.ClassLoaderEventHandler;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloader.test.support.MockClassLoaderPolicy;
-import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
-
-/**
- * ClassFoundHnadlerUnitTestCase
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class ClassLoaderEventHandlerUnitTestCase extends AbstractClassLoaderTestWithSecurity implements ClassLoaderEventHandler
-{
-   public static Test suite()
-   {
-      return suite(ClassLoaderEventHandlerUnitTestCase.class);
-   }
-
-   public ClassLoaderEventHandlerUnitTestCase(String name)
-   {
-      super(name);
-   }
-   
-   List<ClassLoaderEvent> registered = new CopyOnWriteArrayList<ClassLoaderEvent>();
-   List<ClassLoaderEvent> unregistered = new CopyOnWriteArrayList<ClassLoaderEvent>();
-   
-   public void fireRegisterClassLoader(ClassLoaderEvent event)
-   {
-      registered.add(event);
-   }
-   
-   public void fireUnregisterClassLoader(ClassLoaderEvent event)
-   {
-      unregistered.add(event);
-   }
-
-   public void testClassLoaderEventDomain() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain = system.getDefaultDomain();
-      domain.addClassLoaderEventHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      assertRegistered(domain, cl);
-      
-      system.unregisterClassLoader(cl);
-      assertUnregistered(domain, cl);
-   }
-
-   public void testClassLoaderEventSystem() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain = system.getDefaultDomain();
-      system.addClassLoaderEventHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      assertRegistered(domain, cl);
-      
-      system.unregisterClassLoader(cl);
-      assertUnregistered(domain, cl);
-   }
-
-   public void testClassLoaderEventWrongDomain() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain1 = system.createAndRegisterDomain("Domain1");
-      ClassLoaderDomain domain2 = system.createAndRegisterDomain("Domain2");
-      domain1.addClassLoaderEventHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain2, policy);
-
-      assertNoRegistered();
-      
-      system.unregisterClassLoader(cl);
-      assertNoUnregistered();
-   }
-
-   public void testClassLoaderEventCorrectDomain() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      system.createAndRegisterDomain("Domain1");
-      ClassLoaderDomain domain2 = system.createAndRegisterDomain("Domain2");
-      domain2.addClassLoaderEventHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain2, policy);
-
-      assertRegistered(domain2, cl);
-      
-      system.unregisterClassLoader(cl);
-      assertUnregistered(domain2, cl);
-   }
-
-   public void testClassLoaderEventShutdownDomain() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain = system.getDefaultDomain();
-      domain.addClassLoaderEventHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      assertRegistered(domain, cl);
-      
-      system.shutdown();
-      assertUnregistered(domain, cl);
-   }
-
-   public void testClassLoaderEventShutdownSystem() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain = system.getDefaultDomain();
-      system.addClassLoaderEventHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      assertRegistered(domain, cl);
-      
-      system.shutdown();
-      assertUnregistered(domain, cl);
-   }
-
-   protected void assertRegistered(ClassLoaderDomain domain, ClassLoader expected)
-   {
-      assertTrue("Expected a registered", registered.isEmpty() == false);
-      ClassLoaderEvent event = registered.remove(0);
-      assertEquals(domain, event.getClassLoaderDomain());
-      assertEquals(domain, event.getSource());
-      assertEquals(expected, event.getClassLoader());
-   }
-
-   protected void assertNoRegistered()
-   {
-      assertTrue("Expected no registered: " + registered, registered.isEmpty());
-   }
-
-   protected void assertUnregistered(ClassLoaderDomain domain, ClassLoader expected)
-   {
-      assertTrue("Expected an unregistered", unregistered.isEmpty() == false);
-      ClassLoaderEvent event = unregistered.remove(0);
-      assertEquals(domain, event.getClassLoaderDomain());
-      assertEquals(domain, event.getSource());
-      assertEquals(expected, event.getClassLoader());
-   }
-
-   protected void assertNoUnregistered()
-   {
-      assertTrue("Expected no unregistered: " + unregistered, unregistered.isEmpty());
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassLoaderEventHandlerUnitTestCase.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassLoaderEventHandlerUnitTestCase.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassLoaderEventHandlerUnitTestCase.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassLoaderEventHandlerUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,186 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, 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.test.classloader.notifications.test;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import junit.framework.Test;
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderEvent;
+import org.jboss.classloader.spi.ClassLoaderEventHandler;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloader.test.support.MockClassLoaderPolicy;
+import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
+
+/**
+ * ClassFoundHnadlerUnitTestCase
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassLoaderEventHandlerUnitTestCase extends AbstractClassLoaderTestWithSecurity implements ClassLoaderEventHandler
+{
+   public static Test suite()
+   {
+      return suite(ClassLoaderEventHandlerUnitTestCase.class);
+   }
+
+   public ClassLoaderEventHandlerUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   List<ClassLoaderEvent> registered = new CopyOnWriteArrayList<ClassLoaderEvent>();
+   List<ClassLoaderEvent> unregistered = new CopyOnWriteArrayList<ClassLoaderEvent>();
+   
+   public void fireRegisterClassLoader(ClassLoaderEvent event)
+   {
+      registered.add(event);
+   }
+   
+   public void fireUnregisterClassLoader(ClassLoaderEvent event)
+   {
+      unregistered.add(event);
+   }
+
+   public void testClassLoaderEventDomain() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain = system.getDefaultDomain();
+      domain.addClassLoaderEventHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      assertRegistered(domain, cl);
+      
+      system.unregisterClassLoader(cl);
+      assertUnregistered(domain, cl);
+   }
+
+   public void testClassLoaderEventSystem() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain = system.getDefaultDomain();
+      system.addClassLoaderEventHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      assertRegistered(domain, cl);
+      
+      system.unregisterClassLoader(cl);
+      assertUnregistered(domain, cl);
+   }
+
+   public void testClassLoaderEventWrongDomain() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain1 = system.createAndRegisterDomain("Domain1");
+      ClassLoaderDomain domain2 = system.createAndRegisterDomain("Domain2");
+      domain1.addClassLoaderEventHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain2, policy);
+
+      assertNoRegistered();
+      
+      system.unregisterClassLoader(cl);
+      assertNoUnregistered();
+   }
+
+   public void testClassLoaderEventCorrectDomain() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      system.createAndRegisterDomain("Domain1");
+      ClassLoaderDomain domain2 = system.createAndRegisterDomain("Domain2");
+      domain2.addClassLoaderEventHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain2, policy);
+
+      assertRegistered(domain2, cl);
+      
+      system.unregisterClassLoader(cl);
+      assertUnregistered(domain2, cl);
+   }
+
+   public void testClassLoaderEventShutdownDomain() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain = system.getDefaultDomain();
+      domain.addClassLoaderEventHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      assertRegistered(domain, cl);
+      
+      system.shutdown();
+      assertUnregistered(domain, cl);
+   }
+
+   public void testClassLoaderEventShutdownSystem() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain = system.getDefaultDomain();
+      system.addClassLoaderEventHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      assertRegistered(domain, cl);
+      
+      system.shutdown();
+      assertUnregistered(domain, cl);
+   }
+
+   protected void assertRegistered(ClassLoaderDomain domain, ClassLoader expected)
+   {
+      assertTrue("Expected a registered", registered.isEmpty() == false);
+      ClassLoaderEvent event = registered.remove(0);
+      assertEquals(domain, event.getClassLoaderDomain());
+      assertEquals(domain, event.getSource());
+      assertEquals(expected, event.getClassLoader());
+   }
+
+   protected void assertNoRegistered()
+   {
+      assertTrue("Expected no registered: " + registered, registered.isEmpty());
+   }
+
+   protected void assertUnregistered(ClassLoaderDomain domain, ClassLoader expected)
+   {
+      assertTrue("Expected an unregistered", unregistered.isEmpty() == false);
+      ClassLoaderEvent event = unregistered.remove(0);
+      assertEquals(domain, event.getClassLoaderDomain());
+      assertEquals(domain, event.getSource());
+      assertEquals(expected, event.getClassLoader());
+   }
+
+   protected void assertNoUnregistered()
+   {
+      assertTrue("Expected no unregistered: " + unregistered, unregistered.isEmpty());
+   }
+}

Deleted: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassNotFoundHandlerUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassNotFoundHandlerUnitTestCase.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassNotFoundHandlerUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,484 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, 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.test.classloader.notifications.test;
-
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import junit.framework.Test;
-
-import org.jboss.classloader.plugins.ClassLoaderUtils;
-import org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter;
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderPolicy;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloader.spi.ClassNotFoundEvent;
-import org.jboss.classloader.spi.ClassNotFoundHandler;
-import org.jboss.classloader.spi.ParentPolicy;
-import org.jboss.classloader.test.support.MockClassLoaderPolicy;
-import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
-import org.jboss.test.classloader.notifications.support.a.A;
-
-/**
- * ClassNotFoundHnadlerUnitTestCase
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class ClassNotFoundHandlerUnitTestCase extends AbstractClassLoaderTestWithSecurity implements ClassNotFoundHandler
-{
-   public static Test suite()
-   {
-      return suite(ClassNotFoundHandlerUnitTestCase.class);
-   }
-
-   public ClassNotFoundHandlerUnitTestCase(String name)
-   {
-      super(name);
-   }
-   
-   List<ClassNotFoundEvent> events = new CopyOnWriteArrayList<ClassNotFoundEvent>();
-   
-   RegisterClassLoader runnable = null;
-   
-   public boolean classNotFound(ClassNotFoundEvent event)
-   {
-      events.add(event);
-
-      if (runnable != null)
-      {
-         runnable.run();
-         return true;
-      }
-      return false;
-   }
-
-   public void testClassNotFoundHandlerPolicy() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.addClassNotFoundHandler(this);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-   }
-
-   public void testClassNotFoundHandlerDomain() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain = system.getDefaultDomain();
-      domain.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-   }
-
-   public void testClassNotFoundHandlerSystem() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      system.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-   }
-
-   public void testClassNotFoundHandlerParentDomain() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
-      domain.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-   }
-
-   public void testClassNotFoundHandlerParentClassLoader() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-
-      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
-      parentPolicy.addClassNotFoundHandler(this);
-      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
-
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
-      domain.setUseLoadClassForParent(false);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-   }
-
-   public void testClassNotFoundHandlerPolicyNoEvent() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      policy.addClassNotFoundHandler(this);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
-      a.setPathsAndPackageNames(A.class);
-      ClassLoader expected = system.registerClassLoaderPolicy(a);
-
-      assertLoadClassNoEvent(A.class, cl, expected);
-   }
-
-   public void testClassNotFoundHandlerDomainNoEvent() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain = system.getDefaultDomain();
-      domain.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
-      a.setPathsAndPackageNames(A.class);
-      ClassLoader expected = system.registerClassLoaderPolicy(a);
-
-      assertLoadClassNoEvent(A.class, cl, expected);
-   }
-
-   public void testClassNotFoundHandlerParentDomainNoEvent() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
-      domain.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
-      a.setPathsAndPackageNames(A.class);
-      ClassLoader expected = system.registerClassLoaderPolicy(a);
-
-      assertLoadClassNoEvent(A.class, cl, expected);
-   }
-
-   public void testClassNotFoundHandlerParentClassLoaderNoEvent() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-
-      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
-      parentPolicy.setImportAll(true);
-      parentPolicy.addClassNotFoundHandler(this);
-      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
-
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
-      domain.setUseLoadClassForParent(false);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
-      a.setPathsAndPackageNames(A.class);
-      ClassLoader expected = system.registerClassLoaderPolicy(a);
-
-      assertLoadClassNoEvent(A.class, cl, expected);
-   }
-
-   public void testClassNotFoundHandlerSystemNoEvent() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      system.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
-      a.setPathsAndPackageNames(A.class);
-      ClassLoader expected = system.registerClassLoaderPolicy(a);
-
-      assertLoadClassNoEvent(A.class, cl, expected);
-   }
-
-   public void testClassNotFoundHandlerPolicyResolved() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      policy.addClassNotFoundHandler(this);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
-      resolved.setPathsAndPackageNames(A.class);
-      runnable = new RegisterClassLoader(system, null, resolved);
-      assertLoadClass(A.class, cl, runnable);
-      assertLoadClassNoEvent(A.class, cl, runnable.getClassLoader());
-   }
-
-   public void testClassNotFoundHandlerDomainResolved() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain = system.getDefaultDomain();
-      domain.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
-      resolved.setPathsAndPackageNames(A.class);
-      runnable = new RegisterClassLoader(system, domain, resolved);
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-      assertLoadClassNoEvent(A.class, cl, runnable.getClassLoader());
-   }
-
-   public void testClassNotFoundHandlerParentDomainResolved() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
-      domain.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
-      resolved.setPathsAndPackageNames(A.class);
-      runnable = new RegisterClassLoader(system, null, resolved);
-      assertLoadClass(A.class, cl, runnable);
-      assertLoadClassNoEvent(A.class, cl, runnable.getClassLoader());
-   }
-
-   public void testClassNotFoundHandlerParentClassLoaderResolved() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-
-      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
-      parentPolicy.setImportAll(true);
-      parentPolicy.addClassNotFoundHandler(this);
-      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
-
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
-      domain.setUseLoadClassForParent(false);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
-      resolved.setPathsAndPackageNames(A.class);
-      runnable = new RegisterClassLoader(system, null, resolved);
-      assertLoadClass(A.class, cl, runnable);
-      assertLoadClassNoEvent(A.class, cl, runnable.getClassLoader());
-   }
-
-   public void testClassNotFoundHandlerSystemResolved() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      system.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
-      resolved.setPathsAndPackageNames(A.class);
-      runnable = new RegisterClassLoader(system, null, resolved);
-      assertLoadClass(A.class, cl, runnable);
-      assertLoadClassNoEvent(A.class, cl, runnable.getClassLoader());
-   }
-
-   public void testClassNotFoundHandlerPolicyNotResolved() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      policy.addClassNotFoundHandler(this);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
-      resolved.setPathsAndPackageNames(A.class);
-      runnable = new RegisterClassLoader(system, null, resolved);
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-   }
-
-   public void testClassNotFoundHandlerDomainNotResolved() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain domain = system.getDefaultDomain();
-      domain.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
-      resolved.setPathsAndPackageNames(A.class);
-      runnable = new RegisterClassLoader(system, domain, resolved);
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-   }
-
-   public void testClassNotFoundHandlerParentDomainNotResolved() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
-      domain.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
-      resolved.setPathsAndPackageNames(A.class);
-      runnable = new RegisterClassLoader(system, null, resolved);
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-   }
-
-   public void testClassNotFoundHandlerParentClassLoaderNotResolved() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-
-      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
-      parentPolicy.setImportAll(true);
-      parentPolicy.addClassNotFoundHandler(this);
-      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
-
-      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
-      domain.setUseLoadClassForParent(false);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
-
-      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
-      resolved.setPathsAndPackageNames(A.class);
-      runnable = new RegisterClassLoader(system, null, resolved);
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-   }
-
-   public void testClassNotFoundHandlerSystemNotResolved() throws Exception
-   {
-      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
-      system.addClassNotFoundHandler(this);
-
-      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
-      policy.setImportAll(true);
-      ClassLoader cl = system.registerClassLoaderPolicy(policy);
-
-      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
-      resolved.setPathsAndPackageNames(A.class);
-      runnable = new RegisterClassLoader(system, null, resolved);
-      assertLoadClassFail("does.not.exist.ClassName", cl);
-   }
-
-   protected Class<?> assertLoadClassNoEvent(Class<?> reference, ClassLoader start, ClassLoader expected)
-   {
-      Class<?> result = assertLoadClass(reference, start, expected);
-      assertNoEvent();
-      return result;
-   }
-
-   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, RegisterClassLoader runnable)
-   {
-      return assertLoadClass(reference, start, runnable, false);
-   }
-
-   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, RegisterClassLoader runnable, boolean isReference)
-   {
-      String name = reference.getName();
-      Class<?> result = null;
-      try
-      {
-         result = start.loadClass(name);
-         getLog().debug("Got class: " + ClassLoaderUtils.classToString(result) + " for " + name + " from " + start);
-      }
-      catch (ClassNotFoundException e)
-      {
-         failure("Did not expect CNFE for " + name + " from " + start, e);
-      }
-      assertClassLoader(result, runnable.getClassLoader());
-      if (isReference)
-         assertClassEquality(reference, result);
-      else
-         assertNoClassEquality(reference, result);
-      assertEvent(name, start);
-      return result;
-   }
-
-   protected void assertLoadClassFail(String name, ClassLoader start)
-   {
-      super.assertLoadClassFail(name, start);
-      assertEvent(name, start);
-   }
-
-   protected void assertEvent(String name, ClassLoader start)
-   {
-      assertTrue("Expected an event", events.isEmpty() == false);
-      ClassNotFoundEvent event = events.remove(0);
-      assertEquals(name, event.getClassName());
-      assertEquals(start, event.getClassLoader());
-      assertEquals(start, event.getSource());
-   }
-
-   protected void assertNoEvent()
-   {
-      assertTrue("Expected no events: " + events, events.isEmpty());
-   }
-   
-   class RegisterClassLoader implements Runnable
-   {
-      private ClassLoaderSystem system;
-      private ClassLoaderDomain domain;
-      private ClassLoaderPolicy policy;
-      private ClassLoader classLoader;
-      
-      public RegisterClassLoader(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy)
-      {
-         this.system = system;
-         if (domain == null)
-            domain = system.getDefaultDomain();
-         this.domain = domain;
-         this.policy = policy;
-      }
-      
-      public void run()
-      {
-         classLoader = system.registerClassLoaderPolicy(domain, policy);
-      }
-      
-      public ClassLoader getClassLoader()
-      {
-         if (classLoader == null)
-            throw new Error("No classloader registered");
-         return classLoader;
-      }
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassNotFoundHandlerUnitTestCase.java (from rev 98000, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassNotFoundHandlerUnitTestCase.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassNotFoundHandlerUnitTestCase.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/notifications/test/ClassNotFoundHandlerUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,484 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, 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.test.classloader.notifications.test;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import junit.framework.Test;
+
+import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter;
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderPolicy;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloader.spi.ClassNotFoundEvent;
+import org.jboss.classloader.spi.ClassNotFoundHandler;
+import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloader.test.support.MockClassLoaderPolicy;
+import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
+import org.jboss.test.classloader.notifications.support.a.A;
+
+/**
+ * ClassNotFoundHnadlerUnitTestCase
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassNotFoundHandlerUnitTestCase extends AbstractClassLoaderTestWithSecurity implements ClassNotFoundHandler
+{
+   public static Test suite()
+   {
+      return suite(ClassNotFoundHandlerUnitTestCase.class);
+   }
+
+   public ClassNotFoundHandlerUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   List<ClassNotFoundEvent> events = new CopyOnWriteArrayList<ClassNotFoundEvent>();
+   
+   RegisterClassLoader runnable = null;
+   
+   public boolean classNotFound(ClassNotFoundEvent event)
+   {
+      events.add(event);
+
+      if (runnable != null)
+      {
+         runnable.run();
+         return true;
+      }
+      return false;
+   }
+
+   public void testClassNotFoundHandlerPolicy() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.addClassNotFoundHandler(this);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+   }
+
+   public void testClassNotFoundHandlerDomain() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain = system.getDefaultDomain();
+      domain.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+   }
+
+   public void testClassNotFoundHandlerSystem() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      system.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+   }
+
+   public void testClassNotFoundHandlerParentDomain() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
+      domain.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+   }
+
+   public void testClassNotFoundHandlerParentClassLoader() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+
+      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
+      parentPolicy.addClassNotFoundHandler(this);
+      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
+
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
+      domain.setUseLoadClassForParent(false);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+   }
+
+   public void testClassNotFoundHandlerPolicyNoEvent() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      policy.addClassNotFoundHandler(this);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
+      a.setPathsAndPackageNames(A.class);
+      ClassLoader expected = system.registerClassLoaderPolicy(a);
+
+      assertLoadClassNoEvent(A.class, cl, expected);
+   }
+
+   public void testClassNotFoundHandlerDomainNoEvent() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain = system.getDefaultDomain();
+      domain.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
+      a.setPathsAndPackageNames(A.class);
+      ClassLoader expected = system.registerClassLoaderPolicy(a);
+
+      assertLoadClassNoEvent(A.class, cl, expected);
+   }
+
+   public void testClassNotFoundHandlerParentDomainNoEvent() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
+      domain.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
+      a.setPathsAndPackageNames(A.class);
+      ClassLoader expected = system.registerClassLoaderPolicy(a);
+
+      assertLoadClassNoEvent(A.class, cl, expected);
+   }
+
+   public void testClassNotFoundHandlerParentClassLoaderNoEvent() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+
+      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
+      parentPolicy.setImportAll(true);
+      parentPolicy.addClassNotFoundHandler(this);
+      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
+
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
+      domain.setUseLoadClassForParent(false);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
+      a.setPathsAndPackageNames(A.class);
+      ClassLoader expected = system.registerClassLoaderPolicy(a);
+
+      assertLoadClassNoEvent(A.class, cl, expected);
+   }
+
+   public void testClassNotFoundHandlerSystemNoEvent() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      system.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      MockClassLoaderPolicy a = createMockClassLoaderPolicy("a");
+      a.setPathsAndPackageNames(A.class);
+      ClassLoader expected = system.registerClassLoaderPolicy(a);
+
+      assertLoadClassNoEvent(A.class, cl, expected);
+   }
+
+   public void testClassNotFoundHandlerPolicyResolved() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      policy.addClassNotFoundHandler(this);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
+      resolved.setPathsAndPackageNames(A.class);
+      runnable = new RegisterClassLoader(system, null, resolved);
+      assertLoadClass(A.class, cl, runnable);
+      assertLoadClassNoEvent(A.class, cl, runnable.getClassLoader());
+   }
+
+   public void testClassNotFoundHandlerDomainResolved() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain = system.getDefaultDomain();
+      domain.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
+      resolved.setPathsAndPackageNames(A.class);
+      runnable = new RegisterClassLoader(system, domain, resolved);
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+      assertLoadClassNoEvent(A.class, cl, runnable.getClassLoader());
+   }
+
+   public void testClassNotFoundHandlerParentDomainResolved() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
+      domain.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
+      resolved.setPathsAndPackageNames(A.class);
+      runnable = new RegisterClassLoader(system, null, resolved);
+      assertLoadClass(A.class, cl, runnable);
+      assertLoadClassNoEvent(A.class, cl, runnable.getClassLoader());
+   }
+
+   public void testClassNotFoundHandlerParentClassLoaderResolved() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+
+      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
+      parentPolicy.setImportAll(true);
+      parentPolicy.addClassNotFoundHandler(this);
+      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
+
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
+      domain.setUseLoadClassForParent(false);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
+      resolved.setPathsAndPackageNames(A.class);
+      runnable = new RegisterClassLoader(system, null, resolved);
+      assertLoadClass(A.class, cl, runnable);
+      assertLoadClassNoEvent(A.class, cl, runnable.getClassLoader());
+   }
+
+   public void testClassNotFoundHandlerSystemResolved() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      system.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
+      resolved.setPathsAndPackageNames(A.class);
+      runnable = new RegisterClassLoader(system, null, resolved);
+      assertLoadClass(A.class, cl, runnable);
+      assertLoadClassNoEvent(A.class, cl, runnable.getClassLoader());
+   }
+
+   public void testClassNotFoundHandlerPolicyNotResolved() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      policy.addClassNotFoundHandler(this);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
+      resolved.setPathsAndPackageNames(A.class);
+      runnable = new RegisterClassLoader(system, null, resolved);
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+   }
+
+   public void testClassNotFoundHandlerDomainNotResolved() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain domain = system.getDefaultDomain();
+      domain.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
+      resolved.setPathsAndPackageNames(A.class);
+      runnable = new RegisterClassLoader(system, domain, resolved);
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+   }
+
+   public void testClassNotFoundHandlerParentDomainNotResolved() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, defaultDomain);
+      domain.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
+      resolved.setPathsAndPackageNames(A.class);
+      runnable = new RegisterClassLoader(system, null, resolved);
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+   }
+
+   public void testClassNotFoundHandlerParentClassLoaderNotResolved() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+
+      MockClassLoaderPolicy parentPolicy = createMockClassLoaderPolicy("parent");
+      parentPolicy.setImportAll(true);
+      parentPolicy.addClassNotFoundHandler(this);
+      ClassLoader parentCl = system.registerClassLoaderPolicy(defaultDomain, parentPolicy);
+
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE, new ClassLoaderToLoaderAdapter(parentCl));
+      domain.setUseLoadClassForParent(false);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      ClassLoader cl = system.registerClassLoaderPolicy(domain, policy);
+
+      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
+      resolved.setPathsAndPackageNames(A.class);
+      runnable = new RegisterClassLoader(system, null, resolved);
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+   }
+
+   public void testClassNotFoundHandlerSystemNotResolved() throws Exception
+   {
+      ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+      system.addClassNotFoundHandler(this);
+
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy("test");
+      policy.setImportAll(true);
+      ClassLoader cl = system.registerClassLoaderPolicy(policy);
+
+      MockClassLoaderPolicy resolved = createMockClassLoaderPolicy("a");
+      resolved.setPathsAndPackageNames(A.class);
+      runnable = new RegisterClassLoader(system, null, resolved);
+      assertLoadClassFail("does.not.exist.ClassName", cl);
+   }
+
+   protected Class<?> assertLoadClassNoEvent(Class<?> reference, ClassLoader start, ClassLoader expected)
+   {
+      Class<?> result = assertLoadClass(reference, start, expected);
+      assertNoEvent();
+      return result;
+   }
+
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, RegisterClassLoader runnable)
+   {
+      return assertLoadClass(reference, start, runnable, false);
+   }
+
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, RegisterClassLoader runnable, boolean isReference)
+   {
+      String name = reference.getName();
+      Class<?> result = null;
+      try
+      {
+         result = start.loadClass(name);
+         getLog().debug("Got class: " + ClassLoaderUtils.classToString(result) + " for " + name + " from " + start);
+      }
+      catch (ClassNotFoundException e)
+      {
+         failure("Did not expect CNFE for " + name + " from " + start, e);
+      }
+      assertClassLoader(result, runnable.getClassLoader());
+      if (isReference)
+         assertClassEquality(reference, result);
+      else
+         assertNoClassEquality(reference, result);
+      assertEvent(name, start);
+      return result;
+   }
+
+   protected void assertLoadClassFail(String name, ClassLoader start)
+   {
+      super.assertLoadClassFail(name, start);
+      assertEvent(name, start);
+   }
+
+   protected void assertEvent(String name, ClassLoader start)
+   {
+      assertTrue("Expected an event", events.isEmpty() == false);
+      ClassNotFoundEvent event = events.remove(0);
+      assertEquals(name, event.getClassName());
+      assertEquals(start, event.getClassLoader());
+      assertEquals(start, event.getSource());
+   }
+
+   protected void assertNoEvent()
+   {
+      assertTrue("Expected no events: " + events, events.isEmpty());
+   }
+   
+   class RegisterClassLoader implements Runnable
+   {
+      private ClassLoaderSystem system;
+      private ClassLoaderDomain domain;
+      private ClassLoaderPolicy policy;
+      private ClassLoader classLoader;
+      
+      public RegisterClassLoader(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy)
+      {
+         this.system = system;
+         if (domain == null)
+            domain = system.getDefaultDomain();
+         this.domain = domain;
+         this.policy = policy;
+      }
+      
+      public void run()
+      {
+         classLoader = system.registerClassLoaderPolicy(domain, policy);
+      }
+      
+      public ClassLoader getClassLoader()
+      {
+         if (classLoader == null)
+            throw new Error("No classloader registered");
+         return classLoader;
+      }
+   }
+}

Modified: projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/policy/test/ClassLoaderPolicyUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/policy/test/ClassLoaderPolicyUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloader/src/test/java/org/jboss/test/classloader/policy/test/ClassLoaderPolicyUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -36,7 +36,7 @@
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloader.spi.ParentPolicy;
-import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.classloader.spi.filter.FilteredDelegateLoader;
 import org.jboss.classloader.test.support.MockClassLoaderPolicy;
 import org.jboss.test.classloader.AbstractClassLoaderTest;
@@ -122,7 +122,7 @@
    {
       ClassLoaderSystem system = createClassLoaderSystem();
       // Hide java
-      ParentPolicy parentPolicy = new ParentPolicy(ClassFilter.NOTHING, ClassFilter.NOTHING);
+      ParentPolicy parentPolicy = new ParentPolicy(ClassFilterUtils.NOTHING, ClassFilterUtils.NOTHING);
       ClassLoaderDomain domain = system.createAndRegisterDomain("test", parentPolicy);
       TestClassLoaderPolicy policy = new TestClassLoaderPolicy();
       ClassLoader classLoader = system.registerClassLoaderPolicy(domain, policy);

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -26,6 +26,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloading.spi.metadata.Capability;
@@ -39,7 +40,7 @@
  * @author <a href="ales.justin at jboss.org">Ales Justin</a>
  * @version $Revision: 1.1 $
  */
-public class ClassLoading
+public class ClassLoading implements Resolver
 {
    /** The log */
    private static final Logger log = Logger.getLogger(ClassLoading.class);
@@ -56,6 +57,9 @@
    /** The module registries */
    private final Set<ModuleRegistry> moduleRegistries = new ConcurrentSet<ModuleRegistry>();
 
+   /** The resolvers */
+   private List<Resolver> resolvers = null;
+
    /**
     * Add a module
     *
@@ -151,7 +155,59 @@
       
       globalCapabilitiesProviders.remove(provider);
    }
+
+   /**
+    * Add a resolver
+    * 
+    * @param resolver the resolver
+    */
+   public void addResolver(Resolver resolver)
+   {
+      if (resolver == null)
+         throw new IllegalArgumentException("Null resolver");
+      
+      if (resolvers == null)
+         resolvers = new CopyOnWriteArrayList<Resolver>();
+      
+      resolvers.add(resolver);
+   }
+
+   /**
+    * Remove a resolver
+    * 
+    * @param resolver the resolver
+    */
+   public void removeResolver(Resolver resolver)
+   {
+      if (resolver == null)
+         throw new IllegalArgumentException("Null resolver");
+      
+      if (resolvers == null)
+         return;
+      
+      resolvers.remove(resolver);
+   }
    
+   public boolean resolve(ResolutionContext context)
+   {
+      if (resolvers != null && resolvers.isEmpty() == false)
+      {
+         for (Resolver resolver : resolvers)
+         {
+            try
+            {
+               if (resolver.resolve(context))
+                  return true;
+            }
+            catch (Throwable t)
+            {
+               log.warn("Error in resolver: " + resolver + " context=" + context, t);
+            }
+         }
+      }
+      return false;
+   }
+   
    /**
     * Get or create the domain
     * 

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Domain.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Domain.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Domain.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -60,7 +60,7 @@
    
    /** The registered modules by name */
    private Map<String, Module> modulesByName = new ConcurrentHashMap<String, Module>();
-
+   
    /**
     * Create a new Domain.
     * 
@@ -218,7 +218,7 @@
    {
       return classLoading.mergeGlobalCapabilities(capabilities);
    }
-   
+
    /**
     * Resolve a requirement to a module
     * 
@@ -228,6 +228,35 @@
     */
    protected Module resolveModule(Module module, Requirement requirement)
    {
+      // Try to resolve the module
+      Module result = doResolveModule(module, requirement);
+      if (result == null)
+      {
+         // If we have resolvers, try again if they find it
+         if (classLoading.resolve(new ResolutionContext(this, module, requirement)))
+            result = doResolveModule(module, requirement);
+      }
+      
+      // If there is a result, check to see whether we need to resolve it
+      if (result != null)
+      {
+         LifeCycle lifeCycle = result.getLifeCycle();
+         if (lifeCycle != null && lifeCycle.isLazyResolve() && lifeCycle.isResolved() == false)
+            lifeCycle.doResolve();
+      }
+      
+      return result;
+   }   
+   
+   /**
+    * Resolve a requirement to a module
+    * 
+    * @param module the module
+    * @param requirement the requirement
+    * @return the resolved name or null if not resolved
+    */
+   protected Module doResolveModule(Module module, Requirement requirement)
+   {
       // First check the parent domain has been setup
       Domain parentDomain = null;
       if (parentDomainName != null)

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/LifeCycle.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/LifeCycle.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/LifeCycle.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/LifeCycle.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,310 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.classloading.spi.dependency;
+
+import org.jboss.classloader.spi.ClassFoundEvent;
+import org.jboss.classloader.spi.ClassFoundHandler;
+import org.jboss.classloader.spi.ClassLoaderPolicy;
+import org.jboss.classloading.spi.dependency.policy.ClassLoaderPolicyModule;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.ControllerStateModel;
+import org.jboss.logging.Logger;
+
+/**
+ * Lifecycle.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class LifeCycle
+{
+   /** The log */
+   private static final Logger log = Logger.getLogger(LifeCycle.class);
+   
+   /** The module associated with this lifecycle */
+   private Module module;
+   
+   /** Any lazy start handler */
+   private LazyStartHandler lazyStart;
+   
+   /** Whether we are already in the lifecycle */
+   // TODO FIX THIS IN THE MC?
+   private boolean lifeCycle = false;
+   
+   /**
+    * Create a new LifeCycle.
+    * 
+    * @param module the module associated with the lifecycle
+    */
+   public LifeCycle(Module module)
+   {
+      if (module == null)
+         throw new IllegalArgumentException("Null module");
+      this.module = module;
+   }
+   
+   /**
+    * Get the module.
+    * 
+    * @return the module.
+    */
+   public Module getModule()
+   {
+      return module;
+   }
+
+   /**
+    * Whether the module is resolved
+    * 
+    * @return true when resolved
+    */
+   public boolean isResolved()
+   {
+      return module.getClassLoader() != null;
+   }
+   
+   /**
+    * Whether the context associated with the classloader is lazy resolve,
+    * i.e. the resolve method will be invoked the context is needed
+    * 
+    * @return true if it is lazy resolve
+    */
+   public boolean isLazyResolve()
+   {
+      return false;
+   }
+   
+   /**
+    * Resolve the classloader
+    */
+   void doResolve()
+   {
+      if (lifeCycle == false)
+      {
+         lifeCycle = true;
+         try
+         {
+            resolve();
+         }
+         catch (Throwable t)
+         {
+            log.warn("Error in resolve: " + this, t);
+         }
+         finally
+         {
+            lifeCycle = false;
+         }
+      }
+   }
+   
+   /**
+    * Resolve the classloader
+    */
+   public void resolve()
+   {
+   }
+   
+   /**
+    * Unresolve the classloader
+    */
+   public void unresolve()
+   {
+   }
+   
+   /**
+    * Fired when the classloader is resolved
+    */
+   public void resolved()
+   {
+   }
+   
+   /**
+    * Fired when the classloader is unresolved
+    */
+   public void unresolved()
+   {
+   }
+   
+   /**
+    * Whether the module is started
+    * 
+    * @return true when started
+    */
+   public boolean isStarted()
+   {
+      ControllerContext context = module.getControllerContext();
+      if (context == null)
+         return false;
+
+      Controller controller = context.getController();
+      ControllerStateModel model = controller.getStates();
+      return model.isBeforeState(context.getState(), ControllerState.INSTALLED) == false;
+   }
+   
+   /**
+    * Start the context associated with the classloader
+    */
+   void doStart()
+   {
+      if (lifeCycle == false)
+      {
+         lifeCycle = true;
+         try
+         {
+            start();
+         }
+         catch (Throwable t)
+         {
+            log.warn("Error in start: " + this, t);
+         }
+         finally
+         {
+            lifeCycle = false;
+         }
+      }
+   }
+   
+   /**
+    * Start the context associated with the classloader
+    */
+   public void start()
+   {
+   }
+   
+   /**
+    * Stop the context associated with the classloader
+    */
+   void doStop()
+   {
+      if (lifeCycle == false)
+      {
+         lifeCycle = true;
+         try
+         {
+            start();
+         }
+         catch (Throwable t)
+         {
+            log.warn("Error in stop: " + this, t);
+         }
+         finally
+         {
+            lifeCycle = false;
+         }
+      }
+   }
+   
+   /**
+    * Stop the context associated with the classloader
+    */
+   public void stop()
+   {
+   }
+   
+   /**
+    * Whether the context associated with the classloader is lazy start,
+    * i.e. the start method will be invoked on first class load
+    * 
+    * @return true if it is lazy start
+    */
+   public boolean isLazyStart()
+   {
+      return false;
+   }
+
+   /**
+    * Setup lazy start
+    */
+   protected void setUpLazyStart()
+   {
+      if (isStarted())
+         return;
+      if (module instanceof ClassLoaderPolicyModule)
+      {
+         ClassLoaderPolicy policy = ((ClassLoaderPolicyModule) module).getPolicy();
+         lazyStart = new LazyStartHandler(policy);
+      }
+      else
+      {
+         throw new IllegalStateException("Cannot do lazy start for " + module);
+      }
+   }
+
+   /**
+    * Remove lazy start
+    */
+   protected void removeLazyStart()
+   {
+      if (lazyStart == null)
+         return;
+
+      lazyStart.cleanup();
+      lazyStart = null;
+   }
+   
+   void fireResolved()
+   {
+      if (isLazyStart())
+         setUpLazyStart();
+      resolved();
+   }
+   
+   void fireUnresolved()
+   {
+      removeLazyStart();
+      unresolved();
+   }
+
+   @Override
+   public String toString()
+   {
+      return getClass().getName() + "{" + getModule() + "}";
+   }
+   
+   /**
+    * LazyStartHandler.
+    */
+   private class LazyStartHandler implements ClassFoundHandler
+   {
+      ClassLoaderPolicy policy;
+      
+      public LazyStartHandler(ClassLoaderPolicy policy)
+      {
+         this.policy = policy;
+         policy.addClassFoundHandler(this);
+      }
+      
+      public void classFound(ClassFoundEvent event)
+      {
+         removeLazyStart();
+         if (isStarted() == false)
+            start();
+      }
+      
+      public void cleanup()
+      {
+         policy.removeClassFoundHandler(this);
+      }
+   }
+}

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -67,7 +67,7 @@
  */
 public abstract class Module extends NameAndVersionSupport
 {
-   /** The serialVersionUID - not really serializable */
+   /** The serialVersionUID */
    private static final long serialVersionUID = 1L;
 
    /** The modules by classloader */
@@ -93,6 +93,9 @@
    
    /** The requirements */
    private List<RequirementDependencyItem> requirementDependencies;
+
+   /** Any lifecycle associated with the classloader */
+   private LifeCycle lifeCycle;
    
    /**
     * Register a classloader for a module
@@ -109,6 +112,10 @@
          throw new IllegalArgumentException("Null classloader");
 
       modulesByClassLoader.put(classLoader, module);
+
+      LifeCycle lifeCycle = module.getLifeCycle();
+      if (lifeCycle != null)
+         lifeCycle.fireResolved();
    }
 
    /**
@@ -126,6 +133,10 @@
          throw new IllegalArgumentException("Null classloader");
 
       modulesByClassLoader.remove(classLoader);
+
+      LifeCycle lifeCycle = module.getLifeCycle();
+      if (lifeCycle != null)
+         lifeCycle.fireUnresolved();
    }
    
    /**
@@ -368,6 +379,28 @@
    }
    
    /**
+    * Get the lifecycle.
+    * 
+    * @return the lifecycle.
+    */
+   public LifeCycle getLifeCycle()
+   {
+      return lifeCycle;
+   }
+
+   /**
+    * Set the lifeCycle.
+    * 
+    * @param lifeCycle the lifeCycle.
+    */
+   public void setLifeCycle(LifeCycle lifeCycle)
+   {
+      if (lifeCycle != null && lifeCycle.getModule() != this)
+         throw new IllegalArgumentException("Cannot setLifeCycle on module " + this + " it is associated with a different module: " + lifeCycle.getModule());
+      this.lifeCycle = lifeCycle;
+   }
+
+   /**
     * Find the module for a classloader
     * 
     * @param cl the classloader

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/ResolutionContext.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ResolutionContext.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/ResolutionContext.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/ResolutionContext.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,98 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.classloading.spi.dependency;
+
+import org.jboss.classloading.spi.metadata.Requirement;
+
+/**
+ * ResolutionContext.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ResolutionContext
+{
+   /** The domain */
+   private Domain domain;
+   
+   /** The module */
+   private Module module;
+   
+   /** The requirement */
+   private Requirement requirement;
+
+   /**
+    * Create a new ResolutionContext.
+    * 
+    * @param domain the domain
+    * @param module the module
+    * @param requirement the requirement
+    */
+   public ResolutionContext(Domain domain, Module module, Requirement requirement)
+   {
+      this.domain = domain;
+      this.module = module;
+      this.requirement = requirement;
+   }
+
+   /**
+    * Get the domain.
+    * 
+    * @return the domain.
+    */
+   public Domain getDomain()
+   {
+      return domain;
+   }
+
+   /**
+    * Get the module.
+    * 
+    * @return the module.
+    */
+   public Module getModule()
+   {
+      return module;
+   }
+
+   /**
+    * Get the requirement.
+    * 
+    * @return the requirement.
+    */
+   public Requirement getRequirement()
+   {
+      return requirement;
+   }
+
+   @Override
+   public String toString()
+   {
+      StringBuilder builder = new StringBuilder();
+      builder.append(getClass().getSimpleName());
+      builder.append("{domain=").append(domain);
+      builder.append(" module=").append(module);
+      builder.append(" requirement=").append(requirement);
+      builder.append('}');
+      return builder.toString();
+   }
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Resolver.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Resolver.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Resolver.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/Resolver.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,39 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.classloading.spi.dependency;
+
+/**
+ * Resolver.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public interface Resolver
+{
+   /**
+    * Resolve a requirement
+    * 
+    * @param context the resolution context
+    * @return true when resolved
+    */
+   boolean resolve(ResolutionContext context);
+}

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -213,6 +213,12 @@
       return policy;
    }
 
+   /**
+    * Remove classloader.
+    *
+    * Unregister policy from the system
+    * and remove tha actual classloader from module.
+    */
    public void removeClassLoader()
    {
       if (system != null && policy != null)

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/metadata/ClassLoadingMetaData.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/metadata/ClassLoadingMetaData.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/main/java/org/jboss/classloading/spi/metadata/ClassLoadingMetaData.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -51,6 +51,9 @@
    /** The parent domain */
    private String parentDomain;
    
+   /** Whether to make a subdeployment classloader a top-level classloader */
+   private boolean topLevelClassLoader = false;
+   
    /** Whether to enforce j2se classloading compliance */
    private boolean j2seClassLoadingCompliance = true;
    
@@ -135,6 +138,28 @@
    }
 
    /**
+    * Get the topLevelClassLoader.
+    * 
+    * @return the topLevelClassLoader.
+    */
+   public boolean isTopLevelClassLoader()
+   {
+      return topLevelClassLoader;
+   }
+
+   /**
+    * Set the topLevelClassLoader.
+    * 
+    * @param topLevelClassLoader the topLevelClassLoader.
+    */
+   @ManagementProperty
+   @XmlAttribute(name="top-level-classloader")
+   public void setTopLevelClassLoader(boolean topLevelClassLoader)
+   {
+      this.topLevelClassLoader = topLevelClassLoader;
+   }
+
+   /**
     * Get the exportAll.
     * 
     * @return the exportAll.

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/ClassLoadingAllTestSuite.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/ClassLoadingAllTestSuite.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/ClassLoadingAllTestSuite.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -26,7 +26,9 @@
 import junit.textui.TestRunner;
 
 import org.jboss.test.classloading.dependency.DependencyTestSuite;
+import org.jboss.test.classloading.lifecycle.LifeCycleTestSuite;
 import org.jboss.test.classloading.metadata.MetaDataTestSuite;
+import org.jboss.test.classloading.resolver.ResolverTestSuite;
 import org.jboss.test.classloading.version.VersionTestSuite;
 
 /**
@@ -59,6 +61,8 @@
       suite.addTest(VersionTestSuite.suite());
       suite.addTest(MetaDataTestSuite.suite());
       suite.addTest(DependencyTestSuite.suite());
+      suite.addTest(LifeCycleTestSuite.suite());
+      suite.addTest(ResolverTestSuite.suite());
       
       return suite;
    }

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/dependency/test/AbstractMockClassLoaderUnitTest.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/dependency/test/AbstractMockClassLoaderUnitTest.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/dependency/test/AbstractMockClassLoaderUnitTest.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -31,6 +31,7 @@
 import org.jboss.classloading.spi.dependency.ClassLoading;
 import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoaderPolicyModule;
 import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
+import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.ControllerStateModel;
 import org.jboss.kernel.Kernel;
@@ -61,6 +62,13 @@
    {
       super(name);
    }
+
+   protected <T> T getBean(Object name, Class<T> expected)
+   {
+      ControllerContext context = controller.getInstalledContext(name);
+      assertNotNull("Context should be found: " + name, context);
+      return assertInstanceOf(context.getTarget(), expected);
+   }
    
    protected ClassLoader assertClassLoader(KernelControllerContext context) throws Exception
    {

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/dependency/test/MockClassLoadingMetaDataUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/dependency/test/MockClassLoadingMetaDataUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/dependency/test/MockClassLoadingMetaDataUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -28,7 +28,7 @@
 import junit.framework.Test;
 
 import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoaderPolicyModule;
 import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
 import org.jboss.classloading.spi.metadata.Capability;
@@ -159,12 +159,12 @@
    public void testIncluded() throws Exception
    {
       MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
-      a.setIncluded(ClassFilter.JAVA_ONLY);
+      a.setIncluded(ClassFilterUtils.JAVA_ONLY);
       KernelControllerContext contextA = install(a);
       try
       {
          MockClassLoaderPolicyModule module = assertModule(contextA);
-         assertEquals(ClassFilter.JAVA_ONLY, module.getIncluded());
+         assertEquals(ClassFilterUtils.JAVA_ONLY, module.getIncluded());
       }
       finally
       {
@@ -176,12 +176,12 @@
    public void testExcluded() throws Exception
    {
       MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
-      a.setExcluded(ClassFilter.JAVA_ONLY);
+      a.setExcluded(ClassFilterUtils.JAVA_ONLY);
       KernelControllerContext contextA = install(a);
       try
       {
          MockClassLoaderPolicyModule module = assertModule(contextA);
-         assertEquals(ClassFilter.JAVA_ONLY, module.getExcluded());
+         assertEquals(ClassFilterUtils.JAVA_ONLY, module.getExcluded());
       }
       finally
       {
@@ -193,12 +193,12 @@
    public void testExcludedExport() throws Exception
    {
       MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
-      a.setExcludedExport(ClassFilter.JAVA_ONLY);
+      a.setExcludedExport(ClassFilterUtils.JAVA_ONLY);
       KernelControllerContext contextA = install(a);
       try
       {
          MockClassLoaderPolicyModule module = assertModule(contextA);
-         assertEquals(ClassFilter.JAVA_ONLY, module.getExcludedExport());
+         assertEquals(ClassFilterUtils.JAVA_ONLY, module.getExcludedExport());
       }
       finally
       {

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle)

Deleted: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/LifeCycleTestSuite.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/LifeCycleTestSuite.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/LifeCycleTestSuite.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,61 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, 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.test.classloading.lifecycle;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import org.jboss.test.classloading.lifecycle.test.LifeCycleUnitTestCase;
-
-/**
- * LifeCycle Test Suite.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 37459 $
- */
-public class LifeCycleTestSuite extends TestSuite
-{
-   /**
-    * For running the testsuite from the command line
-    * 
-    * @param args the command line args
-    */
-   public static void main(String[] args)
-   {
-      TestRunner.run(suite());
-   }
-
-   /**
-    * Create the testsuite
-    * 
-    * @return the testsuite
-    */
-   public static Test suite()
-   {
-      TestSuite suite = new TestSuite("LifeCycle Tests");
-
-      suite.addTest(LifeCycleUnitTestCase.suite());
-
-      return suite;
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/LifeCycleTestSuite.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/LifeCycleTestSuite.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/LifeCycleTestSuite.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/LifeCycleTestSuite.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,61 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, 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.test.classloading.lifecycle;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+import org.jboss.test.classloading.lifecycle.test.LifeCycleUnitTestCase;
+
+/**
+ * LifeCycle Test Suite.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 37459 $
+ */
+public class LifeCycleTestSuite extends TestSuite
+{
+   /**
+    * For running the testsuite from the command line
+    * 
+    * @param args the command line args
+    */
+   public static void main(String[] args)
+   {
+      TestRunner.run(suite());
+   }
+
+   /**
+    * Create the testsuite
+    * 
+    * @return the testsuite
+    */
+   public static Test suite()
+   {
+      TestSuite suite = new TestSuite("LifeCycle Tests");
+
+      suite.addTest(LifeCycleUnitTestCase.suite());
+
+      return suite;
+   }
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support)

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a)

Deleted: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/A.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/A.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/A.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,32 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, 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.test.classloading.lifecycle.support.a;
-
-/**
- * A.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class A
-{
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/A.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/A.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/A.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/A.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.test.classloading.lifecycle.support.a;
+
+/**
+ * A.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class A
+{
+}

Deleted: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycle.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycle.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycle.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,113 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, 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.test.classloading.lifecycle.support.a;
-
-import org.jboss.classloading.spi.dependency.LifeCycle;
-import org.jboss.classloading.spi.dependency.Module;
-
-/**
- * MockLifeCycle.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class MockLifeCycle extends LifeCycle
-{
-   public boolean gotResolved = false;
-   public boolean gotUnresolved = false;
-   public boolean gotResolve = false;
-   public boolean gotUnresolve = false;
-   public boolean gotStart= false;
-   public boolean gotStop = false;
-
-   public boolean lazyResolve = false;
-   public boolean lazyStart = false;
-   
-   public MockLifeCycle(Module module)
-   {
-      super(module);
-   }
-
-   public MockLifeCycleClassLoaderPolicyModule getModule()
-   {
-      return (MockLifeCycleClassLoaderPolicyModule) super.getModule();
-   }
-
-   public void resetFlags()
-   {
-      gotResolved = false;
-      gotUnresolved = false;
-      gotResolve = false;
-      gotUnresolve = false;
-      gotStart = false;
-      gotStop = false;
-   }
-   
-   @Override
-   public void resolve()
-   {
-      gotResolve = true;
-      getModule().resolveIt();
-   }
-
-   @Override
-   public void resolved()
-   {
-      gotResolved = true;
-   }
-
-   @Override
-   public void start()
-   {
-      gotStart = true;
-   }
-
-   @Override
-   public void stop()
-   {
-      gotStop = true;
-   }
-
-   @Override
-   public void unresolve()
-   {
-      gotUnresolve = true;
-   }
-
-   @Override
-   public void unresolved()
-   {
-      gotUnresolved = true;
-   }
-
-   @Override
-   public boolean isLazyResolve()
-   {
-      return lazyResolve;
-   }
-
-   @Override
-   public boolean isLazyStart()
-   {
-      return lazyStart;
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycle.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycle.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycle.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycle.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,113 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.test.classloading.lifecycle.support.a;
+
+import org.jboss.classloading.spi.dependency.LifeCycle;
+import org.jboss.classloading.spi.dependency.Module;
+
+/**
+ * MockLifeCycle.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class MockLifeCycle extends LifeCycle
+{
+   public boolean gotResolved = false;
+   public boolean gotUnresolved = false;
+   public boolean gotResolve = false;
+   public boolean gotUnresolve = false;
+   public boolean gotStart= false;
+   public boolean gotStop = false;
+
+   public boolean lazyResolve = false;
+   public boolean lazyStart = false;
+   
+   public MockLifeCycle(Module module)
+   {
+      super(module);
+   }
+
+   public MockLifeCycleClassLoaderPolicyModule getModule()
+   {
+      return (MockLifeCycleClassLoaderPolicyModule) super.getModule();
+   }
+
+   public void resetFlags()
+   {
+      gotResolved = false;
+      gotUnresolved = false;
+      gotResolve = false;
+      gotUnresolve = false;
+      gotStart = false;
+      gotStop = false;
+   }
+   
+   @Override
+   public void resolve()
+   {
+      gotResolve = true;
+      getModule().resolveIt();
+   }
+
+   @Override
+   public void resolved()
+   {
+      gotResolved = true;
+   }
+
+   @Override
+   public void start()
+   {
+      gotStart = true;
+   }
+
+   @Override
+   public void stop()
+   {
+      gotStop = true;
+   }
+
+   @Override
+   public void unresolve()
+   {
+      gotUnresolve = true;
+   }
+
+   @Override
+   public void unresolved()
+   {
+      gotUnresolved = true;
+   }
+
+   @Override
+   public boolean isLazyResolve()
+   {
+      return lazyResolve;
+   }
+
+   @Override
+   public boolean isLazyStart()
+   {
+      return lazyStart;
+   }
+}

Deleted: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycleClassLoaderPolicyModule.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycleClassLoaderPolicyModule.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycleClassLoaderPolicyModule.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,73 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, 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.test.classloading.lifecycle.support.a;
-
-import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoaderPolicyModule;
-import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
-import org.jboss.dependency.spi.Controller;
-import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.dependency.spi.ControllerState;
-
-/**
- * MockLifeCycleClassLoaderPolicyModule.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class MockLifeCycleClassLoaderPolicyModule extends MockClassLoaderPolicyModule
-{
-   /** The serialVersionUID */
-   private static final long serialVersionUID = 1L;
-
-   public MockLifeCycleClassLoaderPolicyModule(MockClassLoadingMetaData classLoadingMetaData, String contextName)
-   {
-      super(classLoadingMetaData, contextName);
-      MockLifeCycle lifeCycle = new MockLifeCycle(this);
-      setLifeCycle(lifeCycle);
-   }
-   
-   @Override
-   public ClassLoader getClassLoader()
-   {
-      return super.getClassLoader();
-   }
-   
-   @Override
-   public ControllerState getClassLoaderState()
-   {
-      return ControllerState.CREATE;
-   }
-   
-   void resolveIt()
-   {
-      ControllerContext context = getControllerContext();
-      Controller controller = context.getController();
-      try
-      {
-         controller.change(context, getClassLoaderState());
-      }
-      catch (Throwable t)
-      {
-         throw new Error("Error", t);
-      }
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycleClassLoaderPolicyModule.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycleClassLoaderPolicyModule.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycleClassLoaderPolicyModule.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/support/a/MockLifeCycleClassLoaderPolicyModule.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,73 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.test.classloading.lifecycle.support.a;
+
+import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoaderPolicyModule;
+import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+
+/**
+ * MockLifeCycleClassLoaderPolicyModule.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class MockLifeCycleClassLoaderPolicyModule extends MockClassLoaderPolicyModule
+{
+   /** The serialVersionUID */
+   private static final long serialVersionUID = 1L;
+
+   public MockLifeCycleClassLoaderPolicyModule(MockClassLoadingMetaData classLoadingMetaData, String contextName)
+   {
+      super(classLoadingMetaData, contextName);
+      MockLifeCycle lifeCycle = new MockLifeCycle(this);
+      setLifeCycle(lifeCycle);
+   }
+   
+   @Override
+   public ClassLoader getClassLoader()
+   {
+      return super.getClassLoader();
+   }
+   
+   @Override
+   public ControllerState getClassLoaderState()
+   {
+      return ControllerState.CREATE;
+   }
+   
+   void resolveIt()
+   {
+      ControllerContext context = getControllerContext();
+      Controller controller = context.getController();
+      try
+      {
+         controller.change(context, getClassLoaderState());
+      }
+      catch (Throwable t)
+      {
+         throw new Error("Error", t);
+      }
+   }
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test)

Deleted: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/AbstractMockLifeCycleUnitTest.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/AbstractMockLifeCycleUnitTest.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/AbstractMockLifeCycleUnitTest.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,238 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, 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.test.classloading.lifecycle.test;
-
-import org.jboss.beans.metadata.spi.BeanMetaData;
-import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
-import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem;
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloader.spi.ParentPolicy;
-import org.jboss.classloading.spi.dependency.ClassLoading;
-import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
-import org.jboss.dependency.spi.ControllerMode;
-import org.jboss.dependency.spi.ControllerState;
-import org.jboss.kernel.Kernel;
-import org.jboss.kernel.plugins.bootstrap.AbstractBootstrap;
-import org.jboss.kernel.plugins.bootstrap.basic.BasicBootstrap;
-import org.jboss.kernel.spi.dependency.KernelController;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.test.classloading.AbstractClassLoadingTest;
-import org.jboss.test.classloading.lifecycle.support.a.MockLifeCycle;
-import org.jboss.test.classloading.lifecycle.support.a.MockLifeCycleClassLoaderPolicyModule;
-
-/**
- * AbstractMockLifeCycleUnitTest.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public abstract class AbstractMockLifeCycleUnitTest extends AbstractClassLoadingTest
-{
-   private KernelController controller;
-
-   protected ClassLoaderSystem system;
-
-   public AbstractMockLifeCycleUnitTest(String name)
-   {
-      super(name);
-   }
-
-   protected void assertNoClassLoader(KernelControllerContext context) throws Exception
-   {
-      MockLifeCycleClassLoaderPolicyModule module = assertMockClassPolicyModule(context);
-      ClassLoader cl = module.getClassLoader();
-      assertNull("" + cl, cl);
-   }
-
-   protected ClassLoader assertClassLoader(KernelControllerContext context) throws Exception
-   {
-      MockLifeCycleClassLoaderPolicyModule module = assertMockClassPolicyModule(context);
-      ClassLoader cl = module.getClassLoader();
-      assertNotNull("Should be a classloader for " + module, cl);
-      return cl;
-   }
-   
-   protected MockLifeCycle assertNotResolved(KernelControllerContext context) throws Exception
-   {
-      assertNoClassLoader(context);
-      MockLifeCycle lifeCycle = assertLifeCycle(context);
-      assertFalse(context.getName() + " should be unresolved", lifeCycle.isResolved());
-      assertFalse(context.getName() + " should be no resolved notification", lifeCycle.gotResolved);
-      assertFalse(context.getName() + " should not be started", lifeCycle.isStarted());
-      return lifeCycle;
-   }
-   
-   protected MockLifeCycle assertUnresolved(KernelControllerContext context) throws Exception
-   {
-      assertNoClassLoader(context);
-      MockLifeCycle lifeCycle = assertLifeCycle(context);
-      assertFalse(context.getName() + " should be unresolved", lifeCycle.isResolved());
-      assertTrue(context.getName() + " should be an unresolved notification", lifeCycle.gotUnresolved);
-      assertFalse(context.getName() + " should not be started", lifeCycle.isStarted());
-      return lifeCycle;
-   }
-   
-   protected ClassLoader assertResolved(KernelControllerContext context) throws Exception
-   {
-      MockLifeCycle lifeCycle = assertLifeCycle(context);
-      assertTrue(context.getName() + " should be resolved: " + context.getDependencyInfo().getUnresolvedDependencies(null), lifeCycle.isResolved());
-      assertTrue(context.getName() + " should be a resolved notification", lifeCycle.gotResolved);
-      assertFalse(context.getName() + " should not be started", lifeCycle.isStarted());
-      return assertClassLoader(context);
-   }
-   
-   protected ClassLoader assertStarted(KernelControllerContext context) throws Exception
-   {
-      MockLifeCycle lifeCycle = assertLifeCycle(context);
-      assertTrue(context.getName() + " should be resolved: " + context.getDependencyInfo().getUnresolvedDependencies(null), lifeCycle.isResolved());
-      assertTrue(context.getName() + " should be started", lifeCycle.isStarted());
-      assertEquals(ControllerState.INSTALLED, context.getState());
-      return assertClassLoader(context);
-   }
-
-   protected MockLifeCycle assertLifeCycle(KernelControllerContext context) throws Exception
-   {
-      MockLifeCycleClassLoaderPolicyModule module = assertMockClassPolicyModule(context);
-      MockLifeCycle result = (MockLifeCycle) module.getLifeCycle();
-      assertNotNull(result);
-      return result;
-   }
-
-   protected MockLifeCycleClassLoaderPolicyModule assertMockClassPolicyModule(KernelControllerContext context) throws Exception
-   {
-      MockLifeCycleClassLoaderPolicyModule module = (MockLifeCycleClassLoaderPolicyModule) context.getTarget();
-      assertNotNull("Should be a module for " + context, module);
-      return module;
-   }
-
-   protected KernelControllerContext install(MockClassLoadingMetaData metaData) throws Exception
-   {
-      // Determine some properties
-      String contextName = metaData.getName() + ":" + metaData.getVersion().toString(); 
-      
-      // Create the module
-      MockLifeCycleClassLoaderPolicyModule mockModule = new MockLifeCycleClassLoaderPolicyModule(metaData, contextName);
-      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(contextName, mockModule.getClass().getName());
-      builder.setConstructorValue(mockModule);
-      builder.setMode(ControllerMode.MANUAL);
-      builder.addConstructorParameter(MockClassLoadingMetaData.class.getName(), metaData);
-      builder.addConstructorParameter(String.class.getName(), contextName);
-      builder.setNoClassLoader();
-      builder.setCreate("registerClassLoaderPolicy");
-      builder.addCreateParameter(ClassLoaderSystem.class.getName(), builder.createValue(system));
-      builder.setDestroy("removeClassLoader");
-      BeanMetaData module = builder.getBeanMetaData();
-      KernelControllerContext result = install(module);
-      change(result, ControllerState.CONFIGURED);
-      return result;
-   }
-   
-   protected KernelControllerContext install(BeanMetaData beanMetaData) throws Exception
-   {
-      try
-      {
-         return controller.install(beanMetaData);
-      }
-      catch (Exception e)
-      {
-         throw e;
-      }
-      catch (Throwable t)
-      {
-         throw new RuntimeException("Error during install: " + beanMetaData, t);
-      }
-   }
-   
-   protected void change(KernelControllerContext controllerContext, ControllerState state) throws Exception
-   {
-      try
-      {
-         controller.change(controllerContext, state);
-      }
-      catch (Exception e)
-      {
-         throw e;
-      }
-      catch (Throwable t)
-      {
-         throw new RuntimeException("Error during change: " + controllerContext, t);
-      }
-   }
-   
-   protected void install(KernelControllerContext controllerContext) throws Exception
-   {
-      change(controllerContext, ControllerState.CONFIGURED);
-   }
-   
-   protected void resolve(KernelControllerContext controllerContext) throws Exception
-   {
-      change(controllerContext, ControllerState.CREATE);
-   }
-   
-   protected void unresolve(KernelControllerContext controllerContext) throws Exception
-   {
-      change(controllerContext, ControllerState.CONFIGURED);
-   }
-   
-   protected void start(KernelControllerContext controllerContext) throws Exception
-   {
-      change(controllerContext, ControllerState.INSTALLED);
-   }
-   
-   protected void stop(KernelControllerContext controllerContext) throws Exception
-   {
-      change(controllerContext, ControllerState.CREATE);
-   }
-
-   protected void uninstall(KernelControllerContext context)
-   {
-      controller.uninstall(context.getName());
-   }
-   
-   protected void setUp() throws Exception
-   {
-      super.setUp();
-      
-      // Bootstrap the kernel
-      AbstractBootstrap bootstrap = new BasicBootstrap();
-      bootstrap.run();
-      Kernel kernel = bootstrap.getKernel();
-      controller = kernel.getController();
-
-      system = new DefaultClassLoaderSystem();
-      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
-      defaultDomain.setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY);
-
-      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("ClassLoading", ClassLoading.class.getName());
-      builder.addMethodInstallCallback("addModule", null, null, ControllerState.CONFIGURED, null);
-      builder.addMethodUninstallCallback("removeModule", null, null, ControllerState.CONFIGURED, null);
-
-      install(builder.getBeanMetaData());
-   }
-
-   protected void tearDown() throws Exception
-   {
-      controller.shutdown();
-      super.tearDown();
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/AbstractMockLifeCycleUnitTest.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/AbstractMockLifeCycleUnitTest.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/AbstractMockLifeCycleUnitTest.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/AbstractMockLifeCycleUnitTest.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,238 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, 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.test.classloading.lifecycle.test;
+
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem;
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
+import org.jboss.dependency.spi.ControllerMode;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.plugins.bootstrap.AbstractBootstrap;
+import org.jboss.kernel.plugins.bootstrap.basic.BasicBootstrap;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.test.classloading.AbstractClassLoadingTest;
+import org.jboss.test.classloading.lifecycle.support.a.MockLifeCycle;
+import org.jboss.test.classloading.lifecycle.support.a.MockLifeCycleClassLoaderPolicyModule;
+
+/**
+ * AbstractMockLifeCycleUnitTest.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public abstract class AbstractMockLifeCycleUnitTest extends AbstractClassLoadingTest
+{
+   private KernelController controller;
+
+   protected ClassLoaderSystem system;
+
+   public AbstractMockLifeCycleUnitTest(String name)
+   {
+      super(name);
+   }
+
+   protected void assertNoClassLoader(KernelControllerContext context) throws Exception
+   {
+      MockLifeCycleClassLoaderPolicyModule module = assertMockClassPolicyModule(context);
+      ClassLoader cl = module.getClassLoader();
+      assertNull("" + cl, cl);
+   }
+
+   protected ClassLoader assertClassLoader(KernelControllerContext context) throws Exception
+   {
+      MockLifeCycleClassLoaderPolicyModule module = assertMockClassPolicyModule(context);
+      ClassLoader cl = module.getClassLoader();
+      assertNotNull("Should be a classloader for " + module, cl);
+      return cl;
+   }
+   
+   protected MockLifeCycle assertNotResolved(KernelControllerContext context) throws Exception
+   {
+      assertNoClassLoader(context);
+      MockLifeCycle lifeCycle = assertLifeCycle(context);
+      assertFalse(context.getName() + " should be unresolved", lifeCycle.isResolved());
+      assertFalse(context.getName() + " should be no resolved notification", lifeCycle.gotResolved);
+      assertFalse(context.getName() + " should not be started", lifeCycle.isStarted());
+      return lifeCycle;
+   }
+   
+   protected MockLifeCycle assertUnresolved(KernelControllerContext context) throws Exception
+   {
+      assertNoClassLoader(context);
+      MockLifeCycle lifeCycle = assertLifeCycle(context);
+      assertFalse(context.getName() + " should be unresolved", lifeCycle.isResolved());
+      assertTrue(context.getName() + " should be an unresolved notification", lifeCycle.gotUnresolved);
+      assertFalse(context.getName() + " should not be started", lifeCycle.isStarted());
+      return lifeCycle;
+   }
+   
+   protected ClassLoader assertResolved(KernelControllerContext context) throws Exception
+   {
+      MockLifeCycle lifeCycle = assertLifeCycle(context);
+      assertTrue(context.getName() + " should be resolved: " + context.getDependencyInfo().getUnresolvedDependencies(null), lifeCycle.isResolved());
+      assertTrue(context.getName() + " should be a resolved notification", lifeCycle.gotResolved);
+      assertFalse(context.getName() + " should not be started", lifeCycle.isStarted());
+      return assertClassLoader(context);
+   }
+   
+   protected ClassLoader assertStarted(KernelControllerContext context) throws Exception
+   {
+      MockLifeCycle lifeCycle = assertLifeCycle(context);
+      assertTrue(context.getName() + " should be resolved: " + context.getDependencyInfo().getUnresolvedDependencies(null), lifeCycle.isResolved());
+      assertTrue(context.getName() + " should be started", lifeCycle.isStarted());
+      assertEquals(ControllerState.INSTALLED, context.getState());
+      return assertClassLoader(context);
+   }
+
+   protected MockLifeCycle assertLifeCycle(KernelControllerContext context) throws Exception
+   {
+      MockLifeCycleClassLoaderPolicyModule module = assertMockClassPolicyModule(context);
+      MockLifeCycle result = (MockLifeCycle) module.getLifeCycle();
+      assertNotNull(result);
+      return result;
+   }
+
+   protected MockLifeCycleClassLoaderPolicyModule assertMockClassPolicyModule(KernelControllerContext context) throws Exception
+   {
+      MockLifeCycleClassLoaderPolicyModule module = (MockLifeCycleClassLoaderPolicyModule) context.getTarget();
+      assertNotNull("Should be a module for " + context, module);
+      return module;
+   }
+
+   protected KernelControllerContext install(MockClassLoadingMetaData metaData) throws Exception
+   {
+      // Determine some properties
+      String contextName = metaData.getName() + ":" + metaData.getVersion().toString(); 
+      
+      // Create the module
+      MockLifeCycleClassLoaderPolicyModule mockModule = new MockLifeCycleClassLoaderPolicyModule(metaData, contextName);
+      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(contextName, mockModule.getClass().getName());
+      builder.setConstructorValue(mockModule);
+      builder.setMode(ControllerMode.MANUAL);
+      builder.addConstructorParameter(MockClassLoadingMetaData.class.getName(), metaData);
+      builder.addConstructorParameter(String.class.getName(), contextName);
+      builder.setNoClassLoader();
+      builder.setCreate("registerClassLoaderPolicy");
+      builder.addCreateParameter(ClassLoaderSystem.class.getName(), builder.createValue(system));
+      builder.setDestroy("removeClassLoader");
+      BeanMetaData module = builder.getBeanMetaData();
+      KernelControllerContext result = install(module);
+      change(result, ControllerState.CONFIGURED);
+      return result;
+   }
+   
+   protected KernelControllerContext install(BeanMetaData beanMetaData) throws Exception
+   {
+      try
+      {
+         return controller.install(beanMetaData);
+      }
+      catch (Exception e)
+      {
+         throw e;
+      }
+      catch (Throwable t)
+      {
+         throw new RuntimeException("Error during install: " + beanMetaData, t);
+      }
+   }
+   
+   protected void change(KernelControllerContext controllerContext, ControllerState state) throws Exception
+   {
+      try
+      {
+         controller.change(controllerContext, state);
+      }
+      catch (Exception e)
+      {
+         throw e;
+      }
+      catch (Throwable t)
+      {
+         throw new RuntimeException("Error during change: " + controllerContext, t);
+      }
+   }
+   
+   protected void install(KernelControllerContext controllerContext) throws Exception
+   {
+      change(controllerContext, ControllerState.CONFIGURED);
+   }
+   
+   protected void resolve(KernelControllerContext controllerContext) throws Exception
+   {
+      change(controllerContext, ControllerState.CREATE);
+   }
+   
+   protected void unresolve(KernelControllerContext controllerContext) throws Exception
+   {
+      change(controllerContext, ControllerState.CONFIGURED);
+   }
+   
+   protected void start(KernelControllerContext controllerContext) throws Exception
+   {
+      change(controllerContext, ControllerState.INSTALLED);
+   }
+   
+   protected void stop(KernelControllerContext controllerContext) throws Exception
+   {
+      change(controllerContext, ControllerState.CREATE);
+   }
+
+   protected void uninstall(KernelControllerContext context)
+   {
+      controller.uninstall(context.getName());
+   }
+   
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+      
+      // Bootstrap the kernel
+      AbstractBootstrap bootstrap = new BasicBootstrap();
+      bootstrap.run();
+      Kernel kernel = bootstrap.getKernel();
+      controller = kernel.getController();
+
+      system = new DefaultClassLoaderSystem();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+      defaultDomain.setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY);
+
+      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("ClassLoading", ClassLoading.class.getName());
+      builder.addMethodInstallCallback("addModule", null, null, ControllerState.CONFIGURED, null);
+      builder.addMethodUninstallCallback("removeModule", null, null, ControllerState.CONFIGURED, null);
+
+      install(builder.getBeanMetaData());
+   }
+
+   protected void tearDown() throws Exception
+   {
+      controller.shutdown();
+      super.tearDown();
+   }
+}

Deleted: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/LifeCycleUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/LifeCycleUnitTestCase.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/LifeCycleUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,236 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, 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.test.classloading.lifecycle.test;
-
-import junit.framework.Test;
-
-import org.jboss.classloader.plugins.ClassLoaderUtils;
-import org.jboss.classloading.plugins.metadata.PackageRequirement;
-import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
-import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.test.classloading.lifecycle.support.a.A;
-import org.jboss.test.classloading.lifecycle.support.a.MockLifeCycle;
-
-/**
- * LifeCycleUnitTestCase.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class LifeCycleUnitTestCase extends AbstractMockLifeCycleUnitTest
-{
-   public static Test suite()
-   {
-      return suite(LifeCycleUnitTestCase.class);
-   }
-
-   public LifeCycleUnitTestCase(String name)
-   {
-      super(name);
-   }
-
-   static String packageA = ClassLoaderUtils.getClassPackageName(A.class.getName());
-   
-   public void testInstall() throws Exception
-   {
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         assertNotResolved(context);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-   
-   public void testResolve() throws Exception
-   {
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         assertNotResolved(context);
-         
-         resolve(context);
-         assertResolved(context);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-   
-   public void testUnresolve() throws Exception
-   {
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         assertNotResolved(context);
-         
-         resolve(context);
-         assertResolved(context);
-         
-         unresolve(context);
-         assertUnresolved(context);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-   
-   public void testStart() throws Exception
-   {
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         assertNotResolved(context);
-         
-         start(context);
-         assertStarted(context);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-   
-   public void testStop() throws Exception
-   {
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         assertNotResolved(context);
-         
-         start(context);
-         assertStarted(context);
-         
-         stop(context);
-         assertResolved(context);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-   
-   public void testNoLazyResolve() throws Exception
-   {
-      MockClassLoadingMetaData metaDataA = new MockClassLoadingMetaData("a");
-      metaDataA.setPathsAndPackageNames(A.class);
-      KernelControllerContext contextA = install(metaDataA);
-
-      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      metaData.getRequirements().addRequirement(factory.createRequirePackage(packageA));
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         assertNotResolved(context);
-         assertNotResolved(contextA);
-         
-         resolve(context);
-         assertNotResolved(context);
-         assertNotResolved(contextA);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-   
-   public void testLazyResolve() throws Exception
-   {
-      MockClassLoadingMetaData metaDataA = new MockClassLoadingMetaData("a");
-      metaDataA.setPathsAndPackageNames(A.class);
-      KernelControllerContext contextA = install(metaDataA);
-
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      metaData.getRequirements().addRequirement(new PackageRequirement(ClassLoaderUtils.getClassPackageName(A.class.getName())));
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         assertNotResolved(context);
-         MockLifeCycle lifeCycleA = assertNotResolved(contextA);
-         lifeCycleA.lazyResolve = true;
-         
-         resolve(context);
-         ClassLoader cl = assertResolved(context);
-
-         ClassLoader clA = assertResolved(contextA);
-         
-         assertLoadClass(A.class, cl, clA);
-         assertTrue("Should get resolve invocation", lifeCycleA.gotResolve);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-   
-   public void testNotLazyStart() throws Exception
-   {
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      metaData.setPathsAndPackageNames(A.class);
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         assertNotResolved(context);
-         
-         resolve(context);
-         ClassLoader cl = assertResolved(context);
-         assertLoadClass(A.class, cl);
-         assertResolved(context);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-   
-   public void testLazyStart() throws Exception
-   {
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      metaData.setPathsAndPackageNames(A.class);
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         MockLifeCycle lifeCycle = assertNotResolved(context);
-         lifeCycle.lazyStart = true;
-         
-         resolve(context);
-         ClassLoader cl = assertResolved(context);
-         assertLoadClass(A.class, cl);
-         assertTrue("Should get start invocation", lifeCycle.gotStart);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/LifeCycleUnitTestCase.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/LifeCycleUnitTestCase.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/LifeCycleUnitTestCase.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/lifecycle/test/LifeCycleUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,236 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, 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.test.classloading.lifecycle.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloading.plugins.metadata.PackageRequirement;
+import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.test.classloading.lifecycle.support.a.A;
+import org.jboss.test.classloading.lifecycle.support.a.MockLifeCycle;
+
+/**
+ * LifeCycleUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class LifeCycleUnitTestCase extends AbstractMockLifeCycleUnitTest
+{
+   public static Test suite()
+   {
+      return suite(LifeCycleUnitTestCase.class);
+   }
+
+   public LifeCycleUnitTestCase(String name)
+   {
+      super(name);
+   }
+
+   static String packageA = ClassLoaderUtils.getClassPackageName(A.class.getName());
+   
+   public void testInstall() throws Exception
+   {
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         assertNotResolved(context);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+   
+   public void testResolve() throws Exception
+   {
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         assertNotResolved(context);
+         
+         resolve(context);
+         assertResolved(context);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+   
+   public void testUnresolve() throws Exception
+   {
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         assertNotResolved(context);
+         
+         resolve(context);
+         assertResolved(context);
+         
+         unresolve(context);
+         assertUnresolved(context);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+   
+   public void testStart() throws Exception
+   {
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         assertNotResolved(context);
+         
+         start(context);
+         assertStarted(context);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+   
+   public void testStop() throws Exception
+   {
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         assertNotResolved(context);
+         
+         start(context);
+         assertStarted(context);
+         
+         stop(context);
+         assertResolved(context);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+   
+   public void testNoLazyResolve() throws Exception
+   {
+      MockClassLoadingMetaData metaDataA = new MockClassLoadingMetaData("a");
+      metaDataA.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA = install(metaDataA);
+
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      metaData.getRequirements().addRequirement(factory.createRequirePackage(packageA));
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         assertNotResolved(context);
+         assertNotResolved(contextA);
+         
+         resolve(context);
+         assertNotResolved(context);
+         assertNotResolved(contextA);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+   
+   public void testLazyResolve() throws Exception
+   {
+      MockClassLoadingMetaData metaDataA = new MockClassLoadingMetaData("a");
+      metaDataA.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA = install(metaDataA);
+
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      metaData.getRequirements().addRequirement(new PackageRequirement(ClassLoaderUtils.getClassPackageName(A.class.getName())));
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         assertNotResolved(context);
+         MockLifeCycle lifeCycleA = assertNotResolved(contextA);
+         lifeCycleA.lazyResolve = true;
+         
+         resolve(context);
+         ClassLoader cl = assertResolved(context);
+
+         ClassLoader clA = assertResolved(contextA);
+         
+         assertLoadClass(A.class, cl, clA);
+         assertTrue("Should get resolve invocation", lifeCycleA.gotResolve);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+   
+   public void testNotLazyStart() throws Exception
+   {
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      metaData.setPathsAndPackageNames(A.class);
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         assertNotResolved(context);
+         
+         resolve(context);
+         ClassLoader cl = assertResolved(context);
+         assertLoadClass(A.class, cl);
+         assertResolved(context);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+   
+   public void testLazyStart() throws Exception
+   {
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      metaData.setPathsAndPackageNames(A.class);
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         MockLifeCycle lifeCycle = assertNotResolved(context);
+         lifeCycle.lazyStart = true;
+         
+         resolve(context);
+         ClassLoader cl = assertResolved(context);
+         assertLoadClass(A.class, cl);
+         assertTrue("Should get start invocation", lifeCycle.gotStart);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+}

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/test/ClassLoadingMetaDataUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/test/ClassLoadingMetaDataUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/test/ClassLoadingMetaDataUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -27,6 +27,7 @@
 import junit.framework.Test;
 
 import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.classloading.spi.metadata.CapabilitiesMetaData;
 import org.jboss.classloading.spi.metadata.Capability;
 import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
@@ -181,24 +182,24 @@
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
       assertNull(test.getIncluded());
-      test.setIncluded(ClassFilter.EVERYTHING);
-      assertEquals(ClassFilter.EVERYTHING, test.getIncluded());
+      test.setIncluded(ClassFilterUtils.EVERYTHING);
+      assertEquals(ClassFilterUtils.EVERYTHING, test.getIncluded());
    }
    
    public void testSetExcluded() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
       assertNull(test.getExcluded());
-      test.setExcluded(ClassFilter.EVERYTHING);
-      assertEquals(ClassFilter.EVERYTHING, test.getExcluded());
+      test.setExcluded(ClassFilterUtils.EVERYTHING);
+      assertEquals(ClassFilterUtils.EVERYTHING, test.getExcluded());
    }
    
    public void testSetExcludedExport() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
       assertNull(test.getExcludedExport());
-      test.setExcludedExport(ClassFilter.EVERYTHING);
-      assertEquals(ClassFilter.EVERYTHING, test.getExcludedExport());
+      test.setExcludedExport(ClassFilterUtils.EVERYTHING);
+      assertEquals(ClassFilterUtils.EVERYTHING, test.getExcludedExport());
    }
    
    public void testGetIncluded() throws Exception
@@ -211,14 +212,14 @@
       assertTrue(filter.matchesClassName(Object.class.getName()));
       assertFalse(filter.matchesClassName(Collection.class.getName()));
       
-      test.setIncluded(ClassFilter.JAVA_ONLY);
+      test.setIncluded(ClassFilterUtils.JAVA_ONLY);
       filter = test.getIncluded();
       assertTrue(filter.matchesClassName(Object.class.getName()));
       assertFalse(filter.matchesClassName(Collection.class.getName()));
       
       test.setIncludedPackages(null);
       filter = test.getIncluded();
-      assertEquals(ClassFilter.JAVA_ONLY, filter);
+      assertEquals(ClassFilterUtils.JAVA_ONLY, filter);
       assertTrue(filter.matchesClassName(Object.class.getName()));
       assertTrue(filter.matchesClassName(Collection.class.getName()));
    }
@@ -233,14 +234,14 @@
       assertTrue(filter.matchesClassName(Object.class.getName()));
       assertFalse(filter.matchesClassName(Collection.class.getName()));
       
-      test.setExcluded(ClassFilter.JAVA_ONLY);
+      test.setExcluded(ClassFilterUtils.JAVA_ONLY);
       filter = test.getExcluded();
       assertTrue(filter.matchesClassName(Object.class.getName()));
       assertFalse(filter.matchesClassName(Collection.class.getName()));
       
       test.setExcludedPackages(null);
       filter = test.getExcluded();
-      assertEquals(ClassFilter.JAVA_ONLY, filter);
+      assertEquals(ClassFilterUtils.JAVA_ONLY, filter);
       assertTrue(filter.matchesClassName(Object.class.getName()));
       assertTrue(filter.matchesClassName(Collection.class.getName()));
    }
@@ -255,14 +256,14 @@
       assertTrue(filter.matchesClassName(Object.class.getName()));
       assertFalse(filter.matchesClassName(Collection.class.getName()));
       
-      test.setExcludedExport(ClassFilter.JAVA_ONLY);
+      test.setExcludedExport(ClassFilterUtils.JAVA_ONLY);
       filter = test.getExcludedExport();
       assertTrue(filter.matchesClassName(Object.class.getName()));
       assertFalse(filter.matchesClassName(Collection.class.getName()));
       
       test.setExcludedExportPackages(null);
       filter = test.getExcludedExport();
-      assertEquals(ClassFilter.JAVA_ONLY, filter);
+      assertEquals(ClassFilterUtils.JAVA_ONLY, filter);
       assertTrue(filter.matchesClassName(Object.class.getName()));
       assertTrue(filter.matchesClassName(Collection.class.getName()));
    }

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/test/ManagedObjectClassLoadingMetaDataUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/test/ManagedObjectClassLoadingMetaDataUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/test/ManagedObjectClassLoadingMetaDataUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -44,7 +44,7 @@
 
 /**
  * ManagedObjectClassLoadingMetaDataUnitTestCase.
- * 
+ *
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $
  */
@@ -53,7 +53,7 @@
    private ManagedObjectFactory moFactory = ManagedObjectFactory.getInstance();
    private MetaTypeFactory mtFactory = MetaTypeFactory.getInstance();
    private MetaValueFactory mvFactory = MetaValueFactory.getInstance();
-   
+
    public static Test suite()
    {
       return suite(ManagedObjectClassLoadingMetaDataUnitTestCase.class);
@@ -63,12 +63,12 @@
    {
       super(name);
    }
-   
+
    protected ManagedObject assertManagedObject(ClassLoadingMetaData test)
    {
       ManagedObject result = moFactory.initManagedObject(test, null, null);
       assertNotNull(result);
-      List<String> expectedProperties = Arrays.asList("name", "version", "domain", "parentDomain", "exportAll", "included", "excluded", "excludedExport", "importAll", "parentFirst", "cache", "blackList", "capabilities", "requirements");
+      List<String> expectedProperties = Arrays.asList("name", "version", "domain", "parentDomain", "topLevelClassLoader", "exportAll", "included", "excluded", "excludedExport", "importAll", "parentFirst", "cache", "blackList", "capabilities", "requirements");
       Set<String> actualProperties = result.getPropertyNames();
       for (String expected : expectedProperties)
       {
@@ -82,7 +82,7 @@
       }
       return result;
    }
-   
+
    protected ManagedProperty assertManagedProperty(ManagedObject mo, String name, MetaType metaType, MetaValue metaValue)
    {
       ManagedProperty property = mo.getProperty(name);
@@ -91,7 +91,7 @@
       assertEquals(metaValue, property.getValue());
       return property;
    }
-   
+
    protected <T> ManagedProperty assertManagedProperty(ManagedObject mo, String name, Class<T> type, T value)
    {
       MetaType metaType = mtFactory.resolve(type);
@@ -101,7 +101,7 @@
          metaValue = mvFactory.create(value);
       return assertManagedProperty(mo, name, metaType, metaValue);
    }
-   
+
    public void testConstructor() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -110,6 +110,7 @@
       assertManagedProperty(mo, "version", Version.class, Version.DEFAULT_VERSION);
       assertManagedProperty(mo, "domain", String.class, null);
       assertManagedProperty(mo, "parentDomain", String.class, null);
+      assertManagedProperty(mo, "topLevelClassLoader", boolean.class, false);
       assertManagedProperty(mo, "exportAll", ExportAll.class, null);
       assertManagedProperty(mo, "included", String.class, null);
       assertManagedProperty(mo, "excluded", String.class, null);
@@ -119,7 +120,7 @@
       assertManagedProperty(mo, "capabilities", CapabilitiesMetaData.class, new CapabilitiesMetaData());
       assertManagedProperty(mo, "requirements", RequirementsMetaData.class, new RequirementsMetaData());
    }
-   
+
    public void testSetName() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -127,7 +128,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "name", String.class, "test");
    }
-   
+
    public void testSetVersion() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -143,7 +144,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "domain", String.class, "domain");
    }
-   
+
    public void testSetParentDomain() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -151,7 +152,15 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "parentDomain", String.class, "parentDomain");
    }
-   
+
+   public void testSetTopLevelClassLoader() throws Exception
+   {
+      ClassLoadingMetaData test = new ClassLoadingMetaData();
+      test.setTopLevelClassLoader(true);
+      ManagedObject mo = assertManagedObject(test);
+      assertManagedProperty(mo, "topLevelClassLoader", boolean.class, true);
+   }
+
    public void testSetExportAll() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -159,7 +168,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "exportAll", ExportAll.class, ExportAll.ALL);
    }
-   
+
    public void testSetIncludedPackages() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -167,7 +176,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "included", String.class, "Included");
    }
-   
+
    public void testSetExcludedPackages() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -175,7 +184,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "excluded", String.class, "Excluded");
    }
-   
+
    public void testSetExcludedExportPackages() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -183,7 +192,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "excludedExport", String.class, "ExcludedExport");
    }
-   
+
    public void testSetImportAll() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -191,7 +200,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "importAll", boolean.class, true);
    }
-   
+
    public void testJ2seClassLoadingComplaince() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -199,7 +208,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "parentFirst", boolean.class, false);
    }
-   
+
    public void testCacheable() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -207,7 +216,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "cache", boolean.class, false);
    }
-   
+
    public void testBlackList() throws Exception
    {
       ClassLoadingMetaData test = new ClassLoadingMetaData();
@@ -215,7 +224,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "blackList", boolean.class, false);
    }
-   
+
    public void testCapabilities() throws Exception
    {
       ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
@@ -225,7 +234,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "requirements", RequirementsMetaData.class, test.getRequirements());
    }
-   
+
    public void testRequirements() throws Exception
    {
       ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();

Modified: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/xml/test/ClassLoadingMetaDataXmlUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/xml/test/ClassLoadingMetaDataXmlUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/metadata/xml/test/ClassLoadingMetaDataXmlUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -63,6 +63,7 @@
       assertEquals(Version.DEFAULT_VERSION, result.getVersion());
       assertNull(result.getDomain());
       assertNull(result.getParentDomain());
+      assertFalse(result.isTopLevelClassLoader());
       assertNull(result.getExportAll());
       assertNull(result.getIncludedPackages());
       assertNull(result.getExcludedPackages());
@@ -93,6 +94,12 @@
       assertEquals("testParentDomain", result.getParentDomain());
    }
 
+   public void testModuleTopLevelClassLoader() throws Exception
+   {
+      ClassLoadingMetaData result = unmarshal();
+      assertTrue(result.isTopLevelClassLoader());
+   }
+
    public void testModuleExportAll() throws Exception
    {
       ClassLoadingMetaData result = unmarshal();

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/resolver)

Deleted: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/ResolverTestSuite.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/resolver/ResolverTestSuite.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/ResolverTestSuite.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,61 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, 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.test.classloading.resolver;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import org.jboss.test.classloading.lifecycle.test.LifeCycleUnitTestCase;
-
-/**
- * LifeCycle Test Suite.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 37459 $
- */
-public class ResolverTestSuite extends TestSuite
-{
-   /**
-    * For running the testsuite from the command line
-    * 
-    * @param args the command line args
-    */
-   public static void main(String[] args)
-   {
-      TestRunner.run(suite());
-   }
-
-   /**
-    * Create the testsuite
-    * 
-    * @return the testsuite
-    */
-   public static Test suite()
-   {
-      TestSuite suite = new TestSuite("LifeCycle Tests");
-
-      suite.addTest(LifeCycleUnitTestCase.suite());
-
-      return suite;
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/ResolverTestSuite.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/resolver/ResolverTestSuite.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/ResolverTestSuite.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/ResolverTestSuite.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,61 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, 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.test.classloading.resolver;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+import org.jboss.test.classloading.lifecycle.test.LifeCycleUnitTestCase;
+
+/**
+ * LifeCycle Test Suite.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 37459 $
+ */
+public class ResolverTestSuite extends TestSuite
+{
+   /**
+    * For running the testsuite from the command line
+    * 
+    * @param args the command line args
+    */
+   public static void main(String[] args)
+   {
+      TestRunner.run(suite());
+   }
+
+   /**
+    * Create the testsuite
+    * 
+    * @return the testsuite
+    */
+   public static Test suite()
+   {
+      TestSuite suite = new TestSuite("LifeCycle Tests");
+
+      suite.addTest(LifeCycleUnitTestCase.suite());
+
+      return suite;
+   }
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/resolver/support)

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a)

Deleted: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/A.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/A.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/A.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,32 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, 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.test.classloading.resolver.support.a;
-
-/**
- * A.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class A
-{
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/A.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/A.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/A.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/support/a/A.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, 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.test.classloading.resolver.support.a;
+
+/**
+ * A.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class A
+{
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/test (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/resolver/test)

Deleted: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/test/ResolverUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/resolver/test/ResolverUnitTestCase.java	2009-12-18 19:31:18 UTC (rev 98000)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/test/ResolverUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -1,144 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, 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.test.classloading.resolver.test;
-
-import junit.framework.Test;
-
-import org.jboss.classloader.plugins.ClassLoaderUtils;
-import org.jboss.classloading.plugins.metadata.PackageRequirement;
-import org.jboss.classloading.spi.dependency.ClassLoading;
-import org.jboss.classloading.spi.dependency.ResolutionContext;
-import org.jboss.classloading.spi.dependency.Resolver;
-import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
-import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
-import org.jboss.classloading.spi.metadata.Requirement;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.test.classloading.dependency.test.AbstractMockClassLoaderUnitTest;
-import org.jboss.test.classloading.resolver.support.a.A;
-
-/**
- * ResolverUnitTestCase.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class ResolverUnitTestCase extends AbstractMockClassLoaderUnitTest implements Resolver
-{
-   public static Test suite()
-   {
-      return suite(ResolverUnitTestCase.class);
-   }
-
-   static String packageA = ClassLoaderUtils.getClassPackageName(A.class.getName());
-   
-   boolean doResolve = true;
-   KernelControllerContext contextA = null;
-   ClassLoader other = null;
-   
-   public ResolverUnitTestCase(String name)
-   {
-      super(name);
-   }
-   
-   public boolean resolve(ResolutionContext context)
-   {
-      if (doResolve == false)
-         return false;
-      
-      Requirement requirement = context.getRequirement();
-      if (requirement instanceof PackageRequirement == false)
-         return false;
-      
-      PackageRequirement packageRequirement = (PackageRequirement) requirement;
-      if (packageA.equals(packageRequirement.getName()) == false)
-         return false;
-      
-      if (other != null)
-         return true;
-
-      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
-      a.setPathsAndPackageNames(A.class);
-      try
-      {
-         contextA = install(a);
-         other = assertClassLoader(contextA);
-         return true;
-      }
-      catch (Exception e)
-      {
-         getLog().warn("Error:", e);
-      }
-      return false;
-   }
-
-   public void testResolve() throws Exception
-   {
-      doResolve = true;
-
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      metaData.getRequirements().addRequirement(new PackageRequirement(ClassLoaderUtils.getClassPackageName(A.class.getName())));
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         ClassLoader cl = assertClassLoader(context);
-         assertNotNull("Should have resolved the other classloader", other);
-         assertLoadClass(A.class, cl, other);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-
-   public void testNotResolved() throws Exception
-   {
-      doResolve = false;
-      
-      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
-      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
-      metaData.getRequirements().addRequirement(factory.createRequirePackage(packageA));
-      KernelControllerContext context = install(metaData);
-      try
-      {
-         assertNoClassLoader(context);
-         assertNull("Should not have resolved the other classloader", other);
-      }
-      finally
-      {
-         uninstall(context);
-      }
-   }
-
-   protected void setUp() throws Exception
-   {
-      super.setUp();
-      ClassLoading classLoading = getBean("ClassLoading", ClassLoading.class);
-      classLoading.addResolver(this);
-   }
-
-   protected void tearDown() throws Exception
-   {
-      if (contextA != null)
-         uninstall(contextA);
-      super.tearDown();
-   }
-}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/test/ResolverUnitTestCase.java (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/resolver/test/ResolverUnitTestCase.java)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/test/ResolverUnitTestCase.java	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/java/org/jboss/test/classloading/resolver/test/ResolverUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,144 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, 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.test.classloading.resolver.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloading.plugins.metadata.PackageRequirement;
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.ResolutionContext;
+import org.jboss.classloading.spi.dependency.Resolver;
+import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.metadata.Requirement;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.test.classloading.dependency.test.AbstractMockClassLoaderUnitTest;
+import org.jboss.test.classloading.resolver.support.a.A;
+
+/**
+ * ResolverUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ResolverUnitTestCase extends AbstractMockClassLoaderUnitTest implements Resolver
+{
+   public static Test suite()
+   {
+      return suite(ResolverUnitTestCase.class);
+   }
+
+   static String packageA = ClassLoaderUtils.getClassPackageName(A.class.getName());
+   
+   boolean doResolve = true;
+   KernelControllerContext contextA = null;
+   ClassLoader other = null;
+   
+   public ResolverUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public boolean resolve(ResolutionContext context)
+   {
+      if (doResolve == false)
+         return false;
+      
+      Requirement requirement = context.getRequirement();
+      if (requirement instanceof PackageRequirement == false)
+         return false;
+      
+      PackageRequirement packageRequirement = (PackageRequirement) requirement;
+      if (packageA.equals(packageRequirement.getName()) == false)
+         return false;
+      
+      if (other != null)
+         return true;
+
+      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+      a.setPathsAndPackageNames(A.class);
+      try
+      {
+         contextA = install(a);
+         other = assertClassLoader(contextA);
+         return true;
+      }
+      catch (Exception e)
+      {
+         getLog().warn("Error:", e);
+      }
+      return false;
+   }
+
+   public void testResolve() throws Exception
+   {
+      doResolve = true;
+
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      metaData.getRequirements().addRequirement(new PackageRequirement(ClassLoaderUtils.getClassPackageName(A.class.getName())));
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         ClassLoader cl = assertClassLoader(context);
+         assertNotNull("Should have resolved the other classloader", other);
+         assertLoadClass(A.class, cl, other);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+
+   public void testNotResolved() throws Exception
+   {
+      doResolve = false;
+      
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      MockClassLoadingMetaData metaData = new MockClassLoadingMetaData("test");
+      metaData.getRequirements().addRequirement(factory.createRequirePackage(packageA));
+      KernelControllerContext context = install(metaData);
+      try
+      {
+         assertNoClassLoader(context);
+         assertNull("Should not have resolved the other classloader", other);
+      }
+      finally
+      {
+         uninstall(context);
+      }
+   }
+
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+      ClassLoading classLoading = getBean("ClassLoading", ClassLoading.class);
+      classLoading.addResolver(this);
+   }
+
+   protected void tearDown() throws Exception
+   {
+      if (contextA != null)
+         uninstall(contextA);
+      super.tearDown();
+   }
+}

Copied: projects/jboss-cl/branches/vfs3-int/classloading/src/test/resources/org/jboss/test/classloading/metadata/xml/test/ModuleTopLevelClassLoader.xml (from rev 98000, projects/jboss-cl/trunk/classloading/src/test/resources/org/jboss/test/classloading/metadata/xml/test/ModuleTopLevelClassLoader.xml)
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading/src/test/resources/org/jboss/test/classloading/metadata/xml/test/ModuleTopLevelClassLoader.xml	                        (rev 0)
+++ projects/jboss-cl/branches/vfs3-int/classloading/src/test/resources/org/jboss/test/classloading/metadata/xml/test/ModuleTopLevelClassLoader.xml	2009-12-19 02:42:11 UTC (rev 98009)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloading xmlns="urn:jboss:classloading:1.0"
+              name="test"
+              top-level-classloader="true">
+</classloading>

Modified: projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/java/org/jboss/classloading/plugins/vfs/VFSResourceVisitor.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/java/org/jboss/classloading/plugins/vfs/VFSResourceVisitor.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/java/org/jboss/classloading/plugins/vfs/VFSResourceVisitor.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -23,6 +23,7 @@
 
 import java.net.URL;
 
+import org.jboss.classloader.plugins.ClassLoaderUtils;
 import org.jboss.classloader.spi.filter.ClassFilter;
 import org.jboss.classloading.spi.visitor.ResourceContext;
 import org.jboss.classloading.spi.visitor.ResourceFilter;
@@ -121,10 +122,8 @@
       URL rootURL = root.toURL();
       for (URL url : urls)
       {
-         if (rootURL.equals(url))
-         {
+         if (ClassLoaderUtils.compareURL(rootURL, url) == 0)
             return true;
-         }
       }
       return false;
    }

Modified: projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/java/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/java/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/java/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -42,6 +42,7 @@
 import org.jboss.classloader.spi.DelegateLoader;
 import org.jboss.classloader.spi.PackageInformation;
 import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilterUtils;
 import org.jboss.classloader.spi.filter.FilteredDelegateLoader;
 import org.jboss.classloading.plugins.vfs.PackageVisitor;
 import org.jboss.classloading.spi.metadata.ExportAll;
@@ -444,7 +445,7 @@
    public DelegateLoader getExported()
    {
       if (getExportAll() != null)
-         return new FilteredDelegateLoader(this, ClassFilter.EVERYTHING);
+         return new FilteredDelegateLoader(this, ClassFilterUtils.EVERYTHING);
       return super.getExported();
    }
 
@@ -513,6 +514,7 @@
    }
 
    @Override
+   // FindBugs: The Set doesn't use equals/hashCode
    public void getResources(String name, Set<URL> urls) throws IOException
    {
       if (checkFilters(name, "getResources"))

Modified: projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/resources/schema/jboss-classloading-1.0.xsd
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/resources/schema/jboss-classloading-1.0.xsd	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/main/resources/schema/jboss-classloading-1.0.xsd	2009-12-19 02:42:11 UTC (rev 98009)
@@ -91,6 +91,17 @@
             </xsd:documentation>
          </xsd:annotation>
       </xsd:attribute>
+      <xsd:attribute name="top-level-classloader" type="xsd:boolean" use="optional">
+         <xsd:annotation>
+            <xsd:documentation>
+               <![CDATA[
+               Whether a subdeployment classloader should be a top level classloader,
+               the default is false. This value is ignored when not specified against
+               a subdeployment.
+               ]]>
+            </xsd:documentation>
+         </xsd:annotation>
+      </xsd:attribute>
       <xsd:attribute name="parent-first" type="xsd:boolean" use="optional">
          <xsd:annotation>
             <xsd:documentation>

Modified: projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/ManagedObjectVFSClassLoaderFactoryUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/ManagedObjectVFSClassLoaderFactoryUnitTestCase.java	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/ManagedObjectVFSClassLoaderFactoryUnitTestCase.java	2009-12-19 02:42:11 UTC (rev 98009)
@@ -46,7 +46,7 @@
 
 /**
  * ManagedObjectVFSClassLoaderFactoryUnitTestCase.
- * 
+ *
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $
  */
@@ -55,7 +55,7 @@
    private ManagedObjectFactory moFactory = ManagedObjectFactory.getInstance();
    private MetaTypeFactory mtFactory = MetaTypeFactory.getInstance();
    private MetaValueFactory mvFactory = MetaValueFactory.getInstance();
-   
+
    public static Test suite()
    {
       return suite(ManagedObjectVFSClassLoaderFactoryUnitTestCase.class);
@@ -65,12 +65,12 @@
    {
       super(name);
    }
-   
+
    protected ManagedObject assertManagedObject(VFSClassLoaderFactory test)
    {
       ManagedObject result = moFactory.initManagedObject(test, null, null);
       assertNotNull(result);
-      List<String> expectedProperties = Arrays.asList("name", "version", "context", "domain", "parentDomain", "exportAll", "included", "excluded", "excludedExport", "importAll", "parentFirst", "cache", "blackList", "system", "roots", "capabilities", "requirements");
+      List<String> expectedProperties = Arrays.asList("name", "version", "context", "domain", "parentDomain", "topLevelClassLoader", "exportAll", "included", "excluded", "excludedExport", "importAll", "parentFirst", "cache", "blackList", "system", "roots", "capabilities", "requirements");
       Set<String> actualProperties = result.getPropertyNames();
       for (String expected : expectedProperties)
       {
@@ -84,7 +84,7 @@
       }
       return result;
    }
-   
+
    protected ManagedProperty assertManagedProperty(ManagedObject mo, String name, MetaType metaType, MetaValue metaValue)
    {
       ManagedProperty property = mo.getProperty(name);
@@ -93,7 +93,7 @@
       assertEquals(metaValue, property.getValue());
       return property;
    }
-   
+
    protected ManagedProperty assertManagedProperty(ManagedObject mo, String name, Type type, Object value)
    {
       MetaType metaType = mtFactory.resolve(type);
@@ -103,12 +103,12 @@
          metaValue = mvFactory.create(value, type);
       return assertManagedProperty(mo, name, metaType, metaValue);
    }
-   
+
    protected <T> ManagedProperty assertManagedProperty(ManagedObject mo, String name, Class<T> type, T value)
    {
       return assertManagedProperty(mo, name, (Type) type, value);
    }
-   
+
    public void testConstructor() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -117,6 +117,7 @@
       assertManagedProperty(mo, "version", Version.class, Version.DEFAULT_VERSION);
       assertManagedProperty(mo, "domain", String.class, null);
       assertManagedProperty(mo, "parentDomain", String.class, null);
+      assertManagedProperty(mo, "topLevelClassLoader", boolean.class, false);
       assertManagedProperty(mo, "exportAll", ExportAll.class, null);
       assertManagedProperty(mo, "included", String.class, null);
       assertManagedProperty(mo, "excluded", String.class, null);
@@ -126,7 +127,7 @@
       assertManagedProperty(mo, "capabilities", CapabilitiesMetaData.class, new CapabilitiesMetaData());
       assertManagedProperty(mo, "requirements", RequirementsMetaData.class, new RequirementsMetaData());
    }
-   
+
    public void testSetName() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -134,7 +135,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "name", String.class, "test");
    }
-   
+
    public void testSetVersion() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -142,7 +143,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "version", Version.class, Version.parseVersion("1.0.0"));
    }
-   
+
    public void testContext() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -158,7 +159,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "domain", String.class, "domain");
    }
-   
+
    public void testSetParentDomain() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -166,7 +167,15 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "parentDomain", String.class, "parentDomain");
    }
-   
+
+   public void testSetTopLevelClassLoader() throws Exception
+   {
+      VFSClassLoaderFactory test = new VFSClassLoaderFactory();
+      test.setTopLevelClassLoader(true);
+      ManagedObject mo = assertManagedObject(test);
+      assertManagedProperty(mo, "topLevelClassLoader", boolean.class, true);
+   }
+
    public void testSetExportAll() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -174,7 +183,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "exportAll", ExportAll.class, ExportAll.ALL);
    }
-   
+
    public void testSetIncludedPackages() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -182,7 +191,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "included", String.class, "Included");
    }
-   
+
    public void testSetExcludedPackages() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -190,7 +199,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "excluded", String.class, "Excluded");
    }
-   
+
    public void testSetExcludedExportPackages() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -198,7 +207,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "excludedExport", String.class, "ExcludedExport");
    }
-   
+
    public void testSetImportAll() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -206,7 +215,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "importAll", boolean.class, true);
    }
-   
+
    public void testJ2seClassLoadingComplaince() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -214,7 +223,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "parentFirst", boolean.class, false);
    }
-   
+
    public void testCacheable() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -222,7 +231,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "cache", boolean.class, false);
    }
-   
+
    public void testBlackList() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -230,7 +239,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "blackList", boolean.class, false);
    }
-   
+
    public void testSetSystem() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -238,7 +247,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "system", String.class, "test");
    }
-   
+
    public void testSetRoots() throws Exception
    {
       VFSClassLoaderFactory test = new VFSClassLoaderFactory();
@@ -248,9 +257,9 @@
       Field field = getClass().getField("rootsSignature");
       assertManagedProperty(mo, "roots", field.getGenericType(), roots);
    }
-   
+
    public static List<String> rootsSignature;
-   
+
    public void testCapabilities() throws Exception
    {
       ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
@@ -260,7 +269,7 @@
       ManagedObject mo = assertManagedObject(test);
       assertManagedProperty(mo, "requirements", RequirementsMetaData.class, test.getRequirements());
    }
-   
+
    public void testRequirements() throws Exception
    {
       ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();

Modified: projects/jboss-cl/branches/vfs3-int/pom.xml
===================================================================
--- projects/jboss-cl/branches/vfs3-int/pom.xml	2009-12-19 02:27:42 UTC (rev 98008)
+++ projects/jboss-cl/branches/vfs3-int/pom.xml	2009-12-19 02:42:11 UTC (rev 98009)
@@ -31,15 +31,15 @@
   
   <properties>
     <version.jboss.vfs>3.0.0.CR1-SNAPSHOT</version.jboss.vfs>
-    <version.jboss.man>2.1.1.CR1</version.jboss.man>
+    <version.jboss.man>2.1.1.GA</version.jboss.man>
     <version.jboss.microcontainer>2.0.9.GA</version.jboss.microcontainer>
-    <version.jboss.common.core>2.2.14.GA</version.jboss.common.core>
+    <version.jboss.common.core>2.2.16.GA</version.jboss.common.core>
     <version.jboss.logging.spi>2.2.0.CR1</version.jboss.logging.spi>
     <version.jboss.classloading.spi>5.1.0.SP1</version.jboss.classloading.spi>
     <version.jbossxb>2.0.1.GA</version.jbossxb>
     <version.org.jboss.test>1.1.1.GA</version.org.jboss.test>
     <version.junit>4.4</version.junit>
-    <version.javassist>3.10.0.GA</version.javassist>
+    <version.javassist>3.11.0.GA</version.javassist>
   </properties>
 
   <build>




More information about the jboss-cvs-commits mailing list