[jboss-cvs] JBossAS SVN: r83424 - 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
Mon Jan 26 13:40:53 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-01-26 13:40:53 -0500 (Mon, 26 Jan 2009)
New Revision: 83424

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-80] Way to determine Module for ClassLoader

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-26 18:24:19 UTC (rev 83423)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoading.java	2009-01-26 18:40:53 UTC (rev 83424)
@@ -133,11 +133,22 @@
    /**
     * Find the module for a classloader
     * 
-    * @param className the classloader
+    * @param loader 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);
    }
+   
+   /**
+    * Find the classloader for a module
+    * 
+    * @param module the module
+    * @return the classloader or null if the module does not correspond to a registered classloader module
+    */
+   public static ClassLoader getClassLoaderForModule(Module module)
+   {
+      return Module.getClassLoaderForModule(module);
+   }
 }

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-26 18:24:19 UTC (rev 83423)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-01-26 18:40:53 UTC (rev 83424)
@@ -61,6 +61,7 @@
 {
    /** The modules by classloader */
    private static Map<ClassLoader, Module> modulesByClassLoader = new ConcurrentHashMap<ClassLoader, Module>();
+   private static Map<Module, ClassLoader> classLoadersByModule = new ConcurrentHashMap<Module, ClassLoader>();
    
    /** The context name */
    private String contextName;
@@ -98,6 +99,7 @@
          throw new IllegalArgumentException("Null classloader");
 
       modulesByClassLoader.put(classLoader, module);
+      classLoadersByModule.put(module, classLoader);
    }
 
    /**
@@ -115,6 +117,7 @@
          throw new IllegalArgumentException("Null classloader");
 
       modulesByClassLoader.remove(classLoader);
+      classLoadersByModule.remove(module);
    }
    
    /**
@@ -359,7 +362,7 @@
    /**
     * Find the module for a classloader
     * 
-    * @param className the classloader
+    * @param cl the classloader
     * @return the module or null if the classloader does not correspond to a registered module classloader
     */
    static Module getModuleForClassLoader(ClassLoader cl)
@@ -376,6 +379,25 @@
    }
    
    /**
+    * Find the classloader for a module
+    * 
+    * @param module the module
+    * @return the classloader or null if the module does not correspond to a registered classloader module
+    */
+   static ClassLoader getClassLoaderForModule(Module module)
+   {
+      SecurityManager sm = System.getSecurityManager();
+      if (sm != null)
+         sm.checkPermission(new RuntimePermission("getClassLoader"));
+      
+      // Determine the module (if any) for the classloader 
+      if (module != null)
+         return classLoadersByModule.get(module);
+      // 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-26 18:24:19 UTC (rev 83423)
+++ projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ModuleClassLoadingUnitTestCase.java	2009-01-26 18:40:53 UTC (rev 83424)
@@ -74,6 +74,7 @@
          assertEquals(moduleA, other);
          
          assertEquals(moduleA, ClassLoading.getModuleForClassLoader(clA));
+         assertEquals(clA, ClassLoading.getClassLoaderForModule(moduleA));
       }
       finally
       {
@@ -113,6 +114,8 @@
 
             assertEquals(moduleA, ClassLoading.getModuleForClassLoader(clA));
             assertEquals(moduleB, ClassLoading.getModuleForClassLoader(clB));
+            assertEquals(clA, ClassLoading.getClassLoaderForModule(moduleA));
+            assertEquals(clB, ClassLoading.getClassLoaderForModule(moduleB));
          }
          finally
          {
@@ -171,6 +174,9 @@
                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
             {




More information about the jboss-cvs-commits mailing list