[jboss-cvs] JBossAS SVN: r83347 - in projects/jboss-cl/trunk/classloading/src: test/java/org/jboss/test/classloading/dependency/test and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jan 23 05:57:34 EST 2009
Author: kabir.khan at jboss.com
Date: 2009-01-23 05:57:33 -0500 (Fri, 23 Jan 2009)
New Revision: 83347
Modified:
projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java
projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java
Log:
[JBCL-79] Add ClassLoading.getModuleForClassLoader()
Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java 2009-01-23 06:20:54 UTC (rev 83346)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java 2009-01-23 10:57:33 UTC (rev 83347)
@@ -129,4 +129,15 @@
throw new IllegalArgumentException("Null domain name");
return new Domain(this, domainName, parentDomainName, parentFirst);
}
+
+ /**
+ * Find the module for a classloader
+ *
+ * @param className the classloader
+ * @return the module or null if the classloader does not correspond to a registered module classloader
+ */
+ public static Module getModuleForClassLoader(ClassLoader loader)
+ {
+ return Module.getModuleForClassLoader(loader);
+ }
}
Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java 2009-01-23 06:20:54 UTC (rev 83346)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java 2009-01-23 10:57:33 UTC (rev 83347)
@@ -357,6 +357,25 @@
}
/**
+ * Find the module for a classloader
+ *
+ * @param className the classloader
+ * @return the module or null if the classloader does not correspond to a registered module classloader
+ */
+ static Module getModuleForClassLoader(ClassLoader cl)
+ {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null)
+ sm.checkPermission(new RuntimePermission("getClassLoader"));
+
+ // Determine the module (if any) for the classloader
+ if (cl != null)
+ return modulesByClassLoader.get(cl);
+ // Unknown
+ return null;
+ }
+
+ /**
* Find the module that loads a class
*
* @param className the class name
Modified: projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java 2009-01-23 06:20:54 UTC (rev 83346)
+++ projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java 2009-01-23 10:57:33 UTC (rev 83347)
@@ -27,6 +27,7 @@
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;
@@ -71,6 +72,8 @@
Module other = moduleA.getModuleForClass(A.class.getName());
assertEquals(moduleA, other);
+
+ assertEquals(moduleA, ClassLoading.getModuleForClassLoader(clA));
}
finally
{
@@ -92,19 +95,24 @@
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
{
- assertClassLoader(contextB);
+ 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));
}
finally
{
@@ -131,6 +139,8 @@
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()));
@@ -141,19 +151,26 @@
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
{
- assertClassLoader(contextB);
+ 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));
}
finally
{
@@ -268,6 +285,8 @@
assertNull(moduleA.getModuleForClass(Object.class.getName()));
moduleB.loadClass(Object.class.getName());
assertNull(moduleB.getModuleForClass(Object.class.getName()));
+
+ assertNull(ClassLoading.getModuleForClassLoader(Object.class.getClassLoader()));
}
finally
{
@@ -355,7 +374,6 @@
assertLoadClass(B.class, clB);
assertLoadClass(A.class, clB, clA);
- //Modules do not get the same corresponding module as when trying to load classes
Module moduleA = assertModule(contextA);
Module moduleB = assertModule(contextB);
Module result = moduleB.getModuleForClass(A.class.getName());
@@ -418,7 +436,6 @@
assertLoadClass(B.class, clB);
assertLoadClass(A.class, clB, clA2);
- //Modules do not get the same corresponding module as when trying to load classes
Module moduleA2 = assertModule(contextA2);
Module moduleB = assertModule(contextB);
Module result = moduleB.getModuleForClass(A.class.getName());
@@ -481,7 +498,6 @@
assertLoadClass(B.class, clB);
assertLoadClass(A.class, clB, clA2);
- //Modules do not get the same corresponding module as when trying to load classes
Module moduleA2 = assertModule(contextA2);
Module moduleB = assertModule(contextB);
Module result = moduleB.getModuleForClass(A.class.getName());
More information about the jboss-cvs-commits
mailing list