[jboss-cvs] JBossAS SVN: r83469 - in projects/jboss-cl/branches/Branch_2_0: classloader/src/main/java/org/jboss/classloader/spi/base and 14 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jan 27 07:13:51 EST 2009


Author: alesj
Date: 2009-01-27 07:13:50 -0500 (Tue, 27 Jan 2009)
New Revision: 83469

Added:
   projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderSource.java
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/GeneratedClassesUnitTestCase.java
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/DefaultGeneratedClass.class
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/newpackage/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/newpackage/GeneratedClass.class
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/a/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/a/GeneratedClass.class
   projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java
Removed:
   projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderSource.java
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/DefaultGeneratedClass.class
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/newpackage/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/newpackage/GeneratedClass.class
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/a/
   projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/a/GeneratedClass.class
   projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java
Modified:
   projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java
   projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
   projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoadingSpace.java
   projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
Log:
Merge changes.

Modified: projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java	2009-01-27 11:39:59 UTC (rev 83468)
+++ projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java	2009-01-27 12:13:50 UTC (rev 83469)
@@ -180,12 +180,12 @@
    public Package getPackage(String name)
    {
       final ClassLoader classLoader = getClassLoader();
-      if  (getPackage == null)
+      if (getPackage == null)
          return null;
 
       try
       {
-         return (Package) getPackage.invoke(classLoader, new Object[] { name });
+         return (Package) getPackage.invoke(classLoader, name);
       }
       catch (Exception e)
       {
@@ -197,7 +197,7 @@
    public void getPackages(Set<Package> packages)
    {
       final ClassLoader classLoader = getClassLoader();
-      if  (getPackages == null)
+      if (getPackages == null)
          return;
 
       try

Modified: projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java	2009-01-27 11:39:59 UTC (rev 83468)
+++ projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java	2009-01-27 12:13:50 UTC (rev 83469)
@@ -304,6 +304,7 @@
     * @param classLoader the classloader
     * @param name the class resource name
     * @param allExports whether we should look at all exports
+    * @param findInParent should we try the parent
     * @return the loader
     */
    Loader findLoader(BaseClassLoader classLoader, String name, boolean allExports, boolean findInParent)
@@ -567,9 +568,8 @@
     * Load packages from the domain
     * 
     * @param classLoader the classloader
-    * @param name the package name
+    * @param packages the packages to add to
     * @param allExports whether we should look at all exports
-    * @param packages the packages to add to
     */
    void getPackages(BaseClassLoader classLoader, Set<Package> packages, boolean allExports)
    {

Deleted: projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderSource.java
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderSource.java	2009-01-27 11:39:59 UTC (rev 83468)
+++ projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderSource.java	2009-01-27 12:13:50 UTC (rev 83469)
@@ -1,56 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2007, JBoss Inc., and individual contributors as indicated
-* 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.base;
-
-/**
- * BaseClassLoaderSource.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class BaseClassLoaderSource
-{
-   /** The classloader */
-   private ClassLoader classLoader;
-
-   /**
-    * Create a new BaseClassLoaderSource.
-    * 
-    * @param classLoader the classloader
-    */
-   public BaseClassLoaderSource(ClassLoader classLoader)
-   {
-      if (classLoader == null)
-         throw new IllegalArgumentException("Null classLoader");
-      this.classLoader = classLoader;
-   }
-   
-   /**
-    * Get the classloader
-    * 
-    * @return the classloader
-    */
-   protected ClassLoader getClassLoader()
-   {
-      return classLoader;
-   }
-}

Copied: projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderSource.java (from rev 83468, projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderSource.java)
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderSource.java	                        (rev 0)
+++ projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderSource.java	2009-01-27 12:13:50 UTC (rev 83469)
@@ -0,0 +1,56 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2007, JBoss Inc., and individual contributors as indicated
+* 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.base;
+
+/**
+ * BaseClassLoaderSource.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class BaseClassLoaderSource
+{
+   /** The classloader */
+   private ClassLoader classLoader;
+
+   /**
+    * Create a new BaseClassLoaderSource.
+    * 
+    * @param classLoader the classloader
+    */
+   public BaseClassLoaderSource(ClassLoader classLoader)
+   {
+      if (classLoader == null)
+         throw new IllegalArgumentException("Null classLoader");
+      this.classLoader = classLoader;
+   }
+   
+   /**
+    * Get the classloader
+    * 
+    * @return the classloader
+    */
+   protected ClassLoader getClassLoader()
+   {
+      return classLoader;
+   }
+}

Modified: projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoadingSpace.java
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoadingSpace.java	2009-01-27 11:39:59 UTC (rev 83468)
+++ projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoadingSpace.java	2009-01-27 12:13:50 UTC (rev 83469)
@@ -34,12 +34,12 @@
 
 /**
  * ClassLoadingSpace. This class does two stage join/resolve<p>
- *
+ * 
  * join - work out a module's capabilities/requirements and validate they are not inconsistent with what is already there
  * resolve - resolve new requirements and potentially join with other spaces
  * unjoin - remove a module from the space
  * unresolve - work out the new state after a module splits
- *
+ * 
  * TODO JBCL-25 handle split packages
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $
@@ -51,29 +51,29 @@
 
    /** Whether trace is enabled */
    private static boolean trace = log.isTraceEnabled();
-
+   
    /** The modules */
    private Map<Module, Module> modules = new ConcurrentHashMap<Module, Module>();
 
    /** The modules by package */
    private Map<String, Module> modulesByPackage = new ConcurrentHashMap<String, Module>();
-
+   
    /** The requirements for all modules */
    private Map<Module, List<RequirementDependencyItem>> requirements = new ConcurrentHashMap<Module, List<RequirementDependencyItem>>();
-
+   
    /**
     * Get an unmodifiable set of the collections
-    *
+    * 
     * @return the modules
     */
    public Set<Module> getModules()
    {
       return Collections.unmodifiableSet(modules.keySet());
    }
-
+   
    /**
     * Join and resolve a module
-    *
+    * 
     * @param module the module to add
     * @throws IllegalArgumentException for a null module
     */
@@ -83,7 +83,7 @@
          throw new IllegalArgumentException("Null module");
 
       trace = log.isTraceEnabled();
-
+   
       join(module);
       try
       {
@@ -99,10 +99,10 @@
          throw new RuntimeException(modules + " could not join " + this, t);
       }
    }
-
+   
    /**
     * Join with a set of modules
-    *
+    * 
     * @param modules the modules
     * @throws IllegalArgumentException for null modules
     */
@@ -129,7 +129,7 @@
          {
             Module module = entry.getKey();
             ClassLoadingSpace space = entry.getValue();
-
+            
             split(module);
             try
             {
@@ -151,7 +151,7 @@
 
    /**
     * Join with a classloading space
-    *
+    * 
     * @param space the classloading space
     * @throws IllegalArgumentException for null space
     */
@@ -161,19 +161,19 @@
          throw new IllegalArgumentException("Null space");
       if (space == this)
          return;
-
+      
       int ourSize = getModules().size();
       int otherSize = space.getModules().size();
-
+      
       if (ourSize >= otherSize)
          joinAndResolve(space.getModules());
       else
          space.joinAndResolve(getModules());
    }
-
+   
    /**
     * Split with a module
-    *
+    * 
     * @param module the module to remove
     * @throws IllegalArgumentException for a null module
     * @throws IllegalStateException if the module is not associated with this classloading space
@@ -190,10 +190,10 @@
       unjoin(module);
       unresolve(module);
    }
-
+   
    /**
     * Join with a module
-    *
+    * 
     * @param module the module to add
     * @throws IllegalArgumentException for a null module
     */
@@ -205,7 +205,7 @@
       ClassLoadingSpace other = module.getClassLoadingSpace();
       if (other == this)
          return;
-
+      
       if (trace)
          log.trace(module + " joining " + this);
 
@@ -248,37 +248,37 @@
             }
          }
       }
-
+      
       // Update the exported packages
       if (exportedPackages != null && exportedPackages.isEmpty() == false)
       {
          for (String exportedPackage : exportedPackages)
             modulesByPackage.put(exportedPackage, module);
       }
-
+      
       // Remember the module requirements
       if (moduleDependencies != null && moduleDependencies.isEmpty() == false)
          requirements.put(module, moduleDependencies);
-
+      
       // Remove from any previous space
       if (other != null)
          other.split(module);
-
+      
       // This module is now part of our space
       modules.put(module, module);
       module.setClassLoadingSpace(this);
    }
-
+   
    /**
     * Unjoin a module
-    *
+    * 
     * @param module the module to remove
     */
    private void unjoin(Module module)
    {
       if (trace)
          log.trace(module + " unjoining " + this);
-
+      
       // Remove the exported packages for this module
       List<String> packageNames = module.determinePackageNames(false);
       if (packageNames != null)
@@ -293,15 +293,15 @@
 
       // Remove the module requirements from the classloading space
       requirements.remove(module);
-
+      
       // No longer part of this classloading space
       modules.remove(module);
       module.setClassLoadingSpace(null);
    }
-
+   
    /**
     * Resolve a module
-    *
+    * 
     * @param module the module to resolve
     */
    synchronized void resolve(Module module)
@@ -330,17 +330,17 @@
          }
       }
    }
-
+   
    /**
     * Unresolve a module
-    *
+    * 
     * @param module the module to resolve
     */
    private void unresolve(Module module)
    {
       if (trace)
          log.trace(module + " unresolving " + this);
-
+      
       // Nothing yet. Could try to split classloading spaces if they now have disjoint subsets?
    }
 }

Modified: projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-01-27 11:39:59 UTC (rev 83468)
+++ projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-01-27 12:13:50 UTC (rev 83469)
@@ -361,6 +361,7 @@
     * 
     * @param cl the classloader
     * @return the module or null if the classloader does not correspond to a registered module classloader
+    * @throws SecurityException if the caller doesn't have <code>new RuntimePermision("getClassLoader")</code>
     */
    static Module getModuleForClassLoader(ClassLoader cl)
    {

Deleted: projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java	2009-01-27 11:39:59 UTC (rev 83468)
+++ projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java	2009-01-27 12:13:50 UTC (rev 83469)
@@ -1,338 +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.dependency.test;
-
-import java.net.URL;
-import java.util.Enumeration;
-
-import junit.framework.Test;
-
-import org.jboss.classloader.plugins.ClassLoaderUtils;
-import org.jboss.classloading.spi.dependency.ClassLoading;
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
-import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
-import org.jboss.classloading.spi.version.VersionRange;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.test.classloading.dependency.support.a.A;
-import org.jboss.test.classloading.dependency.support.b.B;
-import org.jboss.test.classloading.dependency.support.c.C;
-
-/**
- * ModuleClassLoadingUnitTestCase.
- * 
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
- */
-public class ModuleClassLoadingUnitTestCase extends AbstractMockClassLoaderUnitTest
-{
-   public static Test suite()
-   {
-      return suite(ModuleClassLoadingUnitTestCase.class);
-   }
-
-   public ModuleClassLoadingUnitTestCase(String name)
-   {
-      super(name);
-   }
-   
-   public void testLoadClassFromThisModule() throws Exception
-   {
-      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
-      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
-      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
-      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
-      a.setPathsAndPackageNames(A.class);
-      KernelControllerContext contextA = install(a);
-      try
-      {
-         ClassLoader clA = assertClassLoader(contextA);
-         Module moduleA = assertModule(contextA);
-         Class<?> result = moduleA.loadClass(A.class.getName());
-         assertEquals(clA, result.getClassLoader());
-         
-         Module other = moduleA.getModuleForClass(A.class.getName());
-         assertEquals(moduleA, other);
-         
-         assertEquals(moduleA, ClassLoading.getModuleForClassLoader(clA));
-         assertEquals(clA, ClassLoading.getClassLoaderForModule(moduleA));
-      }
-      finally
-      {
-         uninstall(contextA);
-      }
-      assertNoClassLoader(contextA);
-   }
-   
-   public void testLoadClassFromOtherModule() throws Exception
-   {
-      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
-      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
-      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
-      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
-      a.setPathsAndPackageNames(A.class);
-      KernelControllerContext contextA = install(a);
-      try
-      {
-         ClassLoader clA = assertClassLoader(contextA);
-         Module moduleA = assertModule(contextA);
-
-         assertEquals(moduleA, ClassLoading.getModuleForClassLoader(clA));
-
-         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
-         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA"));
-         b.setPathsAndPackageNames(B.class);
-         KernelControllerContext contextB = install(b);
-         try
-         {
-            ClassLoader clB = assertClassLoader(contextB);
-            Module moduleB = assertModule(contextB);
-            Class<?> result = moduleB.loadClass(A.class.getName());
-            assertEquals(clA, result.getClassLoader());
-            
-            Module other = moduleB.getModuleForClass(A.class.getName());
-            assertEquals(moduleA, other);
-
-            assertEquals(moduleA, ClassLoading.getModuleForClassLoader(clA));
-            assertEquals(moduleB, ClassLoading.getModuleForClassLoader(clB));
-            assertEquals(clA, ClassLoading.getClassLoaderForModule(moduleA));
-            assertEquals(clB, ClassLoading.getClassLoaderForModule(moduleB));
-         }
-         finally
-         {
-            uninstall(contextB);
-         }
-      }
-      finally
-      {
-         uninstall(contextA);
-      }
-      assertNoClassLoader(contextA);
-   }
-   
-   public void testLoadClassFromOtherModuleDuplicates() throws Exception
-   {
-      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
-      MockClassLoadingMetaData a1 = new MockClassLoadingMetaData("a", "1.0.0");
-      a1.getCapabilities().addCapability(factory.createModule("ModuleA", "1.0.0"));
-      a1.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
-      a1.setPathsAndPackageNames(A.class);
-      KernelControllerContext contextA1 = install(a1);
-      try
-      {
-         ClassLoader clA1 = assertClassLoader(contextA1);
-         Module moduleA1 = assertModule(contextA1);
-
-         assertEquals(moduleA1, ClassLoading.getModuleForClassLoader(clA1));
-
-         MockClassLoadingMetaData a2 = new MockClassLoadingMetaData("a", "2.0.0");
-         a2.getCapabilities().addCapability(factory.createModule("ModuleA", "2.0.0"));
-         a2.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
-         a2.setPathsAndPackageNames(A.class);
-         KernelControllerContext contextA2 = install(a2);
-         try
-         {
-            ClassLoader clA2 = assertClassLoader(contextA2);
-            Module moduleA2 = assertModule(contextA2);
-
-            assertEquals(moduleA1, ClassLoading.getModuleForClassLoader(clA1));
-            assertEquals(moduleA2, ClassLoading.getModuleForClassLoader(clA2));
-
-            MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
-            b.getRequirements().addRequirement(factory.createRequireModule("ModuleA", new VersionRange("2.0.0")));
-            b.setPathsAndPackageNames(B.class);
-            KernelControllerContext contextB = install(b);
-            try
-            {
-               ClassLoader clB = assertClassLoader(contextB);
-               Module moduleB = assertModule(contextB);
-               Class<?> result = moduleB.loadClass(A.class.getName());
-               assertEquals(clA2, result.getClassLoader());
-               
-               Module other = moduleB.getModuleForClass(A.class.getName());
-               assertEquals(moduleA2, other);
-
-               assertEquals(moduleA1, ClassLoading.getModuleForClassLoader(clA1));
-               assertEquals(moduleA2, ClassLoading.getModuleForClassLoader(clA2));
-               assertEquals(moduleB, ClassLoading.getModuleForClassLoader(clB));
-               assertEquals(clA1, ClassLoading.getClassLoaderForModule(moduleA1));
-               assertEquals(clA2, ClassLoading.getClassLoaderForModule(moduleA2));
-               assertEquals(clB, ClassLoading.getClassLoaderForModule(moduleB));
-            }
-            finally
-            {
-               uninstall(contextB);
-            }
-         }
-         finally
-         {
-            uninstall(contextA2);
-         }
-         assertNoClassLoader(contextA2);
-      }
-      finally
-      {
-         uninstall(contextA1);
-      }
-      assertNoClassLoader(contextA1);
-   }
-   
-   public void testLoadClassNotFound() throws Exception
-   {
-      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
-      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
-      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
-      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
-      a.setPathsAndPackageNames(A.class);
-      KernelControllerContext contextA = install(a);
-      try
-      {
-         assertClassLoader(contextA);
-         Module moduleA = assertModule(contextA);
-
-         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
-         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA"));
-         b.setPathsAndPackageNames(B.class);
-         KernelControllerContext contextB = install(b);
-         try
-         {
-            assertClassLoader(contextB);
-            try
-            {
-               moduleA.loadClass(C.class.getName());
-               fail("Should not be here!");
-            }
-            catch (Exception e)
-            {
-               checkThrowable(ClassNotFoundException.class, e);
-            }
-            try
-            {
-               moduleA.getModuleForClass(C.class.getName());
-               fail("Should not be here!");
-            }
-            catch (Exception e)
-            {
-               checkThrowable(ClassNotFoundException.class, e);
-            }
-            Module moduleB = assertModule(contextB);
-            try
-            {
-               moduleB.loadClass(C.class.getName());
-               fail("Should not be here!");
-            }
-            catch (Exception e)
-            {
-               checkThrowable(ClassNotFoundException.class, e);
-            }
-            try
-            {
-               moduleB.getModuleForClass(C.class.getName());
-               fail("Should not be here!");
-            }
-            catch (Exception e)
-            {
-               checkThrowable(ClassNotFoundException.class, e);
-            }
-         }
-         finally
-         {
-            uninstall(contextB);
-         }
-      }
-      finally
-      {
-         uninstall(contextA);
-      }
-      assertNoClassLoader(contextA);
-   }
-   
-   public void testLoadClassNotAModule() throws Exception
-   {
-      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
-      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
-      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
-      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
-      a.setPathsAndPackageNames(A.class);
-      KernelControllerContext contextA = install(a);
-      try
-      {
-         assertClassLoader(contextA);
-         Module moduleA = assertModule(contextA);
-
-         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
-         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA"));
-         b.setPathsAndPackageNames(B.class);
-         KernelControllerContext contextB = install(b);
-         try
-         {
-            assertClassLoader(contextB);
-            Module moduleB = assertModule(contextB);
-            moduleA.loadClass(Object.class.getName());
-            assertNull(moduleA.getModuleForClass(Object.class.getName()));
-            moduleB.loadClass(Object.class.getName());
-            assertNull(moduleB.getModuleForClass(Object.class.getName()));
-            
-            assertNull(ClassLoading.getModuleForClassLoader(Object.class.getClassLoader()));
-         }
-         finally
-         {
-            uninstall(contextB);
-         }
-      }
-      finally
-      {
-         uninstall(contextA);
-      }
-      assertNoClassLoader(contextA);
-   }
-   
-   public void testGetResourceFromThisModule() throws Exception
-   {
-      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
-      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
-      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
-      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
-      a.setPathsAndPackageNames(A.class);
-      KernelControllerContext contextA = install(a);
-      try
-      {
-         assertClassLoader(contextA);
-         String path = ClassLoaderUtils.classNameToPath(A.class);
-         URL expected = getResource("/" + path);
-         Module moduleA = assertModule(contextA);
-         URL actual = moduleA.getResource(path);
-         assertEquals(expected, actual);
-         
-         Enumeration<URL> actuals = moduleA.getResources(path);
-         assertTrue(actuals.hasMoreElements());
-         actual = actuals.nextElement();
-         assertEquals(expected, actual);
-         assertFalse(actuals.hasMoreElements());
-      }
-      finally
-      {
-         uninstall(contextA);
-      }
-      assertNoClassLoader(contextA);
-   }
-}

Copied: projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java (from rev 83468, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java)
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java	                        (rev 0)
+++ projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java	2009-01-27 12:13:50 UTC (rev 83469)
@@ -0,0 +1,524 @@
+/*
+ * 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.dependency.test;
+
+import java.net.URL;
+import java.util.Enumeration;
+
+import junit.framework.Test;
+
+import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.version.VersionRange;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.test.classloading.dependency.support.a.A;
+import org.jboss.test.classloading.dependency.support.b.B;
+import org.jboss.test.classloading.dependency.support.c.C;
+
+/**
+ * ModuleClassLoadingUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ModuleClassLoadingUnitTestCase extends AbstractMockClassLoaderUnitTest
+{
+   public static Test suite()
+   {
+      return suite(ModuleClassLoadingUnitTestCase.class);
+   }
+
+   public ModuleClassLoadingUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testLoadClassFromThisModule() throws Exception
+   {
+      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(contextA);
+         Module moduleA = assertModule(contextA);
+         Class<?> result = moduleA.loadClass(A.class.getName());
+         assertEquals(clA, result.getClassLoader());
+         
+         Module other = moduleA.getModuleForClass(A.class.getName());
+         assertEquals(moduleA, other);
+         
+         assertEquals(moduleA, ClassLoading.getModuleForClassLoader(clA));
+         assertEquals(clA, ClassLoading.getClassLoaderForModule(moduleA));
+      }
+      finally
+      {
+         uninstall(contextA);
+      }
+      assertNoClassLoader(contextA);
+   }
+   
+   public void testLoadClassFromOtherModule() throws Exception
+   {
+      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(contextA);
+         Module moduleA = assertModule(contextA);
+
+         assertEquals(moduleA, ClassLoading.getModuleForClassLoader(clA));
+
+         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA"));
+         b.setPathsAndPackageNames(B.class);
+         KernelControllerContext contextB = install(b);
+         try
+         {
+            ClassLoader clB = assertClassLoader(contextB);
+            Module moduleB = assertModule(contextB);
+            Class<?> result = moduleB.loadClass(A.class.getName());
+            assertEquals(clA, result.getClassLoader());
+            
+            Module other = moduleB.getModuleForClass(A.class.getName());
+            assertEquals(moduleA, other);
+
+            assertEquals(moduleA, ClassLoading.getModuleForClassLoader(clA));
+            assertEquals(moduleB, ClassLoading.getModuleForClassLoader(clB));
+            assertEquals(clA, ClassLoading.getClassLoaderForModule(moduleA));
+            assertEquals(clB, ClassLoading.getClassLoaderForModule(moduleB));
+         }
+         finally
+         {
+            uninstall(contextB);
+         }
+      }
+      finally
+      {
+         uninstall(contextA);
+      }
+      assertNoClassLoader(contextA);
+   }
+   
+   public void testLoadClassFromOtherModuleDuplicates() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      MockClassLoadingMetaData a1 = new MockClassLoadingMetaData("a", "1.0.0");
+      a1.getCapabilities().addCapability(factory.createModule("ModuleA", "1.0.0"));
+      a1.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a1.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA1 = install(a1);
+      try
+      {
+         ClassLoader clA1 = assertClassLoader(contextA1);
+         Module moduleA1 = assertModule(contextA1);
+
+         assertEquals(moduleA1, ClassLoading.getModuleForClassLoader(clA1));
+
+         MockClassLoadingMetaData a2 = new MockClassLoadingMetaData("a", "2.0.0");
+         a2.getCapabilities().addCapability(factory.createModule("ModuleA", "2.0.0"));
+         a2.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+         a2.setPathsAndPackageNames(A.class);
+         KernelControllerContext contextA2 = install(a2);
+         try
+         {
+            ClassLoader clA2 = assertClassLoader(contextA2);
+            Module moduleA2 = assertModule(contextA2);
+
+            assertEquals(moduleA1, ClassLoading.getModuleForClassLoader(clA1));
+            assertEquals(moduleA2, ClassLoading.getModuleForClassLoader(clA2));
+
+            MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+            b.getRequirements().addRequirement(factory.createRequireModule("ModuleA", new VersionRange("2.0.0")));
+            b.setPathsAndPackageNames(B.class);
+            KernelControllerContext contextB = install(b);
+            try
+            {
+               ClassLoader clB = assertClassLoader(contextB);
+               Module moduleB = assertModule(contextB);
+               Class<?> result = moduleB.loadClass(A.class.getName());
+               assertEquals(clA2, result.getClassLoader());
+               
+               Module other = moduleB.getModuleForClass(A.class.getName());
+               assertEquals(moduleA2, other);
+
+               assertEquals(moduleA1, ClassLoading.getModuleForClassLoader(clA1));
+               assertEquals(moduleA2, ClassLoading.getModuleForClassLoader(clA2));
+               assertEquals(moduleB, ClassLoading.getModuleForClassLoader(clB));
+               assertEquals(clA1, ClassLoading.getClassLoaderForModule(moduleA1));
+               assertEquals(clA2, ClassLoading.getClassLoaderForModule(moduleA2));
+               assertEquals(clB, ClassLoading.getClassLoaderForModule(moduleB));
+            }
+            finally
+            {
+               uninstall(contextB);
+            }
+         }
+         finally
+         {
+            uninstall(contextA2);
+         }
+         assertNoClassLoader(contextA2);
+      }
+      finally
+      {
+         uninstall(contextA1);
+      }
+      assertNoClassLoader(contextA1);
+   }
+   
+   public void testLoadClassNotFound() throws Exception
+   {
+      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA = install(a);
+      try
+      {
+         assertClassLoader(contextA);
+         Module moduleA = assertModule(contextA);
+
+         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA"));
+         b.setPathsAndPackageNames(B.class);
+         KernelControllerContext contextB = install(b);
+         try
+         {
+            assertClassLoader(contextB);
+            try
+            {
+               moduleA.loadClass(C.class.getName());
+               fail("Should not be here!");
+            }
+            catch (Exception e)
+            {
+               checkThrowable(ClassNotFoundException.class, e);
+            }
+            try
+            {
+               moduleA.getModuleForClass(C.class.getName());
+               fail("Should not be here!");
+            }
+            catch (Exception e)
+            {
+               checkThrowable(ClassNotFoundException.class, e);
+            }
+            Module moduleB = assertModule(contextB);
+            try
+            {
+               moduleB.loadClass(C.class.getName());
+               fail("Should not be here!");
+            }
+            catch (Exception e)
+            {
+               checkThrowable(ClassNotFoundException.class, e);
+            }
+            try
+            {
+               moduleB.getModuleForClass(C.class.getName());
+               fail("Should not be here!");
+            }
+            catch (Exception e)
+            {
+               checkThrowable(ClassNotFoundException.class, e);
+            }
+         }
+         finally
+         {
+            uninstall(contextB);
+         }
+      }
+      finally
+      {
+         uninstall(contextA);
+      }
+      assertNoClassLoader(contextA);
+   }
+   
+   public void testLoadClassNotAModule() throws Exception
+   {
+      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA = install(a);
+      try
+      {
+         assertClassLoader(contextA);
+         Module moduleA = assertModule(contextA);
+
+         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA"));
+         b.setPathsAndPackageNames(B.class);
+         KernelControllerContext contextB = install(b);
+         try
+         {
+            assertClassLoader(contextB);
+            Module moduleB = assertModule(contextB);
+            moduleA.loadClass(Object.class.getName());
+            assertNull(moduleA.getModuleForClass(Object.class.getName()));
+            moduleB.loadClass(Object.class.getName());
+            assertNull(moduleB.getModuleForClass(Object.class.getName()));
+            
+            assertNull(ClassLoading.getModuleForClassLoader(Object.class.getClassLoader()));
+         }
+         finally
+         {
+            uninstall(contextB);
+         }
+      }
+      finally
+      {
+         uninstall(contextA);
+      }
+      assertNoClassLoader(contextA);
+   }
+   
+   public void testGetResourceFromThisModule() throws Exception
+   {
+      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA = install(a);
+      try
+      {
+         assertClassLoader(contextA);
+         String path = ClassLoaderUtils.classNameToPath(A.class);
+         URL expected = getResource("/" + path);
+         Module moduleA = assertModule(contextA);
+         URL actual = moduleA.getResource(path);
+         assertEquals(expected, actual);
+         
+         Enumeration<URL> actuals = moduleA.getResources(path);
+         assertTrue(actuals.hasMoreElements());
+         actual = actuals.nextElement();
+         assertEquals(expected, actual);
+         assertFalse(actuals.hasMoreElements());
+      }
+      finally
+      {
+         uninstall(contextA);
+      }
+      assertNoClassLoader(contextA);
+   }
+   
+   public void testSeveralModulesWithSamePackages() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      MockClassLoadingMetaData x = new MockClassLoadingMetaData("x");
+      x.getCapabilities().addCapability(factory.createModule("ModuleX"));
+      x.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      x.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextX = install(x);
+
+      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA = install(a);
+
+      MockClassLoadingMetaData y = new MockClassLoadingMetaData("y");
+      y.getCapabilities().addCapability(factory.createModule("ModuleY"));
+      y.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      y.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextY = install(y);
+
+      try
+      {
+         ClassLoader clX = assertClassLoader(contextX);
+         ClassLoader clA = assertClassLoader(contextA);
+         ClassLoader clY = assertClassLoader(contextY);
+
+         assertLoadClass(A.class, clX);
+         assertLoadClass(A.class, clA);
+         assertLoadClass(A.class, clY);
+         
+         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA"));
+         b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+         b.setPathsAndPackageNames(B.class);
+         KernelControllerContext contextB = install(b);
+
+         try
+         {
+            ClassLoader clB = assertClassLoader(contextB);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA);
+            
+            Module moduleA = assertModule(contextA);
+            Module moduleB = assertModule(contextB);
+            Module result = moduleB.getModuleForClass(A.class.getName());
+            assertSame(moduleA, result);
+         }
+         finally
+         {
+            uninstall(contextB);
+         }
+      }
+      finally
+      {
+         uninstall(contextX);
+         uninstall(contextA);
+         uninstall(contextY);
+      }
+   }
+   
+   public void testSeveralModulesWithSameNamesDifferentVersions() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      MockClassLoadingMetaData a1 = new MockClassLoadingMetaData("a1");
+      a1.getCapabilities().addCapability(factory.createModule("ModuleA", "1.0.0"));
+      a1.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a1.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA1 = install(a1);
+
+      MockClassLoadingMetaData a2 = new MockClassLoadingMetaData("a2");
+      a2.getCapabilities().addCapability(factory.createModule("ModuleA", "2.0.0"));
+      a2.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a2.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA2 = install(a2);
+
+      MockClassLoadingMetaData a3 = new MockClassLoadingMetaData("a3");
+      a3.getCapabilities().addCapability(factory.createModule("ModuleA", "3.0.0"));
+      a3.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a3.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA3 = install(a3);
+
+      try
+      {
+         ClassLoader clA1 = assertClassLoader(contextA1);
+         ClassLoader clA2 = assertClassLoader(contextA2);
+         ClassLoader clA3 = assertClassLoader(contextA3);
+
+         assertLoadClass(A.class, clA1);
+         assertLoadClass(A.class, clA2);
+         assertLoadClass(A.class, clA3);
+         
+         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA", new VersionRange("2.0.0", true, "3.0.0", false)));
+         b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+         b.setPathsAndPackageNames(B.class);
+         KernelControllerContext contextB = install(b);
+
+         try
+         {
+            ClassLoader clB = assertClassLoader(contextB);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA2);
+            
+            Module moduleA2 = assertModule(contextA2);
+            Module moduleB = assertModule(contextB);
+            Module result = moduleB.getModuleForClass(A.class.getName());
+            assertSame(moduleA2, result);
+         }
+         finally
+         {
+            uninstall(contextB);
+         }
+      }
+      finally
+      {
+         uninstall(contextA1);
+         uninstall(contextA2);
+         uninstall(contextA3);
+      }
+   }
+
+   public void testSeveralModulesWithSamePackagesDifferentVersions() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      MockClassLoadingMetaData a1 = new MockClassLoadingMetaData("a1");
+      a1.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a1.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName(), "1.0.0"));
+      a1.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA1 = install(a1);
+
+      MockClassLoadingMetaData a2 = new MockClassLoadingMetaData("a2");
+      a2.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a2.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName(), "2.0.0"));
+      a2.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA2 = install(a2);
+
+      MockClassLoadingMetaData a3 = new MockClassLoadingMetaData("a3");
+      a3.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a3.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName(), "3.0.0"));
+      a3.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA3 = install(a3);
+
+      try
+      {
+         ClassLoader clA1 = assertClassLoader(contextA1);
+         ClassLoader clA2 = assertClassLoader(contextA2);
+         ClassLoader clA3 = assertClassLoader(contextA3);
+
+         assertLoadClass(A.class, clA1);
+         assertLoadClass(A.class, clA2);
+         assertLoadClass(A.class, clA3);
+         
+         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+         b.getRequirements().addRequirement(factory.createRequirePackage(A.class.getPackage().getName(), new VersionRange("2.0.0", true, "3.0.0", false)));
+         b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+         b.setPathsAndPackageNames(B.class);
+         KernelControllerContext contextB = install(b);
+
+         try
+         {
+            ClassLoader clB = assertClassLoader(contextB);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA2);
+            
+            Module moduleA2 = assertModule(contextA2);
+            Module moduleB = assertModule(contextB);
+            Module result = moduleB.getModuleForClass(A.class.getName());
+            assertSame(moduleA2, result);
+         }
+         finally
+         {
+            uninstall(contextB);
+         }
+      }
+      finally
+      {
+         uninstall(contextA1);
+         uninstall(contextA2);
+         uninstall(contextA3);
+      }
+   }
+}

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/GeneratedClassesUnitTestCase.java (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/GeneratedClassesUnitTestCase.java)
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/GeneratedClassesUnitTestCase.java	                        (rev 0)
+++ projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/java/org/jboss/test/classloading/vfs/metadata/test/GeneratedClassesUnitTestCase.java	2009-01-27 12:13:50 UTC (rev 83469)
@@ -0,0 +1,215 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, 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.vfs.metadata.test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import junit.framework.Test;
+
+import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloading.spi.RealClassLoader;
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.metadata.ExportAll;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest;
+import org.jboss.test.classloading.vfs.metadata.support.a.A;
+import org.jboss.test.classloading.vfs.metadata.support.b.B;
+import org.jboss.util.id.GUID;
+import org.jboss.virtual.MemoryFileFactory;
+import org.jboss.virtual.VFS;
+import org.jboss.virtual.plugins.context.memory.MemoryContextFactory;
+
+/**
+ * DomainUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class GeneratedClassesUnitTestCase extends VFSClassLoadingMicrocontainerTest
+{
+   final static GeneratedClassInfo DEFAULT_PACKAGE = new GeneratedClassInfo("DefaultGeneratedClass");
+   final static GeneratedClassInfo NEW_PACKAGE  = new GeneratedClassInfo("newpackage.GeneratedClass");
+   final static GeneratedClassInfo EXISTING_PACKAGE  = new GeneratedClassInfo("org.jboss.test.classloading.vfs.metadata.support.a.GeneratedClass");
+   static
+   {
+      VFS.init();
+   }
+   
+   public static Test suite()
+   {
+      return suite(GeneratedClassesUnitTestCase.class);
+   }
+
+   public GeneratedClassesUnitTestCase(String name)
+   {
+      super(name);
+   }
+
+   public void testImportAllGenerateClassInExistingPackage() throws Exception
+   {
+      runImportAllGenerateClass(EXISTING_PACKAGE);
+   }
+   
+   public void testImportAllGenerateClassInDefaultPackage() throws Exception
+   {
+      runImportAllGenerateClass(DEFAULT_PACKAGE);      
+   }
+   
+   public void testImportAllGenerateClassInNewPackage() throws Exception
+   {
+      runImportAllGenerateClass(NEW_PACKAGE);
+   }
+   
+   
+   private void runImportAllGenerateClass(GeneratedClassInfo info) throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      String dynamicClassRoot = getDynamicClassRoot();
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      a.setImportAll(true);
+      a.getRoots().add(getRoot(A.class));
+      a.getRoots().add(dynamicClassRoot);
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.getCapabilities().addCapability(factory.createPackage(info.getPackageName()));
+      KernelDeployment depA = install(a);
+
+      VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+      b.setExportAll(ExportAll.NON_EMPTY);
+      b.setImportAll(true);
+      b.getRoots().add(getRoot(B.class));
+      b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+      KernelDeployment depB = install(b);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         ClassLoader clB = assertClassLoader(b);
+         assertLoadClass(A.class, clA);
+         assertLoadClass(B.class, clB);
+         assertLoadClass(A.class, clB, clA);
+         assertLoadClass(B.class, clA, clB);
+         
+         Class<?> clazz = generateClass(clA, dynamicClassRoot, info);
+         Class<?> clazzA = assertLoadClass(info.getClassname(), clA);
+         assertSame(clazz, clazzA);
+         Class<?> clazzB = assertLoadClass(info.getClassname(), clB, clA);
+         assertSame(clazz, clazzB);
+      }
+      finally
+      {
+         undeploy(depB);
+         undeploy(depA);
+      }
+   }
+
+   private Class<?> generateClass(ClassLoader loader, String dynamicClassRoot, GeneratedClassInfo info) throws Exception
+   {
+      URL outputURL = new URL(dynamicClassRoot + "/" + info.getResourceName());
+      MemoryContextFactory factory = MemoryContextFactory.getInstance();
+      factory.putFile(outputURL, info.getClassBytes());
+      
+      if (loader instanceof RealClassLoader)
+      {
+         ((RealClassLoader)loader).clearBlackList(info.getResourceName());
+      }
+      return loader.loadClass(info.getClassname());
+   }
+   
+   private String getDynamicClassRoot() throws Exception
+   {
+      URL dynamicClassRoot = new URL("vfsmemory", GUID.asString(), "");
+      MemoryFileFactory.createRoot(dynamicClassRoot).getRoot();
+      return dynamicClassRoot.toString();
+   }
+
+   private static class GeneratedClassInfo
+   {
+      String classname;
+      String resourceName;
+      byte[] classBytes;
+      
+      public GeneratedClassInfo(String classname)
+      {
+         this.classname = classname;
+         resourceName = ClassLoaderUtils.classNameToPath(classname);
+         loadClassBytes();
+      }
+      
+      public String getClassname()
+      {
+         return classname;
+      }
+      
+      public String getPackageName()
+      {
+         return ClassLoaderUtils.getClassPackageName(classname);
+      }
+
+      public String getResourceName()
+      {
+         return resourceName;
+      }
+
+      public byte[] getClassBytes()
+      {
+         return classBytes;
+      }
+
+      private void loadClassBytes()
+      {
+         InputStream in = this.getClass().getClassLoader().getResourceAsStream("classes/" + resourceName);
+         try
+         {
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            int i = in.read();
+            while(i != -1)
+            {
+               out.write((byte)i);
+               i = in.read();
+            }
+            classBytes = out.toByteArray();
+         }
+         catch(Exception e)
+         {
+            throw new RuntimeException(e);
+         }
+         finally
+         {
+            if (in != null)
+            {
+               try
+               {
+                  in.close();
+               }
+               catch (IOException e)
+               {
+                  // AutoGenerated
+                  throw new RuntimeException(e);
+               }
+            }
+         }
+      }
+   }
+}

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes)

Deleted: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/DefaultGeneratedClass.class
===================================================================
(Binary files differ)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/DefaultGeneratedClass.class (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/DefaultGeneratedClass.class)
===================================================================
(Binary files differ)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/newpackage (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/newpackage)

Deleted: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/newpackage/GeneratedClass.class
===================================================================
(Binary files differ)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/newpackage/GeneratedClass.class (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/newpackage/GeneratedClass.class)
===================================================================
(Binary files differ)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/org)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/org/jboss)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/org/jboss/test)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/a (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/a)

Deleted: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/a/GeneratedClass.class
===================================================================
(Binary files differ)

Copied: projects/jboss-cl/branches/Branch_2_0/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/a/GeneratedClass.class (from rev 83468, projects/jboss-cl/trunk/classloading-vfs/src/test/resources/classes/org/jboss/test/classloading/vfs/metadata/support/a/GeneratedClass.class)
===================================================================
(Binary files differ)




More information about the jboss-cvs-commits mailing list