[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