[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