[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