[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