[jboss-cvs] JBossAS SVN: r66400 - in projects/aop/trunk: asintegration/src/main/org/jboss/aop/asintegration/jboss5 and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Oct 24 17:10:09 EDT 2007


Author: kabir.khan at jboss.com
Date: 2007-10-24 17:10:09 -0400 (Wed, 24 Oct 2007)
New Revision: 66400

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java
   projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java
   projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java
Log:
[JBAOP-409] When creating a temp class pool in jboss 5, make sure that the noannotationurl classloader for the jboss5/lib directory is the parent

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java	2007-10-24 20:19:44 UTC (rev 66399)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java	2007-10-24 21:10:09 UTC (rev 66400)
@@ -41,9 +41,9 @@
 public class AOPClassPool extends ScopedClassPool
 {
    /** Classnames of classes that will be created - we do not want to look for these in other pools */
-   protected ConcurrentHashMap generatedClasses = new ConcurrentHashMap();
+   protected ConcurrentHashMap<String, String> generatedClasses = new ConcurrentHashMap<String, String>();
    
-   protected ConcurrentHashMap localResources = new ConcurrentHashMap();
+   protected ConcurrentHashMap<String, Boolean> localResources = new ConcurrentHashMap<String, Boolean>();
 
    static 
    {
@@ -68,7 +68,7 @@
 
    public void setClassLoader(ClassLoader cl)
    {
-      classLoader = new WeakReference(cl);
+      classLoader = new WeakReference<ClassLoader>(cl);
    }
    
    public void registerGeneratedClass(String className)

Modified: projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java
===================================================================
--- projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java	2007-10-24 20:19:44 UTC (rev 66399)
+++ projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java	2007-10-24 21:10:09 UTC (rev 66400)
@@ -23,13 +23,8 @@
 
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
-import java.lang.reflect.Field;
 import java.net.URL;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
 import java.security.ProtectionDomain;
-import java.util.Set;
 
 import javassist.CannotCompileException;
 import javassist.ClassPool;
@@ -38,6 +33,7 @@
 
 import org.jboss.aop.classpool.AOPClassPool;
 import org.jboss.classloader.spi.base.BaseClassLoader;
+import org.jboss.logging.Logger;
 import org.jboss.mx.loading.RepositoryClassLoader;
 import org.jboss.virtual.plugins.context.memory.MemoryContextFactory;
 
@@ -48,6 +44,8 @@
  */
 public class JBoss5ClassPool extends AOPClassPool
 {
+   Logger log = Logger.getLogger(JBoss5ClassPool.class);
+
    protected URL tempURL = null;
    // For loadClass tmpdir creation for UCL
    protected final Object tmplock = new Object();

Modified: projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java
===================================================================
--- projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java	2007-10-24 20:19:44 UTC (rev 66399)
+++ projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java	2007-10-24 21:10:09 UTC (rev 66400)
@@ -91,18 +91,37 @@
    
    public CtClass getCached(String classname)
    {
+      boolean trace = log.isTraceEnabled();
+      
+      if (trace)
+      {
+         log.trace("getCached() " + classname);
+      }
+      
       if (classname == null)
       {
+         if (trace)
+         {
+            log.trace("getCached() returning null (classname == null)");
+         }
          return null;
       }
       if (isUnloadedClassLoader())
       {
+         if (trace)
+         {
+            log.trace("getCached() returning null (unloaded)");
+         }
          return null;
       }
 
       if (generatedClasses.get(classname) != null)
       {
          //It is a new class, and this callback is probably coming from the frozen check when creating a new nested class
+         if (trace)
+         {
+            log.trace("getCached() In generated classes - check super");
+         }
          return super.getCached(classname);
       }
       
@@ -118,6 +137,10 @@
             CtClass clazz = super.getCachedLocally(classname);
             if (clazz == null)
             {
+               if (trace)
+               {
+                  log.trace("getCached() Creating my class " + classname);
+               }
                clazz = createCtClass(classname, false);
                if (clazz != null)
                {
@@ -126,24 +149,45 @@
             }
             if (clazz != null)
             {
+               if (trace)
+               {
+                  log.trace("getCached() Returning my class " + classname);
+               }
                return clazz;
             }
          }
+         if (trace)
+         {
+            log.trace("getCached() Checking super for my class " + classname);
+         }
          return super.getCached(classname);
       }
       else if (url == null)
       {
+         if (trace)
+         {
+            log.trace("getCached() Checking super for my class " + classname + " (no url)");
+         }
          return super.getCached(classname);
       }
       
 
       try
       {
-         ClassPool pool = getCorrectPoolForResource(classname, resourcename, url);
+         ClassPool pool = getCorrectPoolForResource(classname, resourcename, url, trace);
+         if (trace)
+         {
+            log.trace("getCached() Found pool for class " + classname + " " + pool);
+         }
          if (pool != lastPool.get())
          {
             lastPool.set(pool);
-            return pool.get(classname);
+            CtClass found = pool.get(classname);
+            if (trace)
+            {
+               log.trace("getCached() Found clazz " + classname + " in " + pool + " : " + found);
+            }
+            return found;
          }
       }
       catch (NotFoundException e)
@@ -167,49 +211,14 @@
       return false;
    } 
    
-   private ClassPool getCorrectPoolForResource(String classname, String resourceName, URL url)
+   private ClassPool getCorrectPoolForResource(String classname, String resourceName, URL url, boolean trace)
    {
-      boolean trace = log.isTraceEnabled();
       synchronized(AspectManager.getRegisteredCLs())
       {
          //JBoss 5 has an extra NoAnnotationURLCLassLoader that is not on the default path, make sure that that is checked at the end
          //FIXME This needs revisiting/removing once the 
          ArrayList<ClassPool> noAnnotationURLClassLoaderPools = null;
-         
-//         //EXTRA DEBUG STUFF
-//         if (classname.equals("org.jboss.test.aop.scopedextender.Base_A1"))
-//         {
-//            System.out.println("********** Looking for proper pool for Base_A1 - this pool " + this);
-//            boolean found = false;
-//            for(Iterator it = AspectManager.getRegisteredCLs().values().iterator() ; it.hasNext() ; )
-//            {
-//               AOPClassPool candidate = (AOPClassPool)it.next();
-//               if (candidate.isUnloadedClassLoader())
-//               {
-//                  System.out.println("Found something unloaded " + candidate);
-//                  continue;
-//               }
-//
-//               if (candidate.getClassLoader() instanceof BaseClassLoader)
-//               {
-//                  BaseClassLoader bcl = (BaseClassLoader)candidate.getClassLoader();
-//                  URL foundUrl = bcl.getResourceLocally(resourceName);
-//                  if (foundUrl != null)
-//                  {
-//                     System.out.println("=============> Found in " + bcl);
-//                     if (url.equals(foundUrl))
-//                     {
-//                        if (!found)
-//                        {
-//                           System.out.println("^^^ The one returned ^^^");
-//                           found = true;
-//                        }
-//                     }
-//                  }
-//               }
-//            }
-//         }         
-         
+                 
          for(Iterator it = AspectManager.getRegisteredCLs().values().iterator() ; it.hasNext() ; )
          {
             AOPClassPool candidate = (AOPClassPool)it.next();
@@ -224,14 +233,14 @@
                //Sometimes the ClassLoader is a proxy for MBeanProxyExt?!
                BaseClassLoader bcl = (BaseClassLoader)candidate.getClassLoader();
                URL foundUrl = bcl.getResourceLocally(resourceName);
-               if (trace)
-               {
-                  log.trace("Candidate classloader " + bcl + " has local resource " + foundUrl);
-               }
                if (foundUrl != null)
                {
                   if (url.equals(foundUrl))
                   {
+                     if (trace)
+                     {
+                        log.trace("getCorrectPoolForResource() Candidate classloader " + bcl + " has local resource " + foundUrl);
+                     }
                      return candidate;
                   }
                }
@@ -255,6 +264,10 @@
                try
                {
                   pool.get(classname);
+                  if (trace)
+                  {
+                     log.trace("getCorrectPoolForResource(() Found  " + classname + " (no url)");
+                  }
                   return pool;
                }
                catch(NotFoundException ignoreTryNext)
@@ -263,10 +276,18 @@
             }
          }
       }
-
-      return AOPClassPool.createAOPClassPool(ClassPool.getDefault(), AOPClassPoolRepository.getInstance());
+      return createTempPool();
    }
    
+   private ClassPool createTempPool()
+   {
+      //Rememeber that the stuff in jboss5/lib goes in a child classloader of the default classloader. We need
+      //to make this the parent of the temp classloader
+      ClassLoader aopLoader = AspectManager.class.getClassLoader();
+      ClassPool pool = AspectManager.instance().registerClassLoader(aopLoader);
+      return AOPClassPool.createAOPClassPool(pool, AOPClassPoolRepository.getInstance());
+   }
+   
    /**
     * NoAnnotationURLCLassLoader lives in different packages in JBoss 4 and 5
     */




More information about the jboss-cvs-commits mailing list