[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