[jboss-cvs] JBossAS SVN: r64254 - projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/jdk.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jul 24 12:58:01 EDT 2007


Author: adrian at jboss.org
Date: 2007-07-24 12:58:00 -0400 (Tue, 24 Jul 2007)
New Revision: 64254

Modified:
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/jdk/AbstractJDKChecker.java
Log:
Allow tests to say they are not part of the JDK even though they
are outside the classloading system.

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/jdk/AbstractJDKChecker.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/jdk/AbstractJDKChecker.java	2007-07-24 16:57:18 UTC (rev 64253)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/jdk/AbstractJDKChecker.java	2007-07-24 16:58:00 UTC (rev 64254)
@@ -23,9 +23,12 @@
 
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
 
 import org.jboss.classloader.spi.base.BaseClassLoader;
 import org.jboss.classloader.spi.base.BaseClassLoaderDomain;
+import org.jboss.classloader.spi.base.BaseClassLoaderPolicy;
 import org.jboss.classloader.spi.jdk.JDKChecker;
 
 /**
@@ -39,6 +42,9 @@
    /** The hack to the security manager */
    private static final Hack hack;
    
+   /** Classes in the classpath that should be excluded: FOR TESTING ONLY */
+   private static Set<Class<?>> excluded = new CopyOnWriteArraySet<Class<?>>();
+   
    static
    {
       hack = AccessController.doPrivileged(new PrivilegedAction<Hack>()
@@ -49,7 +55,42 @@
          }
       });
    }
+
+   /**
+    * Whether the class is excluded
+    * 
+    * @param clazz the class
+    * @return whether the class is excluded
+    */
+   public boolean isExcluded(Class<?> clazz)
+   {
+      // No excludes
+      if (excluded.isEmpty())
+         return false;
+      
+      for (Class<?> exclude : excluded)
+      {
+         if (exclude.isAssignableFrom(clazz))
+            return true;
+      }
+      
+      // Not excluded
+      return false;
+   }
    
+   /**
+    * The excluded classes 
+    * 
+    * @return the excluded classes
+    */
+   public static Set<Class<?>> getExcluded()
+   {
+      SecurityManager sm = System.getSecurityManager();
+      if (sm != null)
+         sm.checkCreateClassLoader();
+      return excluded;
+   }
+   
    public boolean isJDKRequest(String name)
    {
       Class<?> requesting = getRequestingClass(hack.getClassContext());
@@ -69,10 +110,11 @@
          if (Hack.class.isAssignableFrom(clazz) == false &&
              JDKChecker.class.isAssignableFrom(clazz) == false &&
              BaseClassLoaderDomain.class.isAssignableFrom(clazz) == false &&
+             BaseClassLoaderPolicy.class.isAssignableFrom(clazz) == false &&
              ClassLoader.class.isAssignableFrom(clazz) == false &&
              Class.class.isAssignableFrom(clazz) == false)
          {
-             return clazz;
+            return clazz;
          }
       }
       throw new RuntimeException("Should not be here!");
@@ -90,6 +132,8 @@
     */
    protected boolean isJDKRequestingClass(String name, Class<?> requesting)
    {
+      if (isExcluded(requesting))
+         return false;
       ClassLoader cl = requesting.getClassLoader();
       if (cl == null)
          return true;




More information about the jboss-cvs-commits mailing list