[jboss-cvs] JBossAS SVN: r91982 - in projects/aop/branches/classpool_JBAOP-742/aop/src: main/java/org/jboss/aop/classpool and 5 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Aug 4 17:31:27 EDT 2009
Author: flavia.rainone at jboss.com
Date: 2009-08-04 17:31:27 -0400 (Tue, 04 Aug 2009)
New Revision: 91982
Added:
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassLoaderScopingPolicy.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassPool.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassPoolFactory.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/ClassLoaderRepository.java
Modified:
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/AspectManager.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/ClassicWeavingStrategy.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/SuperClassesFirstWeavingStrategy.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassLoaderScopingPolicy.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolFactory.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/contrib/IDEClassPoolFactory.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/ClassicInstrumentor.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/FieldAccessTransformer.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/Instrumentor.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/InstrumentorFactory.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/MethodExecutionTransformer.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedCallerInvocations.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedConstructionInvocations.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedConstructorInvocations.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedFieldInvocations.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedInvocations.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedMethodInvocations.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPool.java
projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPoolFactory.java
projects/aop/branches/classpool_JBAOP-742/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/scenario/ScenarioRunner.java
Log:
[JBAOP-742] Created a temporary org.jboss.aop.newclasspool package. This package is intended to replace the old org.jboss.aop.classpool (and to be renamed as such).
The classes at org.jboss.aop.newclasspool extend and delegate to the jboss-classpool classes.
All classes referencing the old classpools were updated to reference the new classpools.
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/AspectManager.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/AspectManager.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/AspectManager.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -60,8 +60,6 @@
import org.jboss.aop.array.ArrayAdvisor;
import org.jboss.aop.array.ArrayBinding;
import org.jboss.aop.array.ArrayReplacement;
-import org.jboss.aop.classpool.AOPClassLoaderScopingPolicy;
-import org.jboss.aop.classpool.AOPClassPoolRepository;
import org.jboss.aop.instrument.GeneratedAdvisorInstrumentor;
import org.jboss.aop.instrument.Instrumentor;
import org.jboss.aop.instrument.InstrumentorFactory;
@@ -74,6 +72,9 @@
import org.jboss.aop.metadata.SimpleClassMetaDataLoader;
import org.jboss.aop.microcontainer.lifecycle.LifecycleCallbackBinding;
import org.jboss.aop.microcontainer.lifecycle.LifecycleManager;
+import org.jboss.aop.newclasspool.AOPClassLoaderScopingPolicy;
+import org.jboss.aop.newclasspool.AOPClassPoolFactory;
+import org.jboss.aop.newclasspool.ClassLoaderRepository;
import org.jboss.aop.pointcut.CFlowStack;
import org.jboss.aop.pointcut.DeclareDef;
import org.jboss.aop.pointcut.DynamicCFlow;
@@ -85,6 +86,7 @@
import org.jboss.aop.util.AOPLock;
import org.jboss.aop.util.UnmodifiableEmptyCollections;
import org.jboss.aop.util.logging.AOPLogger;
+import org.jboss.classpool.ClassPoolRepository;
import org.jboss.util.collection.WeakValueHashMap;
import org.jboss.util.loading.Translator;
@@ -279,7 +281,7 @@
String pruneit = System.getProperty("jboss.aop.prune", null);
if (pruneit != null)
{
- AOPClassPoolRepository.getInstance().setPrune((new Boolean(pruneit)).booleanValue());
+ ClassPoolRepository.getInstance().setPrune((new Boolean(pruneit)).booleanValue());
}
manager = new AspectManager();
//Initialise frequently used fields needed by the top-level manager
@@ -290,7 +292,11 @@
manager.includeInvisibleAnnotations = new ArrayList<String>();
- AOPClassPoolRepository.getInstance().setAspectManager(manager);
+ ClassLoaderRepository classLoaderRepository = ClassLoaderRepository.getInstance();
+ ClassPoolRepository classPoolRepository = ClassPoolRepository.getInstance();
+ classLoaderRepository.setAspectManager(manager);
+ classPoolRepository.setClassPoolRepositoryCallback(classLoaderRepository);
+ classPoolRepository.setClassPoolFactory(new AOPClassPoolFactory());
if (!verbose)
{
@@ -818,7 +824,7 @@
public static Map<ClassLoader, ClassPool> getRegisteredCLs()
{
- return AOPClassPoolRepository.getInstance().getRegisteredCLs();
+ return ClassPoolRepository.getInstance().getRegisteredCLs();
}
/**
@@ -826,7 +832,7 @@
*/
public static void clearUnregisteredClassLoaders()
{
- AOPClassPoolRepository.getInstance().clearUnregisteredClassLoaders();
+ ClassPoolRepository.getInstance().clearUnregisteredClassLoaders();
}
/**
@@ -893,17 +899,17 @@
public ClassPool registerClassLoader(ClassLoader ucl)
{
- return AOPClassPoolRepository.getInstance().registerClassLoader(ucl);
+ return ClassPoolRepository.getInstance().registerClassLoader(ucl);
}
protected void registerClass(Class<?> clazz)
{
- AOPClassPoolRepository.getInstance().registerClass(clazz);
+ ClassLoaderRepository.getInstance().registerClass(clazz);
}
public void unregisterClassLoader(ClassLoader cl)
{
- AOPClassPoolRepository.getInstance().unregisterClassLoader(cl);
+ ClassPoolRepository.getInstance().unregisterClassLoader(cl);
}
@@ -1002,22 +1008,22 @@
public static boolean getPrune()
{
- return AOPClassPoolRepository.getInstance().isPrune();
+ return ClassPoolRepository.getInstance().isPrune();
}
public static void setPrune(boolean prune)
{
- AOPClassPoolRepository.getInstance().setPrune(prune);
+ ClassPoolRepository.getInstance().setPrune(prune);
}
public static void setClassPoolFactory(ScopedClassPoolFactory factory)
{
- AOPClassPoolRepository.getInstance().setClassPoolFactory(factory);
+ ClassPoolRepository.getInstance().setClassPoolFactory(factory);
}
public static ScopedClassPoolFactory getClassPoolFactory()
{
- return AOPClassPoolRepository.getInstance().getClassPoolFactory();
+ return ClassPoolRepository.getInstance().getClassPoolFactory();
}
public boolean isNonAdvisableClassName(String classname)
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/ClassicWeavingStrategy.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/ClassicWeavingStrategy.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/ClassicWeavingStrategy.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -21,15 +21,16 @@
*/
package org.jboss.aop;
-import org.jboss.aop.classpool.AOPClassPool;
+import javassist.ByteArrayClassPath;
+import javassist.CtClass;
+import javassist.NotFoundException;
+
import org.jboss.aop.instrument.Instrumentor;
import org.jboss.aop.instrument.InstrumentorFactory;
+import org.jboss.aop.newclasspool.AOPClassPool;
import org.jboss.aop.util.logging.AOPLogger;
+import org.jboss.classpool.ClassPoolRepository;
-import javassist.ByteArrayClassPath;
-import javassist.CtClass;
-import javassist.NotFoundException;
-
/**
* Classic weaving.
*
@@ -59,7 +60,7 @@
{
return null;
}
- AOPClassPool pool = (AOPClassPool) manager.registerClassLoader(loader);
+ AOPClassPool pool = (AOPClassPool) ClassPoolRepository.getInstance().registerClassLoader(loader);
CtClass clazz = null;
try
{
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/SuperClassesFirstWeavingStrategy.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/SuperClassesFirstWeavingStrategy.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/SuperClassesFirstWeavingStrategy.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -22,16 +22,19 @@
package org.jboss.aop;
-import org.jboss.aop.classpool.AOPClassPool;
-import org.jboss.aop.instrument.Instrumentor;
-import org.jboss.aop.instrument.InstrumentorFactory;
-import org.jboss.aop.util.logging.AOPLogger;
-
import javassist.ByteArrayClassPath;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPool;
+import org.jboss.aop.instrument.Instrumentor;
+import org.jboss.aop.instrument.InstrumentorFactory;
+import org.jboss.aop.newclasspool.AOPClassPool;
+import org.jboss.aop.util.logging.AOPLogger;
+import org.jboss.classpool.AbstractClassPool;
+import org.jboss.classpool.ClassPoolRepository;
+
/**
* Generated advisors need to load all the superclasses
* before we load the actual class.
@@ -62,7 +65,7 @@
return null;
}
- AOPClassPool pool = (AOPClassPool) manager.registerClassLoader(loader);
+ AOPClassPool pool = (AOPClassPool) ClassPoolRepository.getInstance().registerClassLoader(loader);
CtClass clazz = obtainCtClassInfo(pool, className, classfileBuffer);
@@ -88,6 +91,7 @@
{
if (!(ex instanceof NotFoundException))
{
+ ex.printStackTrace();
if (verbose)
logger.error(ex);
else
@@ -101,7 +105,7 @@
}
}
- private CtClass obtainCtClassInfo(AOPClassPool pool, String className, byte[] classfileBuffer) throws NotFoundException
+ private CtClass obtainCtClassInfo(ScopedClassPool pool, String className, byte[] classfileBuffer) throws NotFoundException
{
try
{
@@ -133,15 +137,16 @@
if (superClass != null && !Instrumentor.implementsAdvised(clazz))
{
ClassPool superPool = superClass.getClassPool();
- if (superPool instanceof AOPClassPool)
+ if (superPool != null && superPool instanceof AbstractClassPool)
{
+ AOPClassPool aopSuperPool = AOPClassPool.getInstance((AbstractClassPool) superPool);
AspectManager aspectManager = manager;
if (manager instanceof Domain && superPool != pool)
{
//We are in a scoped classloader and the superclass is not
aspectManager = AspectManager.instance(superPool.getClassLoader());
}
- instrumentClass(aspectManager, (AOPClassPool)superPool, superClass, false);
+ instrumentClass(aspectManager, aopSuperPool, superClass, false);
}
}
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -28,6 +28,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
+ at Deprecated
public interface AOPCLassPoolSearchStrategy
{
CtClass getCached(String classname);
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassLoaderScopingPolicy.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassLoaderScopingPolicy.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassLoaderScopingPolicy.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -34,6 +34,7 @@
* @author <a href="adrian at jboss.com">Adrian Brock</a>
* @version $Revision: 1.1 $
*/
+ at Deprecated
public interface AOPClassLoaderScopingPolicy
{
/**
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -40,6 +40,7 @@
* @author <a href="mailto:bill at jboss.org">Bill Burke</a>
* @version $Revision$
*/
+ at Deprecated
public class AOPClassPool extends ScopedClassPool
{
protected final Logger logger = Logger.getLogger(this.getClass());
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolFactory.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolFactory.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolFactory.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -33,6 +33,7 @@
* @version $Revision$
*
**/
+ at Deprecated
public class AOPClassPoolFactory implements ScopedClassPoolFactory
{
public ScopedClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -46,6 +46,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision$
*/
+ at Deprecated
public class AOPClassPoolRepository implements ScopedClassPoolRepository
{
private static final AOPLogger logger = AOPLogger.getLogger(AOPClassPoolRepository.class);
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/contrib/IDEClassPoolFactory.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/contrib/IDEClassPoolFactory.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/contrib/IDEClassPoolFactory.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -36,7 +36,7 @@
import javassist.scopedpool.ScopedClassPoolFactory;
import javassist.scopedpool.ScopedClassPoolRepository;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.classpool.AbstractClassPool;
/**
* @author Marshall
@@ -77,7 +77,7 @@
}
}
- private class SimpleClassPool extends AOPClassPool
+ private class SimpleClassPool extends AbstractClassPool
{
private Loader loader;
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/ClassicInstrumentor.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/ClassicInstrumentor.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/ClassicInstrumentor.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -22,6 +22,7 @@
package org.jboss.aop.instrument;
import javassist.CannotCompileException;
+import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtField;
import javassist.CtMethod;
@@ -31,7 +32,6 @@
import org.jboss.aop.AspectManager;
import org.jboss.aop.ClassAdvisor;
-import org.jboss.aop.classpool.AOPClassPool;
/**
* Comment
@@ -47,7 +47,7 @@
public static final String HELPER_CLASS_NAME =
Instrumentor.AOP_PACKAGE + ".ClassAdvisor";
- public ClassicInstrumentor(AOPClassPool pool, AspectManager manager, JoinpointClassifier joinpointClassifier, DynamicTransformationObserver observer)
+ public ClassicInstrumentor(ClassPool pool, AspectManager manager, JoinpointClassifier joinpointClassifier, DynamicTransformationObserver observer)
{
super(pool,
manager,
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/FieldAccessTransformer.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/FieldAccessTransformer.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/FieldAccessTransformer.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -40,7 +40,7 @@
import org.jboss.aop.AspectManager;
import org.jboss.aop.ClassAdvisor;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.newclasspool.AOPClassPool;
import org.jboss.aop.util.Advisable;
/**
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -41,7 +41,7 @@
import org.jboss.aop.MethodByConInfo;
import org.jboss.aop.MethodByMethodInfo;
import org.jboss.aop.MethodInfo;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.newclasspool.AOPClassPool;
import org.jboss.aop.util.logging.AOPLogger;
/**
@@ -473,8 +473,11 @@
{
if (isAdvised(superclass))
{
+ System.out.println("Superclass " + superclass.getName() + " is advised: true");
return forName(superclass.getClassPool(), getAdvisorFQN(superclass));
}
+ else
+ System.out.println("Superclass " + superclass.getName() + " is advised: false");
}
catch (NotFoundException e)
{
@@ -716,7 +719,7 @@
// 3) a new child class is loaded and since the SuperClassesWeavingStrategy will attempt to
// weave not modified superclasses, the CtClass will contain the right baseclass stuff, although
// the already loaded class does not.
- if (classPool.isClassLoadedButNotWoven(supa.getName()))
+ if (((AOPClassPool) classPool).isClassLoadedButNotWoven(supa.getName()))
{
return true;
}
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/Instrumentor.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/Instrumentor.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/Instrumentor.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -54,15 +54,15 @@
import org.jboss.aop.annotation.compiler.AnnotationInfoCreator;
import org.jboss.aop.array.ArrayAdvisor;
import org.jboss.aop.array.ArrayReplacement;
-import org.jboss.aop.classpool.AOPClassPool;
-import org.jboss.aop.classpool.AOPClassPoolRepository;
import org.jboss.aop.introduction.AnnotationIntroduction;
import org.jboss.aop.introduction.InterfaceIntroduction;
+import org.jboss.aop.newclasspool.AOPClassPool;
import org.jboss.aop.util.Advisable;
import org.jboss.aop.util.CtConstructorComparator;
import org.jboss.aop.util.CtFieldComparator;
import org.jboss.aop.util.JavassistMethodHashing;
import org.jboss.aop.util.logging.AOPLogger;
+import org.jboss.classpool.ClassPoolRepository;
/**
* Transforms byte code, making a class advisable. Implements
@@ -103,7 +103,7 @@
*/
public static final String HELPER_FIELD_NAME = "aop$classAdvisor" + ClassAdvisor.NOT_TRANSFORMABLE_SUFFIX;
- protected AOPClassPool classPool;
+ protected ClassPool classPool;
protected boolean basicsSet = false;
@@ -126,7 +126,7 @@
* @param observer need be notified of every joinpoint wrapping caused only
* by pointcuts dynamicaly added.
*/
- protected Instrumentor(AOPClassPool pool,
+ protected Instrumentor(ClassPool pool,
AspectManager manager,
JoinpointClassifier joinpointClassifier,
DynamicTransformationObserver observer)
@@ -692,7 +692,7 @@
String ref = null;
try
{
- AOPClassPool pool = AOPClassPool.createAOPClassPool(clazz.getClassPool(), AOPClassPoolRepository.getInstance());
+ ClassPool pool = AOPClassPool.createAOPClassPool(clazz.getClassPool(), ClassPoolRepository.getInstance());
//Class.getRefClasses() only gets classes explicitly referenced in the class. We need to check the super classes and do some extra handling
for (ReferenceClassIterator it = new ReferenceClassIterator(clazz.getRefClasses()) ; it.hasNext() ; )
@@ -1088,7 +1088,7 @@
// registers the classes bytecodes to be hot swapped
for (CtClass clazz : classes)
{
- AOPClassPool classPool = (AOPClassPool) clazz.getClassPool();
+ ClassPool classPool = clazz.getClassPool();
clazz.defrost();
hotSwapper.registerChange(classPool.getClassLoader().loadClass(clazz.getName()),
clazz.toBytecode());
@@ -1181,7 +1181,7 @@
public void convertProcessedClasses(HotSwapper hotSwapper, CtClass clazz,
Collection<CtField> fieldReads, Collection<CtField> fieldWrites, boolean constructor)
{
- AOPClassPool classPool = (AOPClassPool) clazz.getClassPool();
+ ClassPool classPool = clazz.getClassPool();
CodeConverter codeConverter = new CodeConverter();
for (CtField field : fieldReads)
{
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/InstrumentorFactory.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/InstrumentorFactory.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/InstrumentorFactory.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -24,7 +24,7 @@
import java.lang.reflect.Constructor;
import org.jboss.aop.AspectManager;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.newclasspool.AOPClassPool;
import org.jboss.aop.util.logging.AOPLogger;
/**
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/MethodExecutionTransformer.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/MethodExecutionTransformer.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/MethodExecutionTransformer.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -38,9 +38,9 @@
import javassist.bytecode.annotation.Annotation;
import org.jboss.aop.ClassAdvisor;
-import org.jboss.aop.classpool.AOPClassPool;
import org.jboss.aop.util.Advisable;
import org.jboss.aop.util.JavassistMethodHashing;
+import org.jboss.classpool.AbstractClassPool;
/**
* Comment
@@ -166,7 +166,7 @@
for (org.jboss.aop.MethodInfo methodInfo : methodInfos)
{
Method method = methodInfo.getMethod();
- AOPClassPool classPool = (AOPClassPool) clazz.getClassPool();
+ AbstractClassPool classPool = (AbstractClassPool) clazz.getClassPool();
Class<?>[] parameterTypes = method.getParameterTypes();
CtClass[] javassistParameterTypes = new CtClass[parameterTypes.length];
for (int i = 0; i < parameterTypes.length; i++)
@@ -212,7 +212,7 @@
for (org.jboss.aop.MethodInfo methodInfo : methodInfos)
{
Method method = methodInfo.getMethod();
- AOPClassPool classPool = (AOPClassPool) clazz.getClassPool();
+ AbstractClassPool classPool = (AbstractClassPool) clazz.getClassPool();
Class<?>[] parameterTypes = method.getParameterTypes();
CtClass[] javassistParameterTypes = new CtClass[parameterTypes.length];
for (int i = 0; i < parameterTypes.length; i++)
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedCallerInvocations.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedCallerInvocations.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedCallerInvocations.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -31,7 +31,7 @@
import javassist.Modifier;
import javassist.NotFoundException;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.newclasspool.AOPClassPool;
import org.jboss.aop.util.logging.AOPLogger;
/**
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedConstructionInvocations.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedConstructionInvocations.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedConstructionInvocations.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -28,7 +28,7 @@
import javassist.CtNewConstructor;
import javassist.CtNewMethod;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.newclasspool.AOPClassPool;
/**
* Comment
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedConstructorInvocations.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedConstructorInvocations.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedConstructorInvocations.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -29,7 +29,7 @@
import javassist.CtNewMethod;
import javassist.NotFoundException;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.newclasspool.AOPClassPool;
/**
* Comment
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedFieldInvocations.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedFieldInvocations.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedFieldInvocations.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -21,7 +21,7 @@
*/
package org.jboss.aop.instrument;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.newclasspool.AOPClassPool;
import org.jboss.aop.util.JavassistToReflect;
import javassist.CannotCompileException;
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedInvocations.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedInvocations.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedInvocations.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -28,7 +28,7 @@
import javassist.CtNewConstructor;
import javassist.NotFoundException;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.newclasspool.AOPClassPool;
/**
* Comment
@@ -42,11 +42,16 @@
{
//In some cases we get a class frozen exception. I guess if the invocation class
//existed, method was unwrapped and the wrapped again
- CtClass existing = pool.getCached(className);
- if (existing != null)
+ // TODO I replaced getCached by get
+ try
{
+ CtClass existing = pool.getCtClass(className);
existing.defrost();
}
+ catch (NotFoundException e)
+ {
+ // ignore; class does not exist
+ }
}
/**
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedMethodInvocations.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedMethodInvocations.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/OptimizedMethodInvocations.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -31,7 +31,7 @@
import javassist.Modifier;
import javassist.NotFoundException;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.newclasspool.AOPClassPool;
/**
* Comment
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -40,8 +40,8 @@
import javassist.NotFoundException;
import org.jboss.aop.AspectManager;
-import org.jboss.aop.classpool.AOPClassPool;
import org.jboss.aop.standalone.Compiler;
+import org.jboss.classpool.AbstractClassPool;
/**
* A few handy methods and common things used by the other Transformers
@@ -258,27 +258,27 @@
private static void registerGeneratedClass(ClassPool pool, String name)
{
- AOPClassPool aopPool = getAOPClassPool(pool);
- if (aopPool != null)
+ AbstractClassPool classPool = getAbstractClassPool(pool);
+ if (classPool != null)
{
- aopPool.registerGeneratedClass(name);
+ classPool.registerGeneratedClass(name);
}
}
private static void unregisterGeneratedClass(ClassPool pool, String name)
{
- AOPClassPool aopPool = getAOPClassPool(pool);
- if (aopPool != null)
+ AbstractClassPool classPool = getAbstractClassPool(pool);
+ if (classPool != null)
{
- aopPool.doneGeneratingClass(name);
+ classPool.doneGeneratingClass(name);
}
}
- private static AOPClassPool getAOPClassPool(ClassPool pool)
+ private static AbstractClassPool getAbstractClassPool(ClassPool pool)
{
- if (pool instanceof AOPClassPool)
+ if (pool instanceof AbstractClassPool)
{
- return (AOPClassPool)pool;
+ return (AbstractClassPool)pool;
}
return null;
}
Added: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassLoaderScopingPolicy.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassLoaderScopingPolicy.java (rev 0)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassLoaderScopingPolicy.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -0,0 +1,55 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.aop.newclasspool;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
+
+/**
+ * AOPClassLoaderScopingPolicy.<p>
+ *
+ * This is a temporary abstraction to replace AOPScopedClassLoaderHelper
+ * until a better deployment/context resolution mechanism is used rather
+ * than using the classloader to decide things.
+ *
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public interface AOPClassLoaderScopingPolicy
+{
+ /**
+ * Get the domain for classloader
+ *
+ * @param classLoader the classloader
+ * @param parent the parent (isn't this always the top level aspect manager?)
+ * @return any scoped domain or the null if not scoped
+ */
+ Domain getDomain(ClassLoader classLoader, AspectManager parent);
+
+ /**
+ * Get the top level domain
+ *
+ * @param parent the parent (isn't this always the top level aspect manager?)
+ * @return any scoped domain or the null if not scoped
+ */
+ Domain getTopLevelDomain(AspectManager parent);
+}
Added: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassPool.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassPool.java (rev 0)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassPool.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -0,0 +1,361 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.aop.newclasspool;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.ref.WeakReference;
+import java.net.URL;
+import java.security.ProtectionDomain;
+import java.util.Iterator;
+import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javassist.CannotCompileException;
+import javassist.ClassPath;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.CtMethod;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPool;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.AbstractClassPool;
+import org.jboss.classpool.ClassPoolRepository;
+import org.jboss.logging.Logger;
+
+/**
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @version $Revision: 86930 $
+ */
+public class AOPClassPool extends AbstractClassPool
+{
+ protected final Logger logger = Logger.getLogger(this.getClass());
+
+ /** Classnames of classes that have been loaded, but were not woven */
+ protected final ConcurrentHashMap<String, Boolean> loadedButNotWovenClasses = new ConcurrentHashMap<String, Boolean>();
+
+ private static WeakHashMap<AbstractClassPool, WeakReference<AOPClassPool>> instances = new WeakHashMap<AbstractClassPool, WeakReference<AOPClassPool>>();
+
+ static
+ {
+ ClassPool.doPruning = false;
+ ClassPool.releaseUnmodifiedClassFile = false;
+ }
+
+ /*public AOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ super(cl, src, repository);
+ }
+
+ protected AOPClassPool(ClassPool src, ScopedClassPoolRepository repository)
+ {
+ super(src, repository);
+ }
+
+ public AOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, Class<? extends ClassPoolSearchStrategy> searchStrategy)
+ {
+ super(cl, src, repository, searchStrategy);
+ }
+
+ public AOPClassPool(ClassPool src, ScopedClassPoolRepository repository, Class<? extends ClassPoolSearchStrategy> searchStrategy)
+ {
+ super(src, repository, searchStrategy);
+ }*/
+
+ private ScopedClassPool delegate;
+
+ public AOPClassPool(AbstractClassPool delegate)
+ {
+ super(ClassPool.getDefault(), null);
+ this.delegate = delegate;
+ instances.put(delegate, new WeakReference<AOPClassPool>(this));
+ }
+
+ public void setClassLoadedButNotWoven(String classname)
+ {
+ loadedButNotWovenClasses.put(classname, Boolean.TRUE);
+ }
+
+ public boolean isClassLoadedButNotWoven(String classname)
+ {
+ return loadedButNotWovenClasses.get(classname) == Boolean.TRUE;
+ }
+
+ /*public static AOPClassPool createAOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ return (AOPClassPool)AspectManager.getClassPoolFactory().create(cl, src, repository);
+ }*/
+
+
+ // TODO fix this: the method should be in ScopedClassPoolRepository
+ public static ClassPool createAOPClassPool(ClassPool src, ScopedClassPoolRepository repository)
+ {
+ return ClassPoolRepository.getInstance().getClassPoolFactory().create(src, repository);
+ }
+
+ public static AOPClassPool getInstance(AbstractClassPool delegate)
+ {
+ if (instances.containsKey(delegate))
+ {
+ AOPClassPool classPool = instances.get(delegate).get();
+ if (classPool != null)
+ {
+ return classPool;
+ }
+ instances.remove(delegate);
+ }
+ return null;
+ }
+
+ @Override
+ public void importPackage(String packageName)
+ {
+ delegate.importPackage(packageName);
+ }
+
+ @Override
+ public void clearImportedPackages()
+ {
+ if (delegate == null)
+ {
+ return;
+ }
+ delegate.clearImportedPackages();
+ }
+
+ @Override
+ public Iterator<?> getImportedPackages()
+ {
+ return delegate.getImportedPackages();
+ }
+
+ @Override
+ public void recordInvalidClassName(String name)
+ {
+ delegate.recordInvalidClassName(name);
+ }
+
+ @Override
+ public Object[] lookupCflow(String name)
+ {
+ return delegate.lookupCflow(name);
+ }
+
+ @Override
+ public CtClass getAndRename(String orgName, String newName) throws NotFoundException
+ {
+ return delegate.getAndRename(orgName, newName);
+ }
+
+ @Override
+ public CtClass get(String classname) throws NotFoundException
+ {
+ return delegate.get(classname);
+ }
+
+ @Override
+ public CtClass getCtClass(String classname) throws NotFoundException
+ {
+ return delegate.getCtClass(classname);
+ }
+
+ /*@Override
+ protected synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
+ {
+ return delegate.get0(classname, useCache);
+ }
+
+ @Override
+ protected CtClass createCtClass(String classname, boolean useCache)
+ {
+ return delegate.createCtClass(classname, useCache);
+ }*/
+
+ @Override
+ public URL find(String classname)
+ {
+ return delegate.find(classname);
+ }
+
+ @Override
+ public CtClass[] get(String[] classnames) throws NotFoundException
+ {
+ return delegate.get(classnames);
+ }
+
+ @Override
+ public CtMethod getMethod(String classname, String methodname) throws NotFoundException
+ {
+ return delegate.getMethod(classname, methodname);
+ }
+
+ @Override
+ public CtClass makeClass(InputStream classfile) throws IOException, RuntimeException
+ {
+ return delegate.makeClass(classfile);
+ }
+
+ @Override
+ public CtClass makeClass(InputStream classfile, boolean ifNotFrozen) throws IOException, RuntimeException
+ {
+ return delegate.makeClass(classfile, ifNotFrozen);
+ }
+
+ @Override
+ public CtClass makeClassIfNew(InputStream classfile) throws IOException, RuntimeException
+ {
+ return delegate.makeClassIfNew(classfile);
+ }
+
+ @Override
+ public CtClass makeClass(String classname) throws RuntimeException
+ {
+ return delegate.makeClass(classname);
+ }
+
+ @Override
+ public synchronized CtClass makeClass(String classname, CtClass superclass) throws RuntimeException
+ {
+ return delegate.makeClass(classname, superclass);
+ }
+
+ @Override
+ public CtClass makeInterface(String name) throws RuntimeException
+ {
+ return delegate.makeInterface(name);
+ }
+
+ @Override
+ public synchronized CtClass makeInterface(String name, CtClass superclass) throws RuntimeException
+ {
+ return delegate.makeInterface(name, superclass);
+ }
+
+ @Override
+ public ClassPath appendSystemPath()
+ {
+ return delegate.appendSystemPath();
+ }
+
+ @Override
+ public ClassPath insertClassPath(ClassPath cp)
+ {
+ return delegate.insertClassPath(cp);
+ }
+
+ @Override
+ public ClassPath appendClassPath(ClassPath cp) {
+ return delegate.appendClassPath(cp);
+ }
+
+ @Override
+ public ClassPath insertClassPath(String pathname) throws NotFoundException
+ {
+ return delegate.insertClassPath(pathname);
+ }
+
+ @Override
+ public ClassPath appendClassPath(String pathname) throws NotFoundException
+ {
+ return delegate.appendClassPath(pathname);
+ }
+
+ @Override
+ public void removeClassPath(ClassPath cp)
+ {
+ delegate.removeClassPath(cp);
+ }
+
+ @Override
+ public void appendPathList(String pathlist) throws NotFoundException
+ {
+ delegate.appendPathList(pathlist);
+ }
+
+ @Override
+ public Class<?> toClass(CtClass clazz) throws CannotCompileException
+ {
+ return delegate.toClass(clazz);
+ }
+
+ @Override
+ public ClassLoader getClassLoader()
+ {
+ return delegate.getClassLoader();
+ }
+
+ @Override
+ @Deprecated
+ public Class<?> toClass(CtClass ct, ClassLoader loader) throws CannotCompileException
+ {
+ return delegate.toClass(ct, loader);
+ }
+
+ @Override
+ public Class<?> toClass(CtClass ct, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
+ {
+ return delegate.toClass(ct, loader, domain);
+ }
+
+ @Override
+ public void close()
+ {
+ delegate.close();
+ }
+
+ @Override
+ public synchronized void flushClass(String classname)
+ {
+ delegate.flushClass(classname);
+ }
+
+ @Override
+ public synchronized void soften(CtClass clazz)
+ {
+ delegate.soften(clazz);
+ }
+
+ @Override
+ public boolean isUnloadedClassLoader()
+ {
+ return delegate.isUnloadedClassLoader();
+ }
+
+ @Override
+ public void lockInCache(CtClass c)
+ {
+ delegate.lockInCache(c);
+ }
+
+ @Override
+ public synchronized CtClass getLocally(String classname) throws NotFoundException
+ {
+ return delegate.getLocally(classname);
+ }
+
+ /*@Override
+ public CtClass getCached(String classname)
+ {
+ return delegate.getCached(classname);
+ }*/
+}
Added: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassPoolFactory.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassPoolFactory.java (rev 0)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/AOPClassPoolFactory.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -0,0 +1,67 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.aop.newclasspool;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.AbstractClassPool;
+import org.jboss.classpool.AbstractClassPoolFactory;
+import org.jboss.classpool.AbstractClassPoolFactoryImpl;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @version $Revision: 55872 $
+ *
+ **/
+public class AOPClassPoolFactory implements ScopedClassPoolFactory
+{
+ private static AbstractClassPoolFactory delegateClassPoolFactory = new AbstractClassPoolFactoryImpl();
+
+ public static void setDelegateClassPoolFactory (AbstractClassPoolFactory factory)
+ {
+ delegateClassPoolFactory = factory;
+ }
+
+ public AOPClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ if (delegateClassPoolFactory == null)
+ {
+ throw new IllegalStateException("AOPClassPoolFactory can be used only after delegateClassPoolFactory is defined");
+ }
+ AbstractClassPool delegate = delegateClassPoolFactory.create(cl, src, repository);
+ return new AOPClassPool(delegate);
+ }
+
+ public AOPClassPool create(ClassPool src, ScopedClassPoolRepository repository)
+ {
+ if (delegateClassPoolFactory == null)
+ {
+ throw new IllegalStateException("AOPClassPoolFactory can be used only after delegateClassPoolFactory is defined");
+ }
+ AbstractClassPool delegate = delegateClassPoolFactory.create(src, repository);
+ return new AOPClassPool(delegate);
+ }
+}
Added: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/ClassLoaderRepository.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/ClassLoaderRepository.java (rev 0)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/newclasspool/ClassLoaderRepository.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -0,0 +1,262 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.aop.newclasspool;
+
+import java.lang.reflect.Field;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.util.HashMap;
+import java.util.HashSet;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.advice.SecurityActions;
+import org.jboss.aop.instrument.Instrumentor;
+import org.jboss.aop.util.logging.AOPLogger;
+import org.jboss.classpool.ClassPoolRepositoryCallback;
+
+/**
+ * Singleton classpool repository used by aop
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision: 87799 $
+ */
+public class ClassLoaderRepository implements ClassPoolRepositoryCallback
+{
+ private static final AOPLogger logger = AOPLogger.getLogger(ClassLoaderRepository.class);
+
+ private final static ClassLoaderRepository instance = new ClassLoaderRepository();
+
+ /** The classes per classppol */
+ protected final HashMap<ClassLoader, HashSet<Class<?>>> ucl2classes = new HashMap<ClassLoader, HashSet<Class<?>>>();
+
+ /** The top-level AspectManager this pool belongs to */
+ AspectManager manager;
+
+ public static ClassLoaderRepository getInstance()
+ {
+ return instance;
+ }
+
+ private ClassLoaderRepository()
+ {
+ //This was needed when jboss-aop.jar was deployed in the jboss/lib directory since the AspectManager bean had no chance to initialise it
+ //delegate.setClassPoolFactory(new AOPClassPoolFactory());
+// if (!setJBossSpecificStartupVariables())
+// {
+// delegate.setClassPoolFactory(new AOPClassPoolFactory());
+// }
+ }
+
+// private boolean setJBossSpecificStartupVariables()
+// {
+// //We are running within JBoss 5, let's default to the JBossClassPoolFactory and set the ScopedClassPoolHelper
+// //so that we get correct behaviour before the AspectManager service has been deployed
+// try
+// {
+// Class jbcpf = Class.forName("org.jboss.aop.deployment.JBossClassPoolFactory");
+// ScopedClassPoolFactory factory = (ScopedClassPoolFactory)jbcpf.newInstance();
+//
+// Class hlpr = Class.forName("org.jboss.aop.deployment.JBossScopedClassLoaderHelper");
+// AOPScopedClassLoaderHelper helper = (AOPScopedClassLoaderHelper)hlpr.newInstance();
+// delegate.setClassPoolFactory(factory);
+// AspectManager.scopedCLHelper = helper;
+// return true;
+// }
+// catch (Exception e)
+// {
+// }
+// return false;//Not running in JBoss probably
+// }
+
+ /*public void setClassPoolFactory(ScopedClassPoolFactory factory)
+ {
+ delegate.setClassPoolFactory(factory);
+ }
+
+ public ScopedClassPoolFactory getClassPoolFactory()
+ {
+ return delegate.getClassPoolFactory();
+ }
+
+ public boolean isPrune()
+ {
+ return delegate.isPrune();
+ }
+
+ public void setPrune(boolean prune)
+ {
+ delegate.setPrune(prune);
+ }
+
+ public ScopedClassPool createScopedClassPool(ClassLoader cl, ClassPool src)
+ {
+ return delegate.createScopedClassPool(cl, src);
+ }
+
+ public ClassPool findClassPool(ClassLoader cl)
+ {
+ return delegate.findClassPool(cl);
+ }*/
+
+ public void setAspectManager(AspectManager manager)
+ {
+ this.manager = manager;
+ }
+
+ /**
+ * Get the registered classloaders
+ *
+ * @return the registered classloaders
+ */
+ /*public Map<ClassLoader, ClassPool> getRegisteredCLs()
+ {
+ return delegate.getRegisteredCLs();
+ }
+
+ /**
+ * This method will check to see if a register classloader has been undeployed (as in JBoss)
+ *
+ public void clearUnregisteredClassLoaders()
+ {
+ delegate.clearUnregisteredClassLoaders();
+ }
+
+ public ClassPool registerClassLoader(ClassLoader ucl)
+ {
+ return delegate.registerClassLoader(ucl);
+ }
+
+ public void unregisterClassLoader(ClassLoader cl)
+ {
+ delegate.unregisterClassLoader(cl);
+ }*/
+
+ public void registerClass(Class<?> clazz)
+ {
+ ClassLoader classLoader = SecurityActions.getClassLoader(clazz);
+ HashSet<Class<?>> classes = ucl2classes.get(classLoader);
+ if (classes == null)
+ {
+ classes = new HashSet<Class<?>>();
+ ucl2classes.put(classLoader, classes);
+ }
+ classes.add(clazz);
+ }
+
+ public void classLoaderUnregistered(ClassLoader classLoader)
+ {
+ if (System.getSecurityManager() == null)
+ {
+ UnregisterClassLoaderAction.NON_PRIVILEGED.unregister(this, classLoader);
+ }
+ else
+ {
+ UnregisterClassLoaderAction.PRIVILEGED.unregister(this, classLoader);
+ }
+ }
+
+ private void doUnregisterClassLoader(ClassLoader cl)
+ {
+ synchronized (this)
+ {
+ HashSet<Class<?>> classes = ucl2classes.remove(cl);
+ if (classes != null)
+ {
+ for (Class<?> clazz : classes)
+ {
+ manager.cleanAdvisor(clazz);
+ Class<?> advisedClass = clazz;
+ try
+ {
+ //The static advisor field should be the only remaining hard reference to the advisor
+ Field f = advisedClass.getDeclaredField(Instrumentor.HELPER_FIELD_NAME);
+ f.setAccessible(true);
+ f.set(null, null);
+ }
+ catch(NoSuchFieldException e)
+ {
+ logger.warn("Error unsetting advisor for " + advisedClass.getName() + " " + e);
+ }
+ catch(IllegalAccessException e)
+ {
+ logger.warn("Error unsetting advisor for " + advisedClass.getName() + " " + e);
+ }
+ catch(NoClassDefFoundError e)
+ {
+ logger.warn("Error unsetting advisor for " + advisedClass.getName() + " " + e);
+ }
+ }
+ }
+ manager.cleanProxyAdvisorDomains(cl);
+ }
+ }
+
+
+ interface UnregisterClassLoaderAction
+ {
+ void unregister(ClassLoaderRepository repository, ClassLoader loader);
+
+ UnregisterClassLoaderAction PRIVILEGED = new UnregisterClassLoaderAction()
+ {
+ public void unregister(final ClassLoaderRepository repository, final ClassLoader loader)
+ {
+ try
+ {
+ AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
+ {
+ public Object run()
+ {
+ repository.doUnregisterClassLoader(loader);
+ return null;
+ }
+ });
+ }
+ catch (PrivilegedActionException e)
+ {
+ Exception ex = e.getException();
+ if (ex instanceof RuntimeException)
+ {
+ throw (RuntimeException)ex;
+ }
+ throw new RuntimeException(ex);
+ }
+ }
+ };
+
+ UnregisterClassLoaderAction NON_PRIVILEGED = new UnregisterClassLoaderAction()
+ {
+ public void unregister(ClassLoaderRepository repository, ClassLoader loader)
+ {
+ repository.doUnregisterClassLoader(loader);
+ }
+ };
+ }
+
+
+ public void classLoaderRegistered(ClassLoader classLoader)
+ {
+ // TODO Auto-generated method stub
+
+ }
+}
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPool.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPool.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPool.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -27,7 +27,7 @@
import javassist.NotFoundException;
import javassist.scopedpool.ScopedClassPoolRepository;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.classpool.AbstractClassPool;
/**
* Comment
@@ -36,7 +36,7 @@
* @version $Revision: 46253 $
* @deprecated Will be removed when Javassist is upgraded past 3.0 beta2
*/
-public class StandaloneClassPool extends AOPClassPool
+public class StandaloneClassPool extends AbstractClassPool
{
public StandaloneClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
{
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPoolFactory.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPoolFactory.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPoolFactory.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -21,26 +21,25 @@
*/
package org.jboss.aop.standalone;
-import org.jboss.aop.classpool.AOPClassPoolFactory;
-
import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPool;
import javassist.scopedpool.ScopedClassPoolRepository;
+import org.jboss.classpool.AbstractClassPoolFactory;
+
/**
* Comment
*
* @author <a href="mailto:bill at jboss.org">Bill Burke</a>
* @version $Revision: 46253 $
*/
-public class StandaloneClassPoolFactory extends AOPClassPoolFactory
+public class StandaloneClassPoolFactory implements AbstractClassPoolFactory
{
- public ScopedClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ public StandaloneClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
{
return new StandaloneClassPool(cl, src, repository);
}
- public ScopedClassPool create(ClassPool src, ScopedClassPoolRepository repository)
+ public StandaloneClassPool create(ClassPool src, ScopedClassPoolRepository repository)
{
return new StandaloneClassPool(src, repository);
}
Modified: projects/aop/branches/classpool_JBAOP-742/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/scenario/ScenarioRunner.java
===================================================================
--- projects/aop/branches/classpool_JBAOP-742/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/scenario/ScenarioRunner.java 2009-08-04 21:27:09 UTC (rev 91981)
+++ projects/aop/branches/classpool_JBAOP-742/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/scenario/ScenarioRunner.java 2009-08-04 21:31:27 UTC (rev 91982)
@@ -34,7 +34,7 @@
import org.jboss.aop.AspectManager;
import org.jboss.aop.ClassAdvisor;
import org.jboss.aop.advice.AdviceBinding;
-import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.newclasspool.AOPClassPool;
import org.jboss.aop.pointcut.ast.ParseException;
import org.jboss.test.aop.jdk15.dynamic.common.BindingInterceptor;
import org.jboss.test.aop.jdk15.dynamic.common.InstanceInterceptor;
More information about the jboss-cvs-commits
mailing list