[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