[jboss-cvs] JBossAS SVN: r74555 - in projects/aop/trunk/aop/src/main/org/jboss/aop: pointcut and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jun 13 21:09:12 EDT 2008
Author: flavia.rainone at jboss.com
Date: 2008-06-13 21:09:12 -0400 (Fri, 13 Jun 2008)
New Revision: 74555
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/Advisor.java
projects/aop/trunk/aop/src/main/org/jboss/aop/AdvisorFactory.java
projects/aop/trunk/aop/src/main/org/jboss/aop/ClassicWeavingStrategy.java
projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/Util.java
Log:
[JBAOP-597] Bug fixed. Util now uses Advisor.getClassLoader() instead of the context class loader. For that,
the field loader and the methods Advisor.get/setClassLoader were added. Correct initialization
of this field is done by AdvisorFactory. ClassWeavingStrategy started using AdvisorFactory
instead of the constructor of Advisor.
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/Advisor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/Advisor.java 2008-06-14 01:00:57 UTC (rev 74554)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/Advisor.java 2008-06-14 01:09:12 UTC (rev 74555)
@@ -1315,6 +1315,59 @@
}
/**
+ * Defines the class loader associated with the advised context.
+ *
+ * @param loader the class loader that loaded all joinpoints contained in the
+ * advised context.
+ * @throws IllegalStateException when there is already a class associated with
+ * this advisor ({@link #getClazz()}), and {@link loader} is non-null and
+ * different from the class loader that loaded the advised class.
+ */
+ void setClassLoader(ClassLoader loader) throws IllegalStateException
+ {
+ if (this.clazz != null && loader != null &&
+ loader != this.clazz.getClassLoader())
+ {
+ throw new IllegalStateException("Cannot have both loader and class");
+ }
+ if (loader == null)
+ {
+ this.loader = null;
+ }
+ else
+ {
+ this.loader = new WeakReference<ClassLoader>(loader);
+ }
+ }
+
+ /**
+ * Returns the class loader associated with this advisor.
+ *
+ * @return the class loader that loaded all joinpoints contained in the advised
+ * context.
+ */
+ public ClassLoader getClassLoader()
+ {
+ if (this.loader != null)
+ {
+ ClassLoader cl = loader.get();
+ if (cl != null)
+ {
+ return cl;
+ }
+ }
+ if (clazz != null)
+ {
+ ClassLoader cl = SecurityActions.getClassLoader(clazz);
+ if (cl != null)
+ {
+ return cl;
+ }
+ }
+ return null;
+ }
+
+ /**
* @deprecated Use Class.getSimpleName() instead
*/
public static String getSimpleName(Class<?> clazz)
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/AdvisorFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/AdvisorFactory.java 2008-06-14 01:00:57 UTC (rev 74554)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/AdvisorFactory.java 2008-06-14 01:09:12 UTC (rev 74555)
@@ -97,12 +97,16 @@
public static ClassAdvisor getClassAdvisor(Class<?> clazz, AspectManager am)
{
- return getClassAdvisor(clazz.getName(), am, clazz);
+ ClassAdvisor classAdvisor = getClassAdvisor(clazz.getName(), am, clazz);
+ classAdvisor.setClazz(clazz);
+ return classAdvisor;
}
public static ClassAdvisor getClassAdvisor(CtClass clazz, AspectManager am)
{
- return getClassAdvisor(clazz.getName(), am, null);
+ ClassAdvisor classAdvisor = getClassAdvisor(clazz.getName(), am, null);
+ classAdvisor.setClassLoader(clazz.getClassPool().getClassLoader());
+ return classAdvisor;
}
private static ClassAdvisor getClassAdvisor(String className, AspectManager am, Class<?> loadedClass)
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/ClassicWeavingStrategy.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/ClassicWeavingStrategy.java 2008-06-14 01:00:57 UTC (rev 74554)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/ClassicWeavingStrategy.java 2008-06-14 01:09:12 UTC (rev 74555)
@@ -92,7 +92,7 @@
clazz.defrost();
}
- ClassAdvisor advisor = new ClassAdvisor(className, manager);
+ ClassAdvisor advisor = AdvisorFactory.getClassAdvisor(clazz, manager);
Instrumentor instrumentor = InstrumentorFactory.getInstrumentor(
pool,
manager,
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/Util.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/Util.java 2008-06-14 01:00:57 UTC (rev 74554)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/Util.java 2008-06-14 01:09:12 UTC (rev 74555)
@@ -361,8 +361,7 @@
{
if (advisor != null)
{
- // FIXME ClassLoader - why should the class be visible from the context classloader?
- ClassLoader cl = SecurityActions.getContextClassLoader();
+ ClassLoader cl = advisor.getClassLoader();
ArrayList<InterfaceIntroduction> intros = advisor.getInterfaceIntroductions();
if (intros.size() > 0)
{
More information about the jboss-cvs-commits
mailing list