[jboss-cvs] JBossAS SVN: r72893 - trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Apr 30 07:53:06 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-04-30 07:53:06 -0400 (Wed, 30 Apr 2008)
New Revision: 72893

Modified:
   trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/JBoss5Integration.java
Log:
[JBAS-5495] Bootstrap classloader(s) should be valid classloaders

Modified: trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/JBoss5Integration.java
===================================================================
--- trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/JBoss5Integration.java	2008-04-30 11:52:32 UTC (rev 72892)
+++ trunk/aspects/src/main/org/jboss/aop/asintegration/jboss5/JBoss5Integration.java	2008-04-30 11:53:06 UTC (rev 72893)
@@ -22,6 +22,11 @@
 package org.jboss.aop.asintegration.jboss5;
 
 import java.io.File;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
 
 import javassist.ClassPool;
 import javassist.scopedpool.ScopedClassPool;
@@ -32,7 +37,6 @@
 import org.jboss.aop.classpool.AOPClassLoaderScopingPolicy;
 import org.jboss.aop.asintegration.JBossIntegration;
 import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.mx.loading.RepositoryClassLoader;
 
 /**
  * 
@@ -46,7 +50,28 @@
    private AOPClassLoaderScopingPolicy policy;
    private AspectManager manager = AspectManager.getTopLevelAspectManager();
    DefaultTranslator translator = new DefaultTranslator(manager);
+   
+   private static final Set<ClassLoader> bootstrapLoaders;
+   static 
+   {
+      final Set<ClassLoader> loaders = new HashSet<ClassLoader>();
+      
+      AccessController.doPrivileged(new PrivilegedAction<Object>() {
 
+         public Object run()
+         {
+            ClassLoader loader = JBoss5Integration.class.getClassLoader();
+            while (loader != null)
+            {
+               loaders.add(loader);
+               loader = loader.getParent();
+            }
+            return null;
+         }});
+      
+      bootstrapLoaders = Collections.unmodifiableSet(loaders);
+   }
+
    public void start()
    {
       getIntegrationStrategy().start();
@@ -59,19 +84,26 @@
    
    public boolean isValidClassLoader(ClassLoader loader)
    {
-      boolean isValid = false;
-      try
+      if(loader instanceof RealClassLoader)
       {
-         if(loader instanceof RealClassLoader)
+         if (((RealClassLoader) loader).isValid())
          {
-            isValid = ((RealClassLoader) loader).isValid();
+            return true;
          }
       }
-      catch (RuntimeException e)
+      
+      if (loader == null)
       {
-         // Annoyingly, BaseClassLoader.isValid() throws an exception if the classloader is invalid
+         //Bootstrap classloader
+         return true;
       }
-      return isValid;
+      
+      if (bootstrapLoaders.contains(loader))
+      {
+         return true;
+      }
+      
+      return false;
    }
 
    public void setScopingPolicy(AOPClassLoaderScopingPolicy policy)




More information about the jboss-cvs-commits mailing list