[jboss-cvs] JBossAS SVN: r82919 - in projects/aop/trunk: aop/src/main/java/org/jboss/aop/contrib and 7 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jan 15 11:56:51 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-01-15 11:56:51 -0500 (Thu, 15 Jan 2009)
New Revision: 82919

Modified:
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/contrib/IDEClassPoolFactory.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractClassPoolDomain.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractParentDelegationStrategy.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/BaseClassPool.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/BaseClassPoolDomain.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolDomainInternal.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/DefaultParentDelegationStrategy.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/DelegatingClassPool.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/NonDelegatingClassPool.java
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ParentDelegationStrategy.java
   projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/ClassPoolTest.java
   projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/ToClassInvoker.java
   projects/aop/trunk/asintegration-jmx/src/test/java/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java
   projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java
   projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java
   projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ToClassInvoker.java
   projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java
   projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPool.java
   projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClParentDelegationStrategy.java
   projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
Log:
[JBAOP-666] Add logging to the new classpools

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -21,25 +21,27 @@
   */
 package org.jboss.aop.classpool;
 
-import java.lang.ref.WeakReference;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.jboss.aop.AspectManager;
-import org.jboss.aop.util.ClassLoaderUtils;
-
 import javassist.ClassPool;
 import javassist.CtClass;
 import javassist.NotFoundException;
 import javassist.scopedpool.ScopedClassPool;
 import javassist.scopedpool.ScopedClassPoolRepository;
 
+import org.apache.log4j.Logger;
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.util.ClassLoaderUtils;
+
 /**
  * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
  * @version $Revision$
  */
 public class AOPClassPool extends ScopedClassPool
 {
+   protected final Logger logger = Logger.getLogger(this.getClass());
+   
    /** Classnames of classes that will be created - we do not want to look for these in other pools */
    protected ConcurrentHashMap<String, String> generatedClasses = new ConcurrentHashMap<String, String>();
 
@@ -109,13 +111,9 @@
             throw new RuntimeException("Error instantiating search strategy class " + searchStrategy, e);
          }
       }
+      if (logger.isTraceEnabled()) logger.trace(this + " creating pool for loader " + cl + " searchStrategy:" + this.searchStrategy + " isTemp:" + isTemp);
    }
    
-   public void setClassLoader(ClassLoader cl)
-   {
-      classLoader = new WeakReference<ClassLoader>(cl);
-   }
-
    public void close()
    {
       super.close();
@@ -133,16 +131,24 @@
    @Override
    protected CtClass createCtClass(String classname, boolean useCache)
    {
-      return super.createCtClass(classname, useCache);
+      boolean trace = logger.isTraceEnabled();
+      
+      if (trace) logger.trace(this + " attempting to create CtClass " + classname);
+      CtClass clazz = super.createCtClass(classname, useCache);
+      if (trace) logger.trace(this + " created CtClass " + getClassPoolLogStringForClass(clazz));
+      
+      return clazz;
    }
 
    @Override
    public void cacheCtClass(String classname, CtClass c, boolean dynamic)
    {
+      boolean trace = logger.isTraceEnabled();
+      if (trace) logger.trace(this + " caching " + classname);
       super.cacheCtClass(classname, c, dynamic);
       if (dynamic)
       {
-//         registerGeneratedClass(classname);
+         if (trace) logger.trace(this + " registering dynamic class " + classname);
          generatedClasses.put(classname, classname);
          String resourcename = getResourceName(classname);
          localResources.put(resourcename, Boolean.TRUE);
@@ -159,16 +165,21 @@
       return ClassLoaderUtils.getResourceName(classname);
    }
 
-   protected boolean isLocalResource(String resourceName)
+   protected final boolean isLocalResource(String resourceName, boolean trace)
    {
       String classResourceName = resourceName;
       Boolean isLocal = localResources.get(classResourceName);
       if (isLocal != null)
       {
+         if (trace) logger.trace(this + " " + resourceName + " is local " + isLocal);
+      
          return isLocal.booleanValue();
       }
       boolean localResource = isLocalClassLoaderResource(classResourceName);
       localResources.put(classResourceName, localResource ? Boolean.TRUE : Boolean.FALSE);
+      
+      if (trace) logger.trace(this + " " + resourceName + " is local " + localResource);
+      
       return localResource;
    }
 
@@ -177,11 +188,18 @@
       return getClassLoader().getResource(classResourceName) != null;
    }
    
+   @Override
    public synchronized CtClass getLocally(String classname)
            throws NotFoundException
    {
+      boolean trace = logger.isTraceEnabled();
+      if (trace) logger.trace(this + " attempting local get for " + classname);
       softcache.remove(classname);
       CtClass clazz = (CtClass) classes.get(classname);
+      if (trace && clazz != null)
+      {
+         logger.trace(this + " found " + classname + " in cache");
+      }
       if (clazz == null)
       {
          clazz = createCtClass(classname, true);
@@ -192,6 +210,20 @@
       return clazz;
    }
 
+   @Override
+   protected CtClass getCachedLocally(String classname)
+   {
+      if (logger.isTraceEnabled()) logger.trace(this + " checking local cache for " + classname);
+      return super.getCachedLocally(classname);
+   }
+
+   @Override
+   public void lockInCache(CtClass c)
+   {
+      if (logger.isTraceEnabled()) logger.trace(this + " locking in cache " + c.getName());
+      super.lockInCache(c);
+   }
+
    public void setClassLoadedButNotWoven(String classname)
    {
       loadedButNotWovenClasses.put(classname, Boolean.TRUE);
@@ -230,24 +262,39 @@
       return super.get0(classname, useCache);
    }
    
+   protected String getClassPoolLogStringForClass(CtClass clazz)
+   {
+      if (clazz == null)
+      {
+         return null;
+      }
+      return clazz.getClassPool().toString();
+   }
+
    /**
     * Contains the original AOPClassPool.getCached()
     * 
     */
    private class SearchAllRegisteredLoadersSearchStrategy implements AOPCLassPoolSearchStrategy
    {
+      Logger logger = Logger.getLogger(this.getClass());
       public CtClass getCached(String classname)
       {
+         boolean trace = logger.isTraceEnabled();
+         
+         if (trace) logger.trace(this + " " + AOPClassPool.this + " searching all pools for " + classname);
+         
          CtClass clazz = getCachedLocally(classname);
          if (clazz == null)
          {
+            //TODO is this check really necessary 
             boolean isLocal = false;
 
             ClassLoader cl = getClassLoader0();
 
             if (cl != null)
             {
-               isLocal = isLocalResource(getResourceName(classname));
+               isLocal = isLocalResource(getResourceName(classname), trace);
             }
 
             if (!isLocal)
@@ -263,6 +310,7 @@
                         AOPClassPool pool = (AOPClassPool) pl;
                         if (pool.isUnloadedClassLoader())
                         {
+                           if (trace) logger.trace(this + " pool is unloaded " + pool);
                            AspectManager.instance().unregisterClassLoader(pool.getClassLoader());
                            continue;
                         }
@@ -270,20 +318,22 @@
                         //Do not check classpools for scoped classloaders
                         if (!pool.includeInGlobalSearch())
                         {
+                           if (trace) logger.trace(this + " pool is scoped " + pool);
                            continue;
                         }
 
+                        if (trace) logger.trace(this + " " + AOPClassPool.this + " searching for " + classname + " in " + pool);
                         clazz = pool.getCachedLocally(classname);
                         if (clazz != null)
                         {
-                           return clazz;
+                           break;
                         }
                      }
                   }
                }
             }
          }
-         // *NOTE* NEED TO TEST WHEN SUPERCLASS IS IN ANOTHER UCL!!!!!!
+         if (trace) logger.trace(this + " " + AOPClassPool.this + " found " + classname + " in pool" + getClassPoolLogStringForClass(clazz));
          return clazz;
       }
    }
@@ -293,9 +343,16 @@
     */
    private class SearchLocalLoaderLoaderSearchStrategy implements AOPCLassPoolSearchStrategy
    {
+      Logger logger = Logger.getLogger(this.getClass());
+
       public CtClass getCached(String classname)
       {
-         return getCachedLocally(classname);
+         boolean trace = logger.isTraceEnabled();
+         
+         if (trace) logger.trace(this + " " + AOPClassPool.this + " searching just this pool for " + classname);
+         CtClass clazz = getCachedLocally(classname);
+         if (trace) logger.trace(this + " " + AOPClassPool.this + " found " + classname + " in pool" + getClassPoolLogStringForClass(clazz));
+         return clazz;
       }
    }
 }

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/contrib/IDEClassPoolFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/contrib/IDEClassPoolFactory.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/contrib/IDEClassPoolFactory.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -104,7 +104,7 @@
             {
                URL urlPaths[] = classPaths.toArray(new URL[classPaths.size()]);
                loader = new Loader(urlPaths, Thread.currentThread().getContextClassLoader());
-               setClassLoader(loader);
+               //setClassLoader(loader); this is set by the constructor?
 
                Thread.currentThread().setContextClassLoader(loader);
                return null;

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractClassPoolDomain.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractClassPoolDomain.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractClassPoolDomain.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -21,6 +21,8 @@
 */ 
 package org.jboss.aop.classpool;
 
+import org.jboss.logging.Logger;
+
 import javassist.ClassPool;
 import javassist.CtClass;
 import javassist.NotFoundException;
@@ -34,32 +36,39 @@
  */
 public abstract class AbstractClassPoolDomain implements ClassPoolDomainInternal
 {
-   protected CtClass getCachedOrCreateFromPoolParent(BaseClassPool initiatingPool, String classname, boolean create)
+   protected final Logger logger = Logger.getLogger(this.getClass());
+   
+   protected CtClass getCachedOrCreateFromPoolParent(BaseClassPool initiatingPool, String classname, boolean create, boolean trace)
    {
       if (initiatingPool == null)
       {
+         if (trace) logger.trace(this + " get cached or create " + classname + " from pool parent - no initiating pool");
          return null;
       }
       ClassPool parentPool = initiatingPool.getParent();
       if (parentPool == null)
       {
+         if (trace) logger.trace(this + " get cached or create " + classname + " from pool parent - no parent pool");
          return null;
       }
        
-      return getCachedOrCreateFromPool(parentPool, classname, create);
+      return getCachedOrCreateFromPool(parentPool, classname, create, trace);
    }
 
    
-   protected CtClass getCachedOrCreateFromPool(ClassPool parentPool, String classname, boolean create)
+   protected CtClass getCachedOrCreateFromPool(ClassPool pool, String classname, boolean create, boolean trace)
    {
-      if (parentPool instanceof BaseClassPool)
+      if (pool instanceof BaseClassPool)
       {
-         return getCachedOrCreateFromPool((BaseClassPool)parentPool, classname, create);
+         return getCachedOrCreateFromPool((BaseClassPool)pool, classname, create, trace);
       }
       try
       {
          //This will check the parents
-         return parentPool.get(classname);
+         if (trace) logger.trace(this + " get cached or create " + classname + " from non-BaseClassPool pool " + pool);
+         CtClass clazz = pool.get(classname);
+         if (trace) logger.trace(this + " got cached or create " + classname + " from non-BaseClassPool pool " + clazz.getClassPool());
+         return clazz;
       }
       catch(NotFoundException e)
       {
@@ -67,32 +76,37 @@
       }
    }
 
-   protected CtClass getCachedOrCreateFromPool(BaseClassPool parentPool, String classname, boolean create)
+   protected CtClass getCachedOrCreateFromPool(BaseClassPool pool, String classname, boolean create, boolean trace)
    {
-      if (parentPool == null)
+      if (pool == null)
       {
+         if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - no pool");
          return null;
       }
       
       CtClass clazz = null;
-      if (!parentPool.childFirstLookup)
+      if (!pool.childFirstLookup)
       {
-         clazz = getCachedOrCreateFromPoolParent(parentPool, classname, create); 
+         if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - checking parent (parentFirst)");
+         clazz = getCachedOrCreateFromPoolParent(pool, classname, create, trace); 
       }
       
       if (clazz == null)
       {
          //We can use the exposed methods directly to avoid the overhead of NotFoundException
-         clazz = parentPool.getCached(classname);
+         if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - checking cache");
+         clazz = pool.getCached(classname);
          if (clazz == null && create)
          {
-            clazz = parentPool.createCtClass(classname, true);
+            if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - creating");
+            clazz = pool.createCtClass(classname, true);
          }
       }
       
-      if (clazz == null && !parentPool.childFirstLookup)
+      if (clazz == null && !pool.childFirstLookup)
       {
-         clazz = getCachedOrCreateFromPoolParent(parentPool, classname, create); 
+         if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - checking parent (parentLast)");
+         clazz = getCachedOrCreateFromPoolParent(pool, classname, create, trace); 
       }
       return clazz;
    }

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -45,7 +45,7 @@
       
    }
    
-   protected BaseClassPool getPool()
+   protected AOPClassPool getPool()
    {
       return pool;
    }

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractParentDelegationStrategy.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractParentDelegationStrategy.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/AbstractParentDelegationStrategy.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -23,6 +23,8 @@
 
 import javassist.CtClass;
 
+import org.jboss.logging.Logger;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -30,6 +32,8 @@
  */
 public abstract class AbstractParentDelegationStrategy implements ParentDelegationStrategy
 {
+   protected final Logger logger = Logger.getLogger(this.getClass().getName());
+   private ClassPoolDomainInternal domain;
    private ClassPoolDomainInternal parent;
    
    protected AbstractParentDelegationStrategy(ClassPoolDomain parent, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
@@ -59,11 +63,30 @@
    
    protected boolean hasParent()
    {
+      if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " hasParent " + parent != null);
       return parent != null;
    }
    
-   public CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create)
+   protected ClassPoolDomainInternal getDomain()
    {
-      return parent.getCachedOrCreate(initiatingPool, classname, resourceName, create);
+      return domain;
    }
+   
+   public CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
+   {
+      return parent.getCachedOrCreate(initiatingPool, classname, resourceName, create, trace);
+   }
+   
+   public void setDomain(ClassPoolDomainInternal domain)
+   {
+      if (domain == null)
+      {
+         throw new IllegalArgumentException("Null domain");
+      }
+      if (this.domain != null)
+      {
+         throw new IllegalArgumentException("Cannot change domain");
+      }
+      this.domain = domain;
+   }
 }

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/BaseClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/BaseClassPool.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/BaseClassPool.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -41,20 +41,18 @@
    {
       super(cl, parent, repository);
       isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
-
+      if (logger.isTraceEnabled()) logger.trace(this + " isLocalResourcePlugin:" + isLocalResourcePlugin);
    }
 
    public BaseClassPool(ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository, Class<? extends AOPCLassPoolSearchStrategy> searchStrategy)
    {
       super(cl, parent, repository, searchStrategy);
       isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
+      if (logger.isTraceEnabled()) logger.trace(this + " isLocalResourcePlugin:" + isLocalResourcePlugin);
    }
    
-   /**
-    * Make createCtClass public so that we can override it 
-    */
    @Override
-   public CtClass createCtClass(String classname, boolean useCache)
+   protected CtClass createCtClass(String classname, boolean useCache)
    {
       CtClass clazz = super.createCtClass(classname, useCache);
       if (clazz != null)
@@ -64,7 +62,7 @@
       return clazz;
    }
 
-   protected CtClass createParentCtClass(String classname, boolean useCache)
+   protected CtClass createParentCtClass(String classname, boolean useCache, boolean trace)
    {
       if (parent == null)
       {
@@ -74,7 +72,7 @@
       //Make parent create class
       if (parent instanceof BaseClassPool)
       {
-         return ((BaseClassPool)parent).createCtClass(classname, useCache);
+         return ((AOPClassPool)parent).createCtClass(classname, useCache);
       }
       else
       {
@@ -104,4 +102,20 @@
    {
       return isLocalResourcePlugin.isMyResource(classResourceName);
    }
+
+   @Override
+   public final CtClass get(String classname) throws NotFoundException 
+   {
+      boolean trace = logger.isTraceEnabled();
+      if (trace)
+      {
+         logger.trace(this + " initiating get of " + classname);
+      }
+      CtClass clazz = super.get(classname);
+      if (trace)
+      {
+         logger.trace(this + " completed get of " + classname + " " + getClassPoolLogStringForClass(clazz));
+      }
+      return clazz;
+   }
 }

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/BaseClassPoolDomain.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/BaseClassPoolDomain.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/BaseClassPoolDomain.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -55,68 +55,81 @@
    {
       this.domainName = domainName;
       this.parentDelegationStrategy = parentDelegationStrategy;
+      parentDelegationStrategy.setDomain(this);
+      if (logger.isTraceEnabled()) logger.trace("Created " + this + " parentDelegationStrategy:" + parentDelegationStrategy);
    }
    
    public synchronized void addClassPool(DelegatingClassPool pool)
    {
       if (!delegatingPools.contains(pool))
       {
+         if (logger.isTraceEnabled()) logger.trace(this + " adding pool " + pool);
          delegatingPools.add(pool);
       }
    }
    
    public synchronized void removeClassPool(DelegatingClassPool pool)
    {
+      if (logger.isTraceEnabled()) logger.trace(this + " removing pool " + pool);
       delegatingPools.remove(pool);
    }
    
    public synchronized CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, boolean create)
    {
+      boolean trace = logger.isTraceEnabled();
       String resourceName = ClassLoaderUtils.getResourceName(classname);
       
-      CtClass clazz = getCachedOrCreate(initiatingPool, classname, resourceName, create);
+      CtClass clazz = getCachedOrCreate(initiatingPool, classname, resourceName, create, trace);
       
       if (clazz == null)
       {
-         clazz = getCachedOrCreateFromPoolParent(initiatingPool, classname, create);
+         clazz = getCachedOrCreateFromPoolParent(initiatingPool, classname, create, trace);
       }
       return clazz;
    }
    
-   public CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create)
+   public CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
    {
+      if (trace) logger.trace(this + " looking for " + classname);
+         
       CtClass clazz = null;
       if (isParentBefore(classname))
       {
-         clazz = getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create);
+         if (trace) logger.trace(this + " checking parent first for " + classname);
+         clazz = getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create, trace);
       }
       if (clazz == null)
       {
-         String packageName = ClassLoaderUtils.getPackageName(classname);
-         for (DelegatingClassPool pool : getPoolsForPackage(packageName))
+         List<DelegatingClassPool> pools = getPoolsForClassName(classname);
+         if (pools.size() > 0)
          {
-            clazz = pool.loadLocally(classname, resourceName, create);
-            if (clazz != null)
+            for (DelegatingClassPool pool : pools)
             {
-               break;
+               clazz = pool.loadLocally(classname, resourceName, create);
+               if (clazz != null)
+               {
+                  break;
+               }
             }
          }
       }
       if (clazz == null && isParentAfter(classname))
       {
-         clazz = getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create);
+         if (trace) logger.trace(this + " checking parent last for " + classname);
+         clazz = getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create, trace);
       }
+      if (trace) logger.trace(this + " found " + classname + " in " + (clazz == null ? "null" : clazz.getClassPool()));
       return clazz;
    }
 
-   public CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create)
+   public CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
    {
-      return parentDelegationStrategy.getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create);
+      return parentDelegationStrategy.getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create, trace);
    }
    
    public String toString()
    {
-      return super.toString() + "[" + domainName + "]";
+      return "[" + super.toString() + " name:" + domainName + "]";
    }
 
    public List<DelegatingClassPool> getClassPools()
@@ -134,7 +147,7 @@
       return parentDelegationStrategy.isParentAfter(classname);
    }
    
-   protected List<DelegatingClassPool> getPoolsForPackage(String packageName)
+   protected List<DelegatingClassPool> getPoolsForClassName(String classname)
    {
       return delegatingPools;
    }

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolDomainInternal.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolDomainInternal.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolDomainInternal.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -32,9 +32,9 @@
 {
    CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, boolean create);
    
-   CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create);
+   CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace);
    
-   CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create);
+   CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace);
    
    void addClassPool(DelegatingClassPool pool);
    

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -40,6 +40,7 @@
       {
          throw new IllegalStateException("Null parent classpool");
       }
+      if (logger.isTraceEnabled()) logger.trace("Created " + this);
    }
    
    public ClassPool initialiseParentClassLoader()
@@ -53,12 +54,12 @@
    }
 
    
-   public synchronized CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create)
+   public synchronized CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
    {
-      return getCachedOrCreateFromPool(pool, classname, create);
+      return getCachedOrCreateFromPool(pool, classname, create, trace);
    }
 
-   public CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create)
+   public CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
    {
       return null;
    }

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/DefaultParentDelegationStrategy.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/DefaultParentDelegationStrategy.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/DefaultParentDelegationStrategy.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -37,11 +37,15 @@
    
    public boolean isParentBefore(String classname)
    {
-      return hasParent() && parentFirst == true;
+      boolean isParentBefore = hasParent() && parentFirst == true;
+      if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentBefore " + isParentBefore);
+      return isParentBefore;
    }
    
    public boolean isParentAfter(String classname)
    {
-      return hasParent() && parentFirst == false;
+      boolean isParentAfter = hasParent() && parentFirst == false;
+      if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentAfter " + isParentAfter);
+      return isParentAfter;
    }
 }

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/DelegatingClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/DelegatingClassPool.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/DelegatingClassPool.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -26,8 +26,6 @@
 import javassist.NotFoundException;
 import javassist.scopedpool.ScopedClassPoolRepository;
 
-import org.jboss.logging.Logger;
-
 /**
  * Base class for classpools backed by a domain
  * 
@@ -36,7 +34,6 @@
  */
 public class DelegatingClassPool extends BaseClassPool
 {
-   private final static Logger logger = Logger.getLogger(DelegatingClassPool.class);
    private final ClassPoolDomainInternal domain;
    
    private boolean closed;
@@ -53,29 +50,25 @@
          throw new IllegalArgumentException("Domain must implement ClassPoolDomainInternal");
       }
       this.domain = (ClassPoolDomainInternal)domain;
+      if (logger.isTraceEnabled()) logger.trace(this + " domain:" + this);
       this.domain.addClassPool(this);
    }
 
-   public final CtClass get(String classname) throws NotFoundException 
-   {
-      if (logger.isTraceEnabled())
-      {
-         logger.trace("Initiating lookup of " + classname + " in " + this);
-      }
-      return super.get(classname);
-   }
-
    public CtClass loadLocally(String classname, String resourceName, boolean create)
    {
+      boolean trace = logger.isTraceEnabled();
+      if (trace) logger.trace(this + " attempt to load locally " + classname);
+         
       CtClass clazz = null;
-      if (isLocalResource(resourceName))
+      if (isLocalResource(resourceName, trace))
       {
          clazz = getCachedLocally(classname);
          if (clazz == null && create)
          {
-            return createCtClass(classname, true);
+            clazz = createCtClass(classname, true);
          }
       }
+      if (trace) logger.trace(this + " loaded locally " + classname + " " + getClassPoolLogStringForClass(clazz));
       return clazz;
    }
    
@@ -99,6 +92,7 @@
    @Override
    public void close()
    {
+      if (logger.isTraceEnabled()) logger.trace(this + " closing");
       closed = true;
       super.close();
       domain.removeClassPool(this);
@@ -111,14 +105,8 @@
    }
    
    @Override
-   public CtClass getCachedLocally(String classname)
-   {
-      return super.getCachedLocally(classname);
-   }
-
-   @Override
    public String toString()
    {
-      return super.toString() + " domain: " + domain;
+      return "[" + super.toString() + " domain: " + domain + "]";
    }
 }

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/NonDelegatingClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/NonDelegatingClassPool.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/NonDelegatingClassPool.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -40,22 +40,26 @@
    }
 
    @Override
-   public CtClass createCtClass(String classname, boolean useCache)
+   protected CtClass createCtClass(String classname, boolean useCache)
    {
+      boolean trace = logger.isTraceEnabled();
       CtClass clazz = null;
       if (!childFirstLookup)
       {
-         clazz = createParentCtClass(classname, useCache);
+         if (trace)logger.trace(this + " attempting to create " + classname + " in parent pool (parentFirst)");
+         clazz = createParentCtClass(classname, useCache, trace);
       }
-      if (clazz == null && isLocalResource(getResourceName(classname)))
+      if (clazz == null && isLocalResource(getResourceName(classname), trace))
       {
          clazz = super.createCtClass(classname, useCache);
       }
       if (childFirstLookup && clazz == null)
       {
-         clazz = createParentCtClass(classname, useCache);
+         if (trace)logger.trace(this + " attempting to create " + classname + " in parent pool (parentLast)");
+         clazz = createParentCtClass(classname, useCache, trace);
       }
       
+      if (trace)logger.trace(this + " created " + classname + " " + getClassPoolLogStringForClass(clazz));
       return clazz;
    }
 }

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ParentDelegationStrategy.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ParentDelegationStrategy.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ParentDelegationStrategy.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -30,8 +30,10 @@
  */
 public interface ParentDelegationStrategy
 {
-   CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create);
+   void setDomain(ClassPoolDomainInternal domain);
    
+   CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace);
+   
    boolean isParentBefore(String classname);
 
    boolean isParentAfter(String classname);

Modified: projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/ClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/ClassPoolTest.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-core/src/test/java/org/jboss/test/aop/classpool/test/ClassPoolTest.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -111,7 +111,7 @@
    protected void setUp() throws Exception
    {
       super.setUp();
-      enableTrace("org.jboss.aop.classpool.DelegatingClassPool");
+      enableTrace("org.jboss.aop.classpool");
    }
 
    protected void assertCannotLoadClass(ClassLoader loader, String classname)

Modified: projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/ToClassInvoker.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/ToClassInvoker.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/ToClassInvoker.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -28,6 +28,7 @@
 import javassist.CannotCompileException;
 import javassist.CtClass;
 
+import org.jboss.logging.Logger;
 import org.jboss.mx.loading.RepositoryClassLoader;
 
 /**
@@ -37,6 +38,8 @@
  */
 public class ToClassInvoker
 {
+   Logger logger = Logger.getLogger(this.getClass());
+
    public File tmpDir;
 
    public Object tmplock = new Object();
@@ -46,25 +49,18 @@
       this.tmpDir = tmpDir;
    }
 
-   public boolean isDynamicResource(String resourceName)
-   {
-      File file = new File(tmpDir, resourceName);
-      if (file.exists())
-      {
-         return true;
-      }
-      
-      return false;
-   }
-   
    public Class<?> toClass(ToClassInvokerPoolReference pool, CtClass cc, String classFileName, ClassLoader loader, ProtectionDomain domain)
    throws CannotCompileException
    {
+      boolean trace = logger.isTraceEnabled();
       pool.lockInCache(cc);
       final ClassLoader myloader = pool.getClassLoader();
       if (myloader == null || tmpDir == null)
       {
-         return pool.superPoolToClass(cc, loader, domain);
+         if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " tmpDir:" + tmpDir + " default to superPool.toClass for " + cc.getName());
+         Class<?> clazz = pool.superPoolToClass(cc, loader, domain);
+         if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
+         return clazz;
       }
       Class<?> dynClass = null;
       try
@@ -74,6 +70,7 @@
          synchronized (tmplock)
          {
             classFile = new File(tmpDir, classFileName);
+            if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " writing bytes to " + classFile);
             File pkgDirs = classFile.getParentFile();
             pkgDirs.mkdirs();
             FileOutputStream stream = new FileOutputStream(classFile);
@@ -92,6 +89,8 @@
 
          // Now load the class through the cl
          dynClass = myloader.loadClass(cc.getName());
+         if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + dynClass);
+         return dynClass;
       }
       catch (Exception ex)
       {
@@ -99,8 +98,6 @@
          cfe.initCause(ex);
          throw cfe;
       }
-
-      return dynClass;
    }
 
 }

Modified: projects/aop/trunk/asintegration-jmx/src/test/java/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/test/java/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-jmx/src/test/java/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -124,6 +124,13 @@
       }
    }
 
+   @Override
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+      enableTrace("org.jboss.aop.classpool");
+      enableTrace("org.jboss.aop.classpool.ucl");
+   }
 
    public MBeanServer getServer()
    {

Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -39,8 +39,6 @@
  */
 public class JBoss5ClassPool extends AOPClassPool implements ToClassInvokerPoolReference
 {
-   Logger log = Logger.getLogger(JBoss5ClassPool.class);
-
    protected ToClassInvoker toClassInvoker = null;
 
    boolean closed;

Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -46,8 +46,6 @@
  */
 public class ScopedJBoss5ClassPool extends JBoss5ClassPool
 {
-   Logger log = Logger.getLogger(ScopedJBoss5ClassPool.class);
-   
    ThreadLocal<ClassPool> lastPool = new ThreadLocal<ClassPool>();
    WeakReference<ClassLoaderDomain> domainRef;
    /** The classpool representing the parent domain of this one */
@@ -61,7 +59,7 @@
       this.parentDomainPool = parentDomainPool;
       this.domainRef = new WeakReference<ClassLoaderDomain>(domain);
       
-      log.debug("Created new ScopedJBoss5ClasPool for " + cl + ", with parent: " + src + ", parentDomain: " + parentDomainPool + ", parentFirst: " + parentFirst);
+      logger.debug("Created new ScopedJBoss5ClasPool for " + cl + ", with parent: " + src + ", parentDomain: " + parentDomainPool + ", parentFirst: " + parentFirst);
    }
 
    private URL getResourceUrlForClass(String resourcename)
@@ -183,18 +181,18 @@
    
    public CtClass getCached(String classname)
    {
-      boolean trace = log.isTraceEnabled();
+      boolean trace = logger.isTraceEnabled();
       
       if (trace)
       {
-         log.trace("getCached() " + classname);
+         logger.trace("getCached() " + classname);
       }
       
       if (classname == null)
       {
          if (trace)
          {
-            log.trace("getCached() returning null (classname == null)");
+            logger.trace("getCached() returning null (classname == null)");
          }
          return null;
       }
@@ -202,7 +200,7 @@
       {
          if (trace)
          {
-            log.trace("getCached() returning null (unloaded)");
+            logger.trace("getCached() returning null (unloaded)");
          }
          return null;
       }
@@ -212,7 +210,7 @@
          //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");
+            logger.trace("getCached() In generated classes - check super");
          }
          return super.getCached(classname);
       }
@@ -231,7 +229,7 @@
             {
                if (trace)
                {
-                  log.trace("getCached() Creating my class " + classname);
+                  logger.trace("getCached() Creating my class " + classname);
                }
                clazz = createCtClass(classname, false);
                if (clazz != null)
@@ -243,14 +241,14 @@
             {
                if (trace)
                {
-                  log.trace("getCached() Returning my class " + classname);
+                  logger.trace("getCached() Returning my class " + classname);
                }
                return clazz;
             }
          }
          if (trace)
          {
-            log.trace("getCached() Checking super for my class " + classname);
+            logger.trace("getCached() Checking super for my class " + classname);
          }
          return super.getCached(classname);
       }
@@ -258,7 +256,7 @@
       {
          if (trace)
          {
-            log.trace("getCached() Checking super for my class " + classname + " (no url)");
+            logger.trace("getCached() Checking super for my class " + classname + " (no url)");
          }
          return super.getCached(classname);
       }
@@ -269,7 +267,7 @@
          ClassPool pool = getCorrectPoolForResource(classname, resourcename, url, trace);
          if (trace)
          {
-            log.trace("getCached() Found pool for class " + classname + " " + pool);
+            logger.trace("getCached() Found pool for class " + classname + " " + pool);
          }
          if (pool != lastPool.get())
          {
@@ -277,7 +275,7 @@
             CtClass found = pool.get(classname);
             if (trace)
             {
-               log.trace("getCached() Found clazz " + classname + " in " + pool + " : " + found);
+               logger.trace("getCached() Found clazz " + classname + " in " + pool + " : " + found);
             }
             return found;
          }
@@ -331,7 +329,7 @@
                   {
                      if (trace)
                      {
-                        log.trace("getCorrectPoolForResource() Candidate classloader " + bcl + " has local resource " + foundUrl);
+                        logger.trace("getCorrectPoolForResource() Candidate classloader " + bcl + " has local resource " + foundUrl);
                      }
                      return candidate;
                   }
@@ -358,7 +356,7 @@
                   pool.get(classname);
                   if (trace)
                   {
-                     log.trace("getCorrectPoolForResource(() Found  " + classname + " (no url)");
+                     logger.trace("getCorrectPoolForResource(() Found  " + classname + " (no url)");
                   }
                   return pool;
                }

Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ToClassInvoker.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ToClassInvoker.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ToClassInvoker.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -30,6 +30,7 @@
 import javassist.CtClass;
 
 import org.jboss.classloading.spi.RealClassLoader;
+import org.jboss.logging.Logger;
 import org.jboss.virtual.plugins.context.memory.MemoryContextFactory;
 
 /**
@@ -38,6 +39,8 @@
  */
 public class ToClassInvoker
 {
+   Logger logger = Logger.getLogger(this.getClass());
+   
    public URL tempURL;
 
    public Object tmplock = new Object();
@@ -49,11 +52,15 @@
 
    public Class<?> toClass(ToClassInvokerPoolReference pool, CtClass cc, String classFileName, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
    {
+      boolean trace = logger.isTraceEnabled();
       pool.lockInCache(cc);
       final ClassLoader myloader = pool.getClassLoader();
       if (myloader == null || tempURL == null)
       {
-         return pool.superPoolToClass(cc, loader, domain);
+         if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " tempURL:" + tempURL + " default to superPool.toClass for " + cc.getName());
+         Class<?> clazz = pool.superPoolToClass(cc, loader, domain);
+         if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
+         return clazz;
       }
       
       try
@@ -62,6 +69,7 @@
          //Write the classfile to the temporary url
          synchronized (tmplock)
          {
+            if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " writing bytes to " + tempURL);
             ByteArrayOutputStream byteout = new ByteArrayOutputStream();
             BufferedOutputStream out = new BufferedOutputStream(byteout);
             out.write(cc.toBytecode());
@@ -78,15 +86,15 @@
             }
             
             Class<?> clazz = myloader.loadClass(cc.getName());
-            
+            if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
             return clazz;
          }
       }
       catch(Exception e)
       {
-       ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName() + " on " + this + " loader:" + myloader);
-       cfe.initCause(e);
-       throw cfe;
+         ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName() + " on " + this + " loader:" + myloader);
+         cfe.initCause(e);
+         throw cfe;
       }
    }
 }
\ No newline at end of file

Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -40,6 +40,7 @@
 import org.jboss.aop.classpool.BaseClassPoolDomain;
 import org.jboss.aop.classpool.ClassPoolDomain;
 import org.jboss.aop.classpool.DelegatingClassPool;
+import org.jboss.aop.util.ClassLoaderUtils;
 import org.jboss.classloader.spi.DelegateLoader;
 import org.jboss.classloader.spi.ParentPolicy;
 import org.jboss.classloading.spi.dependency.Module;
@@ -76,6 +77,7 @@
       }
       
       Module module = getModuleForPool(pool);
+      boolean trace = logger.isTraceEnabled();
       
       for (String pkg : module.getPackageNames())
       {
@@ -86,6 +88,7 @@
             poolsByPackage.put(pkg, pools);
          }
          pools.add(pool);
+         if (trace) logger.trace(this + " adding package " + pkg + " for pool " + pool);
       }
    }
    
@@ -95,7 +98,8 @@
       super.removeClassPool(pool);
    
       Module module = getModuleForPool(pool);
-      
+      boolean trace = logger.isTraceEnabled();
+
       for (String pkg : module.getPackageNames())
       {
          Set<DelegatingClassPool> pools = poolsByPackage.get(pkg);
@@ -105,44 +109,52 @@
             if (pools.size() == 0)
             {
                poolsByPackage.remove(pkg);
+               if (trace) logger.trace(this + " removing package " + pkg + " for pool " + pool);
             }
          }
       }
    }
  
    @Override
-   public CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create)
+   public CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
    {
+      if (trace) logger.trace(this + " looking for " + classname);
       Module module = getModuleForPool(initiatingPool);
       if (module != null && module.isImportAll())
       {
          //Use the old "big ball of mud" model
-         return super.getCachedOrCreate(initiatingPool, classname, resourceName, create);
+         if (trace) logger.trace(this + " isImportAll");
+         return super.getCachedOrCreate(initiatingPool, classname, resourceName, create, trace);
       }
       
       //Attempt OSGi style loading
       CtClass clazz = null;
       if (isParentBefore(classname))
       {
-         clazz = getCachedOrCreateFromParent(null, classname, resourceName, create);
+         if (trace) logger.trace(this + " checking parent first for " + classname);
+         clazz = getCachedOrCreateFromParent(null, classname, resourceName, create, trace);
       }
       
       //Check imports first
       if (clazz == null && module != null)
       {
-         clazz = getCtClassFromModule(module, classname);
+         if (trace) logger.trace(this + " checking imports for " + classname);
+         clazz = getCtClassFromModule(module, classname, trace);
       }
       
       //Try to check the initiating pool itself
       if (clazz == null && initiatingPool != null)
       {
+         if (trace) logger.trace(this + " checking pool " + initiatingPool + " locally for " + classname);
          clazz = initiatingPool.loadLocally(classname, resourceName, create);
       }
       
       if (clazz == null && isParentAfter(classname))
       {
-         clazz = getCachedOrCreateFromParent(null, classname, resourceName, create);
+         if (trace) logger.trace(this + " checking parent last for " + classname);
+         clazz = getCachedOrCreateFromParent(null, classname, resourceName, create, trace);
       }
+      if (trace) logger.trace(this + " found " + classname + " in " + (clazz == null ? "null" : clazz.getClassPool()));
       return clazz;
    }
    
@@ -152,12 +164,15 @@
       {
          return null;
       }
-      return ((JBossClDelegatingClassPool)pool).getModule();
+      Module module = ((JBossClDelegatingClassPool)pool).getModule();
+      if (logger.isTraceEnabled()) logger.trace(this + " got module " + module + " for " + pool);
+      return module;
    }
    
    @Override
-   protected List<DelegatingClassPool> getPoolsForPackage(String packageName)
+   protected List<DelegatingClassPool> getPoolsForClassName(String classname)
    {
+      String packageName = ClassLoaderUtils.getPackageName(classname);
       Set<DelegatingClassPool> poolSet = poolsByPackage.get(packageName);
       if (poolSet == null)
       {
@@ -166,26 +181,27 @@
       return new ArrayList<DelegatingClassPool>(poolSet);
    }
 
-   private CtClass getCtClassFromModule(Module module, String classname)
+   private CtClass getCtClassFromModule(Module module, String classname, boolean trace)
    {
       //FIXME Hack to work with both snapshot fix for JBCL-78 and what currently exists in the API
       //Remove once JBCL-78 is released
-      CtClass clazz = getCtClassFromModuleHack(module, classname);
+      CtClass clazz = getCtClassFromModuleHack(module, classname, trace);
       if (clazz != null)
       {
          return clazz;
       }
-      return getCtClassFromDelegates(module, classname);
+      return getCtClassFromDelegates(module, classname, trace);
    }
 
    //TODO This should not use reflection once JBCL-78 has been released
-   private CtClass getCtClassFromModuleHack(Module module, String classname)
+   private CtClass getCtClassFromModuleHack(Module module, String classname, boolean trace)
    {
       Module found = null;
       try
       {
          Method m = Module.class.getMethod("getModuleForClass", String.class);
          found = (Module)m.invoke(module, classname);
+         if (trace) logger.trace(this + " module for " + classname + " " + found);
       }
       catch (Exception e1)
       {
@@ -200,7 +216,7 @@
       {
          if (pool instanceof BaseClassPool)
          {
-            return getCachedOrCreateFromPool((BaseClassPool)pool, classname, true);
+            return getCachedOrCreateFromPool((BaseClassPool)pool, classname, true, trace);
          }
          return pool.get(classname);
       }
@@ -211,7 +227,7 @@
    }
    
    //TODO Delete this once JBCL-78 has been released
-   private CtClass getCtClassFromDelegates(Module module, String classname)
+   private CtClass getCtClassFromDelegates(Module module, String classname, boolean trace)
    {
       List<? extends DelegateLoader> delegates = module.getDelegates();
       if (delegates != null)

Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPool.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPool.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -59,7 +59,7 @@
       }
       this.module = module;
       toClassInvoker = new ToClassInvoker(module == null ? null : module.getDynamicClassRoot());
-         
+      if (logger.isTraceEnabled()) logger.trace(this + " module");
       ((JBossClClassPoolDomain)domain).setupPoolsByPackage(this);
    }
 

Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClParentDelegationStrategy.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClParentDelegationStrategy.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClParentDelegationStrategy.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -49,12 +49,16 @@
    public boolean isParentAfter(String classname)
    {
       ClassFilter filter = parentPolicy.getAfterFilter();
-      return filter.matchesClassName(classname);
+      boolean isParentAfter = filter.matchesClassName(classname);
+      if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentAfter " + isParentAfter);      
+      return isParentAfter;
    }
 
    public boolean isParentBefore(String classname)
    {
       ClassFilter filter = parentPolicy.getBeforeFilter();
-      return filter.matchesClassName(classname);
+      boolean isParentBefore = filter.matchesClassName(classname);
+      if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentBefore " + isParentBefore);
+      return isParentBefore;
    }
 }

Modified: projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java	2009-01-15 16:37:27 UTC (rev 82918)
+++ projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java	2009-01-15 16:56:51 UTC (rev 82919)
@@ -187,6 +187,8 @@
    protected void setUp() throws Exception
    {
       super.setUp();
+      enableTrace("org.jboss.aop.classpool");
+      enableTrace("org.jboss.aop.classpool.jbosscl");
       deploy("/org/jboss/test/aop/classpool/jbosscl/Common.xml");
    }
 




More information about the jboss-cvs-commits mailing list