[jboss-cvs] JBossAS SVN: r66400 - in projects/aop/trunk: asintegration/src/main/org/jboss/aop/asintegration/jboss5 and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Oct 24 17:10:09 EDT 2007
Author: kabir.khan at jboss.com
Date: 2007-10-24 17:10:09 -0400 (Wed, 24 Oct 2007)
New Revision: 66400
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java
projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java
projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java
Log:
[JBAOP-409] When creating a temp class pool in jboss 5, make sure that the noannotationurl classloader for the jboss5/lib directory is the parent
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java 2007-10-24 20:19:44 UTC (rev 66399)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java 2007-10-24 21:10:09 UTC (rev 66400)
@@ -41,9 +41,9 @@
public class AOPClassPool extends ScopedClassPool
{
/** Classnames of classes that will be created - we do not want to look for these in other pools */
- protected ConcurrentHashMap generatedClasses = new ConcurrentHashMap();
+ protected ConcurrentHashMap<String, String> generatedClasses = new ConcurrentHashMap<String, String>();
- protected ConcurrentHashMap localResources = new ConcurrentHashMap();
+ protected ConcurrentHashMap<String, Boolean> localResources = new ConcurrentHashMap<String, Boolean>();
static
{
@@ -68,7 +68,7 @@
public void setClassLoader(ClassLoader cl)
{
- classLoader = new WeakReference(cl);
+ classLoader = new WeakReference<ClassLoader>(cl);
}
public void registerGeneratedClass(String className)
Modified: projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java
===================================================================
--- projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java 2007-10-24 20:19:44 UTC (rev 66399)
+++ projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/JBoss5ClassPool.java 2007-10-24 21:10:09 UTC (rev 66400)
@@ -23,13 +23,8 @@
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
-import java.lang.reflect.Field;
import java.net.URL;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
import java.security.ProtectionDomain;
-import java.util.Set;
import javassist.CannotCompileException;
import javassist.ClassPool;
@@ -38,6 +33,7 @@
import org.jboss.aop.classpool.AOPClassPool;
import org.jboss.classloader.spi.base.BaseClassLoader;
+import org.jboss.logging.Logger;
import org.jboss.mx.loading.RepositoryClassLoader;
import org.jboss.virtual.plugins.context.memory.MemoryContextFactory;
@@ -48,6 +44,8 @@
*/
public class JBoss5ClassPool extends AOPClassPool
{
+ Logger log = Logger.getLogger(JBoss5ClassPool.class);
+
protected URL tempURL = null;
// For loadClass tmpdir creation for UCL
protected final Object tmplock = new Object();
Modified: projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java
===================================================================
--- projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java 2007-10-24 20:19:44 UTC (rev 66399)
+++ projects/aop/trunk/asintegration/src/main/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java 2007-10-24 21:10:09 UTC (rev 66400)
@@ -91,18 +91,37 @@
public CtClass getCached(String classname)
{
+ boolean trace = log.isTraceEnabled();
+
+ if (trace)
+ {
+ log.trace("getCached() " + classname);
+ }
+
if (classname == null)
{
+ if (trace)
+ {
+ log.trace("getCached() returning null (classname == null)");
+ }
return null;
}
if (isUnloadedClassLoader())
{
+ if (trace)
+ {
+ log.trace("getCached() returning null (unloaded)");
+ }
return null;
}
if (generatedClasses.get(classname) != null)
{
//It is a new class, and this callback is probably coming from the frozen check when creating a new nested class
+ if (trace)
+ {
+ log.trace("getCached() In generated classes - check super");
+ }
return super.getCached(classname);
}
@@ -118,6 +137,10 @@
CtClass clazz = super.getCachedLocally(classname);
if (clazz == null)
{
+ if (trace)
+ {
+ log.trace("getCached() Creating my class " + classname);
+ }
clazz = createCtClass(classname, false);
if (clazz != null)
{
@@ -126,24 +149,45 @@
}
if (clazz != null)
{
+ if (trace)
+ {
+ log.trace("getCached() Returning my class " + classname);
+ }
return clazz;
}
}
+ if (trace)
+ {
+ log.trace("getCached() Checking super for my class " + classname);
+ }
return super.getCached(classname);
}
else if (url == null)
{
+ if (trace)
+ {
+ log.trace("getCached() Checking super for my class " + classname + " (no url)");
+ }
return super.getCached(classname);
}
try
{
- ClassPool pool = getCorrectPoolForResource(classname, resourcename, url);
+ ClassPool pool = getCorrectPoolForResource(classname, resourcename, url, trace);
+ if (trace)
+ {
+ log.trace("getCached() Found pool for class " + classname + " " + pool);
+ }
if (pool != lastPool.get())
{
lastPool.set(pool);
- return pool.get(classname);
+ CtClass found = pool.get(classname);
+ if (trace)
+ {
+ log.trace("getCached() Found clazz " + classname + " in " + pool + " : " + found);
+ }
+ return found;
}
}
catch (NotFoundException e)
@@ -167,49 +211,14 @@
return false;
}
- private ClassPool getCorrectPoolForResource(String classname, String resourceName, URL url)
+ private ClassPool getCorrectPoolForResource(String classname, String resourceName, URL url, boolean trace)
{
- boolean trace = log.isTraceEnabled();
synchronized(AspectManager.getRegisteredCLs())
{
//JBoss 5 has an extra NoAnnotationURLCLassLoader that is not on the default path, make sure that that is checked at the end
//FIXME This needs revisiting/removing once the
ArrayList<ClassPool> noAnnotationURLClassLoaderPools = null;
-
-// //EXTRA DEBUG STUFF
-// if (classname.equals("org.jboss.test.aop.scopedextender.Base_A1"))
-// {
-// System.out.println("********** Looking for proper pool for Base_A1 - this pool " + this);
-// boolean found = false;
-// for(Iterator it = AspectManager.getRegisteredCLs().values().iterator() ; it.hasNext() ; )
-// {
-// AOPClassPool candidate = (AOPClassPool)it.next();
-// if (candidate.isUnloadedClassLoader())
-// {
-// System.out.println("Found something unloaded " + candidate);
-// continue;
-// }
-//
-// if (candidate.getClassLoader() instanceof BaseClassLoader)
-// {
-// BaseClassLoader bcl = (BaseClassLoader)candidate.getClassLoader();
-// URL foundUrl = bcl.getResourceLocally(resourceName);
-// if (foundUrl != null)
-// {
-// System.out.println("=============> Found in " + bcl);
-// if (url.equals(foundUrl))
-// {
-// if (!found)
-// {
-// System.out.println("^^^ The one returned ^^^");
-// found = true;
-// }
-// }
-// }
-// }
-// }
-// }
-
+
for(Iterator it = AspectManager.getRegisteredCLs().values().iterator() ; it.hasNext() ; )
{
AOPClassPool candidate = (AOPClassPool)it.next();
@@ -224,14 +233,14 @@
//Sometimes the ClassLoader is a proxy for MBeanProxyExt?!
BaseClassLoader bcl = (BaseClassLoader)candidate.getClassLoader();
URL foundUrl = bcl.getResourceLocally(resourceName);
- if (trace)
- {
- log.trace("Candidate classloader " + bcl + " has local resource " + foundUrl);
- }
if (foundUrl != null)
{
if (url.equals(foundUrl))
{
+ if (trace)
+ {
+ log.trace("getCorrectPoolForResource() Candidate classloader " + bcl + " has local resource " + foundUrl);
+ }
return candidate;
}
}
@@ -255,6 +264,10 @@
try
{
pool.get(classname);
+ if (trace)
+ {
+ log.trace("getCorrectPoolForResource(() Found " + classname + " (no url)");
+ }
return pool;
}
catch(NotFoundException ignoreTryNext)
@@ -263,10 +276,18 @@
}
}
}
-
- return AOPClassPool.createAOPClassPool(ClassPool.getDefault(), AOPClassPoolRepository.getInstance());
+ return createTempPool();
}
+ private ClassPool createTempPool()
+ {
+ //Rememeber that the stuff in jboss5/lib goes in a child classloader of the default classloader. We need
+ //to make this the parent of the temp classloader
+ ClassLoader aopLoader = AspectManager.class.getClassLoader();
+ ClassPool pool = AspectManager.instance().registerClassLoader(aopLoader);
+ return AOPClassPool.createAOPClassPool(pool, AOPClassPoolRepository.getInstance());
+ }
+
/**
* NoAnnotationURLCLassLoader lives in different packages in JBoss 4 and 5
*/
More information about the jboss-cvs-commits
mailing list