[jboss-cvs] JBossAS SVN: r79029 - in projects/aop/trunk: aop/src/main/org/jboss/aop/instrument and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Oct 2 10:42:58 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-10-02 10:42:57 -0400 (Thu, 02 Oct 2008)
New Revision: 79029

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/Domain.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/domain/ScopedClassLoaderDomain.java
Log:
[JBAOP-658] Index InterceptionMarkers by classloader

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java	2008-10-02 13:32:34 UTC (rev 79028)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java	2008-10-02 14:42:57 UTC (rev 79029)
@@ -25,6 +25,8 @@
 import java.io.FileOutputStream;
 import java.lang.ref.WeakReference;
 import java.lang.reflect.Field;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.security.ProtectionDomain;
@@ -180,7 +182,8 @@
    private static AOPClassLoaderScopingPolicy classLoaderScopingPolicy;
 
    //Keeps track of if we need to convert references etc for a given class. Domains for scoped classloaders will have their own version of this
-   protected static InterceptionMarkers interceptionMarkers = new InterceptionMarkers();
+   protected static Map<ClassLoader, InterceptionMarkers> interceptionMarkers = new WeakHashMap<ClassLoader, InterceptionMarkers>();
+   private final static ClassLoader NULL_CLASSLOADER = new URLClassLoader(new URL[0]);
    
    // Static -------------------------------------------------------
 
@@ -380,9 +383,22 @@
       AspectManager.classLoaderScopingPolicy = classLoaderScopingPolicy;
    }
 
-   public InterceptionMarkers getInterceptionMarkers()
+   public InterceptionMarkers getInterceptionMarkers(ClassLoader loader)
    {
-      return interceptionMarkers;
+      if (loader == null)
+      {
+         loader = NULL_CLASSLOADER;
+      }
+      synchronized(interceptionMarkers)
+      {
+         InterceptionMarkers markers = interceptionMarkers.get(loader);
+         if (markers == null)
+         {
+            markers = new InterceptionMarkers();
+            interceptionMarkers.put(loader, markers);
+         }
+         return markers;
+      }
    }
 
    public LinkedHashMap<String, Pointcut> getPointcuts()

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/Domain.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/Domain.java	2008-10-02 13:32:34 UTC (rev 79028)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/Domain.java	2008-10-02 14:42:57 UTC (rev 79029)
@@ -992,9 +992,9 @@
    //Methods that should delegate to the top AspectManager
 
    @Override
-   public InterceptionMarkers getInterceptionMarkers()
+   public InterceptionMarkers getInterceptionMarkers(ClassLoader loader)
    {
-      return parent.getInterceptionMarkers();
+      return parent.getInterceptionMarkers(loader);
    }
 
    /** Managed by the top-level aspect manager */

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java	2008-10-02 13:32:34 UTC (rev 79028)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java	2008-10-02 14:42:57 UTC (rev 79029)
@@ -113,13 +113,14 @@
          }
       }
       
+      final ClassLoader cl = clazz.getClassPool().getClassLoader();
       if (skipFieldInterception)
       {
-         advisor.getManager().getInterceptionMarkers().skipFieldAccess(clazz.getName());
+         advisor.getManager().getInterceptionMarkers(cl).skipFieldAccess(clazz.getName());
       }
       else
       {
-         advisor.getManager().getInterceptionMarkers().addFieldInterceptionMarker(clazz.getName());
+         advisor.getManager().getInterceptionMarkers(cl).addFieldInterceptionMarker(clazz.getName());
       }
          
    }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java	2008-10-02 13:32:34 UTC (rev 79028)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/Instrumentor.java	2008-10-02 14:42:57 UTC (rev 79029)
@@ -645,7 +645,7 @@
          for (ReferenceClassIterator it = new ReferenceClassIterator(clazz.getRefClasses()) ; it.hasNext() ; )
          {
             ref = it.next();
-            if (!manager.getInterceptionMarkers().convertReference(ref)
+            if (!manager.getInterceptionMarkers(clazz.getClassPool().getClassLoader()).convertReference(ref)
                 || manager.isNonAdvisableClassName(ref)
                 || ref.startsWith("java.")
                 || ref.startsWith("javax.")
@@ -686,35 +686,43 @@
             it.addSuperClass(ctRef);
             //converted = false;
             
-            if (!manager.getInterceptionMarkers().shouldSkipFieldAccess(ref) && !ref.equals(clazz.getName()))
+            final ClassLoader refCl = ctRef.getClassPool().getClassLoader();
+
+            //DELETE
+            if (clazz.getName().contains("SecurityTester") && ref.contains("SecuredPOJO"))
             {
+               System.out.println("=================> " + manager.getInterceptionMarkers(refCl).shouldSkipFieldAccess(ref));
+            }
+            
+            if (!manager.getInterceptionMarkers(refCl).shouldSkipFieldAccess(ref) && !ref.equals(clazz.getName()))
+            {
                List<CtField> fields = getAdvisableFields(ctRef);
                if (fieldAccessTransformer.replaceFieldAccess(fields, ctRef, advisor))
                {
-                  manager.getInterceptionMarkers().addFieldInterceptionMarker(ref);
+                  manager.getInterceptionMarkers(refCl).addFieldInterceptionMarker(ref);
                   converted = true;
                }
                else
                {
-                  manager.getInterceptionMarkers().skipFieldAccess(ref);
+                  manager.getInterceptionMarkers(refCl).skipFieldAccess(ref);
                }
             }
-            if (!manager.getInterceptionMarkers().shouldSkipConstruction(ref))
+            if (!manager.getInterceptionMarkers(refCl).shouldSkipConstruction(ref))
             {
                if (constructorExecutionTransformer.replaceConstructorAccess(advisor, ctRef))
                {
-                  manager.getInterceptionMarkers().addConstructionInterceptionMarker(ref);
+                  manager.getInterceptionMarkers(refCl).addConstructionInterceptionMarker(ref);
                   converted = true;
                }
                else
                {
-                  manager.getInterceptionMarkers().skipConstruction(ref);
+                  manager.getInterceptionMarkers(refCl).skipConstruction(ref);
                }
             }
 
             if (!converted)
             {
-               manager.getInterceptionMarkers().skipReference(ref);
+               manager.getInterceptionMarkers(refCl).skipReference(ref);
             }
             ref = null;
          }
@@ -764,13 +772,15 @@
          boolean constructionTransformation = constructionTransformer.insertConstructionInterception(clazz, advisor);
          constructorAccessConverted = constructorExecutionTransformer.transform(clazz, advisor);
          String classname = clazz.getName();
+
+         final ClassLoader cl = clazz.getClassPool().getClassLoader();
          if (constructorAccessConverted)
          {
-            manager.getInterceptionMarkers().addConstructionInterceptionMarker(classname);
+            manager.getInterceptionMarkers(cl).addConstructionInterceptionMarker(classname);
          }
          else
          {
-            manager.getInterceptionMarkers().skipConstruction(classname);
+            manager.getInterceptionMarkers(cl).skipConstruction(classname);
          }
          converted = converted || constructorAccessConverted;
 
@@ -798,9 +808,9 @@
          }
          else
          {
-            if (manager.getInterceptionMarkers().shouldSkipFieldAccess(classname))
+            if (manager.getInterceptionMarkers(cl).shouldSkipFieldAccess(classname))
             {
-               manager.getInterceptionMarkers().skipReference(classname);
+               manager.getInterceptionMarkers(cl).skipReference(classname);
             }
          }
 

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/domain/ScopedClassLoaderDomain.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/domain/ScopedClassLoaderDomain.java	2008-10-02 13:32:34 UTC (rev 79028)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/domain/ScopedClassLoaderDomain.java	2008-10-02 14:42:57 UTC (rev 79029)
@@ -89,11 +89,12 @@
       return getPerVMAspect(def.getName());
    }
 
-   @Override
-   public InterceptionMarkers getInterceptionMarkers()
-   {
-      return interceptionMarkers;
-   }
+// These are indexed by classloader now, so no need to manage them explicitly here
+//   @Override
+//   public InterceptionMarkers getInterceptionMarkers(ClassLoader loader)
+//   {
+//      return interceptionMarkers;
+//   }
 
    @Override
    public Object getPerVMAspect(String def)




More information about the jboss-cvs-commits mailing list