[jboss-cvs] JBossAS SVN: r84564 - in projects/aop/branches/createspi: aop/src/main/java/org/jboss/aop/classpool and 20 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Feb 20 13:21:08 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-02-20 13:21:08 -0500 (Fri, 20 Feb 2009)
New Revision: 84564

Added:
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultClassPoolRegistry.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/SecurityActions.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ClassPoolRegistry.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ClassPoolRegistryAware.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ConfigurationAware.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/WeaverAware.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/temp/
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/temp/Internal.java
Modified:
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectManager.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassAdvisor.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassInstanceAdvisor.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassicWeavingStrategy.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Domain.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/GeneratedInstanceAdvisorMixin.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/HotSwapStrategy.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/InterceptionMarkers.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/SuperClassesFirstWeavingStrategy.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/eclipsesupport/Agent.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/eclipsesupport/EclipseTestTransformer.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/Instrumentor.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultAOPSystem.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultConfiguration.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultManager.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultWeaver.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/ProxyFactory.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/container/ContainerProxyFactory.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/reflectprototype/AopClassPoolFactory.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/AOPSystem.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/AbstractAOPSystem.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/Configuration.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/Weaver.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/AOPTransformer.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/Agent.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/Compiler.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/util/ReflectToJavassist.java
   projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/ScenarioLoader.java
   projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/scenario/ScenarioRunner.java
   projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/unit/spi/AOPSystemUnitTestCase.java
   projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/unit/spi/ConfigurationUnitTestCase.java
   projects/aop/branches/createspi/asintegration-core/src/main/java/org/jboss/aop/asintegration/core/AspectManagerServiceDelegate.java
   projects/aop/branches/createspi/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/ScopedJBossClassPool.java
   projects/aop/branches/createspi/asintegration-jmx/src/main/java/org/jboss/aop/deployment/AspectDeployer.java
   projects/aop/branches/createspi/asintegration-jmx/src/test/java/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java
   projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/AOPClassLoaderInitializer.java
   projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/DefaultTranslator.java
   projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5ClassPoolFactory.java
   projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5Integration.java
   projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java
   projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/VFSClassLoaderScopingPolicy.java
   projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
   projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java
   projects/aop/branches/createspi/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithReplaceReferencesTestCase.java
   projects/aop/branches/createspi/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
Log:
Add ClassPoolRegistry to AOPSystem. Deprecate more methods in AspectManager. Make sure that client code does not call the deprecated methods in AspectManager, but use AOPSystem instead

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectManager.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectManager.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectManager.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -145,7 +145,6 @@
    protected volatile HashMap<String,ClassMetaDataLoader> classMetaDataLoaders = UnmodifiableEmptyCollections.EMPTY_HASHMAP;
    protected volatile HashMap<String, AdviceStack> interceptorStacks = UnmodifiableEmptyCollections.EMPTY_HASHMAP;
    protected volatile HashMap<String, DeclareDef> declares = UnmodifiableEmptyCollections.EMPTY_HASHMAP;
-   //protected volatile ConcurrentHashMap<String, CFlowStack> cflowStacks = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
    protected volatile ConcurrentHashMap<String, DynamicCFlowDefinition> dynamicCFlows = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
    protected volatile ConcurrentHashMap<String, AspectDefinition> aspectDefinitions = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
    protected volatile ConcurrentHashMap<String, Object> perVMAspects = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
@@ -156,7 +155,6 @@
    protected volatile HashMap<String, DomainDefinition> containers = UnmodifiableEmptyCollections.EMPTY_HASHMAP;
    protected volatile LinkedHashMap<String, PrecedenceDef> precedenceDefs = UnmodifiableEmptyCollections.EMPTY_LINKED_HASHMAP;
    protected PrecedenceDefEntry[] sortedPrecedenceDefEntries;
-   protected WeavingStrategy weavingStrategy;
 
    //Keeps track of if we need to convert references etc for a given class. Domains for scoped classloaders will have their own version of this
    protected static Map<ClassLoader, InterceptionMarkers> interceptionMarkers = new WeakHashMap<ClassLoader, InterceptionMarkers>();
@@ -176,14 +174,14 @@
     */
    public static synchronized AspectManager getTopLevelAspectManager()
    {
-      if (AOPSystem.getConfiguration().getClassLoaderScopingPolicy() == null)
+      if (AOPSystem.getClassPoolRegistry().getClassLoaderScopingPolicy() == null)
       {
          //We are not running in jboss
          return instance();
       }
 
       AspectManager result = initManager();
-      Domain scopedDomain = AOPSystem.getConfiguration().getClassLoaderScopingPolicy().getTopLevelDomain(result);
+      Domain scopedDomain = AOPSystem.getClassPoolRegistry().getClassLoaderScopingPolicy().getTopLevelDomain(result);
       if (scopedDomain != null)
          result = scopedDomain;
       return result;
@@ -203,9 +201,9 @@
    public static synchronized AspectManager instance(ClassLoader loadingClassLoader)
    {
       AspectManager result = initManager();
-      if (AOPSystem.getConfiguration().getClassLoaderScopingPolicy() != null)
+      if (AOPSystem.getClassPoolRegistry().getClassLoaderScopingPolicy() != null)
       {
-         Domain scopedDomain = AOPSystem.getConfiguration().getClassLoaderScopingPolicy().getDomain(loadingClassLoader, result);
+         Domain scopedDomain = AOPSystem.getClassPoolRegistry().getClassLoaderScopingPolicy().getDomain(loadingClassLoader, result);
          if (scopedDomain != null)
             result = scopedDomain;
       }
@@ -229,7 +227,6 @@
             {
                singleton = new AspectManager();
                AOPClassPoolRepository.getInstance().setAspectManager(singleton);
-               Deployment.deploy();
                return null;
             }
          });
@@ -243,7 +240,7 @@
    @Deprecated
    public static AOPClassLoaderScopingPolicy getClassLoaderScopingPolicy()
    {
-      return AOPSystem.getConfiguration().getClassLoaderScopingPolicy();
+      return AOPSystem.getClassPoolRegistry().getClassLoaderScopingPolicy();
    }
 
    /**
@@ -252,9 +249,12 @@
    @Deprecated
    public static void setClassLoaderScopingPolicy(AOPClassLoaderScopingPolicy classLoaderScopingPolicy)
    {
-      AOPSystem.getConfiguration().setClassLoaderScopingPolicy(classLoaderScopingPolicy);
+      AOPSystem.getClassPoolRegistry().setClassLoaderScopingPolicy(classLoaderScopingPolicy);
    }
 
+   /**
+    * TODO Should be in the new Manager interface?
+    */
    public InterceptionMarkers getInterceptionMarkers(ClassLoader loader)
    {
       if (loader == null)
@@ -621,7 +621,7 @@
          synchronized (advisors)
          {
             advisors.put(clazz, new WeakReference<Advisor>(advisor));
-            registerClass(clazz);
+            AOPSystem.getClassPoolRegistry().registerClass(clazz);
             advisor.attachClass(clazz);
             InterceptorChainObserver observer = AOPSystem.getWeaver().getDynamicAOPStrategy().getInterceptorChainObserver(clazz);
             advisor.setInterceptorChainObserver(observer);
@@ -639,17 +639,16 @@
 
    // Public -------------------------------------------------------
 
+   @Deprecated
    public static Map<ClassLoader, ClassPool> getRegisteredCLs()
    {
-      return AOPClassPoolRepository.getInstance().getRegisteredCLs();
+      return AOPSystem.getClassPoolRegistry().getRegisteredCLs();
    }
 
-   /**
-    * This method will check to see if a register classloader has been undeployed (as in JBoss)
-    */
+   @Deprecated
    public static void clearUnregisteredClassLoaders()
    {
-      AOPClassPoolRepository.getInstance().clearUnregisteredClassLoaders();
+      AOPSystem.getClassPoolRegistry().clearUnregisteredClassLoaders();
    }
 
    /**
@@ -660,10 +659,10 @@
     */
    public boolean isAdvisorRegistered(Advisor advisor)
    {
-      synchronized (getRegisteredCLs())
+      synchronized (AOPSystem.getClassPoolRegistry().getRegisteredCLs())
       {
          if (!advisors.containsKey(advisor.getClazz())) return false;
-         final ClassLoaderValidation classLoaderValidator = AOPSystem.getConfiguration().getClassLoaderValidator();
+         final ClassLoaderValidation classLoaderValidator = AOPSystem.getClassPoolRegistry().getClassLoaderValidator();
          if (classLoaderValidator != null)
          {
             if (classLoaderValidator.isValidClassLoader(advisor.getClassLoader()))
@@ -672,17 +671,17 @@
             }
             else
             {
-               unregisterClassLoader(advisor.getClassLoader());
+               AOPSystem.getClassPoolRegistry().unregisterClassLoader(advisor.getClassLoader());
                return false;
             }
          }
          else
          {
-            ScopedClassPool pool = (ScopedClassPool) getRegisteredClassPool(advisor.getClassLoader());
+            ScopedClassPool pool = (ScopedClassPool) AOPSystem.getClassPoolRegistry().registerClassLoader(advisor.getClassLoader());
             if (pool == null) return false;
             if (pool.isUnloadedClassLoader())
             {
-               unregisterClassLoader(advisor.getClassLoader());
+               AOPSystem.getClassPoolRegistry().unregisterClassLoader(advisor.getClassLoader());
                return false;
             }
             else
@@ -693,41 +692,37 @@
       }
    }
 
+   @Deprecated
    public ClassPool findClassPool(ClassLoader cl)
    {
-      if (cl == null)
-      {
-         //!(cl instanceof Translatable)
-         // findClassPool has problems with boot and system classes, because
-         // they may be null
-         return registerClassLoader(SecurityActions.getContextClassLoader());
-      }
-      return registerClassLoader(cl);
+      return AOPSystem.getClassPoolRegistry().findClassPool(cl);
    }
    
+   @Deprecated
    public ClassPool findClassPool(Class<?> clazz)
    {
-      return findClassPool(SecurityActions.getClassLoader(clazz));
+      return AOPSystem.getClassPoolRegistry().findClassPool(clazz);
    }
 
-   protected ClassPool getRegisteredClassPool(ClassLoader cl)
-   {
-      return getRegisteredCLs().get(cl);
-   }
+   //Does not seem to be used
+   //protected ClassPool getRegisteredClassPool(ClassLoader cl)
 
+   @Deprecated
    public ClassPool registerClassLoader(ClassLoader ucl)
    {
-      return AOPClassPoolRepository.getInstance().registerClassLoader(ucl);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(ucl);
    }
 
+   @Deprecated
    protected void registerClass(Class<?> clazz)
    {
-      AOPClassPoolRepository.getInstance().registerClass(clazz);
+      AOPSystem.getClassPoolRegistry().registerClass(clazz);
    }
 
+   @Deprecated
    public void unregisterClassLoader(ClassLoader cl)
    {
-      AOPClassPoolRepository.getInstance().unregisterClassLoader(cl);
+      AOPSystem.getClassPoolRegistry().unregisterClassLoader(cl);
    }
 
    @Deprecated
@@ -793,25 +788,25 @@
    @Deprecated
    public static boolean getPrune()
    {
-      return AOPClassPoolRepository.getInstance().isPrune();
+      return AOPSystem.getClassPoolRegistry().isPrune();
    }
 
    @Deprecated
    public static void setPrune(boolean prune)
    {
-      AOPClassPoolRepository.getInstance().setPrune(prune);
+      AOPSystem.getClassPoolRegistry().setPrune(prune);
    }
 
    @Deprecated
    public static void setClassPoolFactory(ScopedClassPoolFactory factory)
    {
-      AOPClassPoolRepository.getInstance().setClassPoolFactory(factory);
+      AOPSystem.getClassPoolRegistry().setClassPoolFactory(factory);
    }
 
    @Deprecated
    public static ScopedClassPoolFactory getClassPoolFactory()
    {
-      return AOPClassPoolRepository.getInstance().getClassPoolFactory();
+      return AOPSystem.getClassPoolRegistry().getClassPoolFactory();
    }
 
    @Deprecated
@@ -828,49 +823,7 @@
                            byte[] classfileBuffer)
            throws Exception
    {
-      
       return AOPSystem.getWeaver().transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
-//      try
-//      {
-//         if (isNonAdvisableClassName(className))
-//         {
-//            return null;
-//         }
-//         lock.lockRead();
-//         try
-//         {
-//            synchronized(this){
-//               if (weavingStrategy == null)
-//               {
-//                  if (TransformerCommon.isCompileTime())
-//                  {
-//                     weavingStrategy = new ClassicWeavingStrategy();
-//                  }
-//                  else if(InstrumentorFactory.getInstrumentor(this,dynamicStrategy.getJoinpointClassifier())
-//                        instanceof GeneratedAdvisorInstrumentor)
-//                  {
-//                     weavingStrategy = new SuperClassesFirstWeavingStrategy();
-//                  }
-//                  else
-//                  {
-//                     weavingStrategy = new ClassicWeavingStrategy();
-//                  }
-//               }
-//
-//               return weavingStrategy.translate(this, className, loader, classfileBuffer);
-//            }
-//         }
-//         finally
-//         {
-//            lock.unlockRead();
-//         }
-//      }
-//      catch (Exception e)
-//      {
-//         // AutoGenerated
-//         throw new RuntimeException(e);
-//      }
-
    }
 
 
@@ -1202,7 +1155,7 @@
 
    public synchronized void removeBindings(ArrayList<String> binds)
    {
-      clearUnregisteredClassLoaders();
+      AOPSystem.getClassPoolRegistry().clearUnregisteredClassLoaders();
 
       HashSet<Advisor> bindingAdvisors = new HashSet<Advisor>();
       ArrayList<AdviceBinding> removedBindings = null;
@@ -1945,7 +1898,7 @@
    private Advisor getAdvisorFromAdvisorsKeySetIterator(Iterator<Class<?>> it)
    {
       Class<?> clazz = it.next();
-      final ClassLoaderValidation classLoaderValidator = AOPSystem.getConfiguration().getClassLoaderValidator();
+      final ClassLoaderValidation classLoaderValidator = AOPSystem.getClassPoolRegistry().getClassLoaderValidator();
       if (classLoaderValidator != null && !classLoaderValidator.isValidClassLoader(SecurityActions.getClassLoader(clazz)))
       {
          it.remove();

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassAdvisor.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassAdvisor.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassAdvisor.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -63,6 +63,7 @@
 import org.jboss.aop.joinpoint.MethodInvocation;
 import org.jboss.aop.metadata.ClassMetaDataBinding;
 import org.jboss.aop.metadata.ClassMetaDataLoader;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.Advisable;
 import org.jboss.aop.util.BindingClassifier;
 import org.jboss.aop.util.ConstructorComparator;
@@ -270,7 +271,7 @@
 
          final AspectManager theManager = manager;
          //register class loader: necessary when clazz was precompiled through aopc
-         manager.registerClassLoader(SecurityActions.getClassLoader(clazz));
+         AOPSystem.getClassPoolRegistry().registerClassLoader(SecurityActions.getClassLoader(clazz));
          AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
          {
             public Object run() throws Exception

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassInstanceAdvisor.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassInstanceAdvisor.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassInstanceAdvisor.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -32,6 +32,7 @@
 import org.jboss.aop.advice.Interceptor;
 import org.jboss.aop.joinpoint.Joinpoint;
 import org.jboss.aop.metadata.SimpleMetaData;
+import org.jboss.aop.spi.AOPSystem;
 
 /**
  * Holds an object instance's metadata and attached interceptors
@@ -365,7 +366,7 @@
       }
       ClassLoader classLoader = SecurityActions.getClassLoader(advisedClass);
       if (this.interceptorChainObserver == null ||
-            !AspectManager.getRegisteredCLs().containsKey(classLoader))
+            !AOPSystem.getClassPoolRegistry().getRegisteredCLs().containsKey(classLoader))
       {
          return;
       }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassicWeavingStrategy.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassicWeavingStrategy.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassicWeavingStrategy.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -21,16 +21,16 @@
 */
 package org.jboss.aop;
 
+import javassist.ByteArrayClassPath;
+import javassist.CtClass;
+import javassist.NotFoundException;
+
 import org.jboss.aop.classpool.AOPClassPool;
 import org.jboss.aop.instrument.Instrumentor;
 import org.jboss.aop.instrument.InstrumentorFactory;
 import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 
-import javassist.ByteArrayClassPath;
-import javassist.CtClass;
-import javassist.NotFoundException;
-
 /**
  * Classic weaving.
  *
@@ -57,11 +57,11 @@
        super.setTransformationStarted();
        try
        {
-          if (manager.isNonAdvisableClassName(className))
+          if (!AOPSystem.getWeaver().isWeavable(className))
           {
              return null;
           }
-          AOPClassPool pool = (AOPClassPool) manager.registerClassLoader(loader);
+          AOPClassPool pool = (AOPClassPool) AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
           CtClass clazz = null;
           try
           {
@@ -119,7 +119,7 @@
              }
 
              byte[] rtn = clazz.toBytecode();
-             if (AspectManager.getPrune()) clazz.prune();
+             if (AOPSystem.getConfiguration().isPrune()) clazz.prune();
              return rtn;
           }
           else

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Domain.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Domain.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Domain.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -1011,12 +1011,6 @@
       return parent.getDynamicAOPStrategy();
    }
 
-   @Override
-   public void setDynamicAOPStrategy(DynamicAOPStrategy strategy)
-   {
-      parent.setDynamicAOPStrategy(strategy);
-   }
-
    private class DomainClassifiedBindingAndPointcutCollection extends ClassifiedBindingAndPointcutCollection
    {
 

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/GeneratedInstanceAdvisorMixin.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/GeneratedInstanceAdvisorMixin.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/GeneratedInstanceAdvisorMixin.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -29,6 +29,7 @@
 import org.jboss.aop.advice.GeneratedAdvisorInterceptor;
 import org.jboss.aop.joinpoint.Joinpoint;
 import org.jboss.aop.metadata.SimpleMetaData;
+import org.jboss.aop.spi.AOPSystem;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -392,7 +393,7 @@
    protected void finalize()
    {
       ClassLoader classLoader = delegate.getAdvisor().getClassLoader();
-      if (this.interceptorChainObserver == null || !AspectManager.getRegisteredCLs().containsKey(classLoader))
+      if (this.interceptorChainObserver == null || !AOPSystem.getClassPoolRegistry().getRegisteredCLs().containsKey(classLoader))
       {
          return;
       }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/HotSwapStrategy.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/HotSwapStrategy.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/HotSwapStrategy.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -47,6 +47,7 @@
 import org.jboss.aop.instrument.JoinpointClassifier;
 import org.jboss.aop.instrument.JoinpointFullClassifier;
 import org.jboss.aop.instrument.JoinpointStatusUpdate;
+import org.jboss.aop.spi.AOPSystem;
 
 /**
  * Dynamic AOP strategy that hot swaps a class code.
@@ -128,7 +129,7 @@
     */
    public InterceptorChainObserver getInterceptorChainObserver(Class<?> clazz)
    {
-      ClassPool classPool = AspectManager.instance().findClassPool(clazz);
+      ClassPool classPool = AOPSystem.getClassPoolRegistry().findClassPool(clazz);
       CtClass ctClass = null;
       try
       {

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/InterceptionMarkers.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/InterceptionMarkers.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/InterceptionMarkers.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -23,11 +23,14 @@
 
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.jboss.aop.spi.temp.Internal;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
+ at Internal
 public class InterceptionMarkers
 {
    protected final ConcurrentHashMap<String, String> convertableReference = new ConcurrentHashMap<String, String>();

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/SuperClassesFirstWeavingStrategy.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/SuperClassesFirstWeavingStrategy.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/SuperClassesFirstWeavingStrategy.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -59,12 +59,12 @@
       super.setTransformationStarted();
       try
       {
-         if (manager.isNonAdvisableClassName(className))
+         if (!AOPSystem.getWeaver().isWeavable(className))
          {
             return null;
          }
 
-         AOPClassPool pool = (AOPClassPool) manager.registerClassLoader(loader);
+         AOPClassPool pool = (AOPClassPool) AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
 
          CtClass clazz = obtainCtClassInfo(pool, className, classfileBuffer);
          
@@ -77,7 +77,7 @@
                SecurityActions.debugWriteFile(clazz);
             }
             byte[] rtn = woven.toBytecode();
-            if (AspectManager.getPrune()) woven.prune();
+            if (AOPSystem.getConfiguration().isPrune()) woven.prune();
             return rtn;
          }
          else
@@ -149,7 +149,7 @@
             }
          }
 
-         if (manager.isNonAdvisableClassName(clazz.getName()))
+         if (!AOPSystem.getWeaver().isWeavable(clazz.getName()))
          {
             return null;
          }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/classpool/AOPClassPool.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -30,7 +30,7 @@
 import javassist.scopedpool.ScopedClassPool;
 import javassist.scopedpool.ScopedClassPoolRepository;
 
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.ClassLoaderUtils;
 import org.jboss.logging.Logger;
 
@@ -256,12 +256,12 @@
 
    public static AOPClassPool createAOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
    {
-      return (AOPClassPool)AspectManager.getClassPoolFactory().create(cl, src, repository);
+      return (AOPClassPool)AOPSystem.getClassPoolRegistry().getClassPoolFactory().create(cl, src, repository);
    }
 
    public static AOPClassPool createAOPClassPool(ClassPool src, ScopedClassPoolRepository repository)
    {
-      return (AOPClassPool)AspectManager.getClassPoolFactory().create(src, repository);
+      return (AOPClassPool)AOPSystem.getClassPoolRegistry().getClassPoolFactory().create(src, repository);
    }
 
    public String toString()
@@ -326,16 +326,16 @@
                Object o = generatedClasses.get(classname);
                if (o == null)
                {
-                  Map<ClassLoader, ClassPool> registeredCLs = AspectManager.getRegisteredCLs();
+                  Map<ClassLoader, ClassPool> registeredCLs = AOPSystem.getClassPoolRegistry().getRegisteredCLs();
                   synchronized (registeredCLs)
                   {
-                     for(ClassPool pl : AspectManager.getRegisteredCLs().values())
+                     for(ClassPool pl : AOPSystem.getClassPoolRegistry().getRegisteredCLs().values())
                      {
                         AOPClassPool pool = (AOPClassPool) pl;
                         if (pool.isUnloadedClassLoader())
                         {
                            if (trace) logger.trace(this + " pool is unloaded " + pool);
-                           AspectManager.instance().unregisterClassLoader(pool.getClassLoader());
+                           AOPSystem.getClassPoolRegistry().unregisterClassLoader(pool.getClassLoader());
                            continue;
                         }
 

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -26,22 +26,22 @@
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
-import org.jboss.aop.Advisor;
-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 javassist.ClassPool;
 import javassist.scopedpool.ScopedClassPool;
 import javassist.scopedpool.ScopedClassPoolFactory;
 import javassist.scopedpool.ScopedClassPoolRepository;
 import javassist.scopedpool.ScopedClassPoolRepositoryImpl;
 
+import org.jboss.aop.Advisor;
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.advice.SecurityActions;
+import org.jboss.aop.instrument.Instrumentor;
+import org.jboss.aop.util.logging.AOPLogger;
+
 /**
  * Singleton classpool repository used by aop
  * 
@@ -55,7 +55,7 @@
    private final static AOPClassPoolRepository instance = new AOPClassPoolRepository();
    
    /** The classes per classppol */
-   protected final HashMap<ClassLoader, HashSet<Class<?>>> ucl2classes = new HashMap<ClassLoader, HashSet<Class<?>>>();
+   protected final Map<ClassLoader, HashSet<Class<?>>> ucl2classes = new ConcurrentHashMap<ClassLoader, HashSet<Class<?>>>();
 
    /** The top-level AspectManager this pool belongs to */
    AspectManager manager;
@@ -72,33 +72,8 @@
       this.delegate = ScopedClassPoolRepositoryImpl.getInstance();
       //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);
@@ -170,6 +145,7 @@
       {
          classes = new HashSet<Class<?>>();
          ucl2classes.put(classLoader, classes);
+         classes = ucl2classes.get(classLoader);
       }
       classes.add(clazz);
    }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/eclipsesupport/Agent.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/eclipsesupport/Agent.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/eclipsesupport/Agent.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -22,6 +22,7 @@
 package org.jboss.aop.eclipsesupport;
 
 import org.jboss.aop.AspectManager;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.standalone.StandaloneClassPoolFactory;
 
 import java.lang.instrument.Instrumentation;
@@ -40,7 +41,7 @@
    public static void premain(String agentArgs, Instrumentation inst)
    {
       StandaloneClassPoolFactory factory = new StandaloneClassPoolFactory(); 
-      AspectManager.setClassPoolFactory(factory);
+      AOPSystem.getClassPoolRegistry().setClassPoolFactory(factory);
       // necessary for configuration
       AspectManager.instance();
       ScopedClassPoolRepositoryImpl.getInstance().setPrune(false);

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/eclipsesupport/EclipseTestTransformer.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/eclipsesupport/EclipseTestTransformer.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/eclipsesupport/EclipseTestTransformer.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -21,10 +21,6 @@
   */
 package org.jboss.aop.eclipsesupport;
 
-import org.jboss.aop.AspectManager;
-import org.jboss.aop.AspectXmlLoader;
-import org.jboss.aop.standalone.AOPTransformer;
-
 import java.lang.instrument.ClassFileTransformer;
 import java.lang.instrument.IllegalClassFormatException;
 import java.net.URL;
@@ -36,6 +32,10 @@
 import javassist.CtMethod;
 import javassist.CtNewMethod;
 
+import org.jboss.aop.AspectXmlLoader;
+import org.jboss.aop.spi.AOPSystem;
+import org.jboss.aop.standalone.AOPTransformer;
+
 /**
  * A transformer to weave the main method of the org.eclipse.jdt.internal.junit.runner.RemoteTestRunner, so that we can deploy the correct
  * -aop.xml files before the test case class itself is loaded when running within Eclipse
@@ -78,8 +78,7 @@
    {
       try
       {
-         AspectManager manager = AspectManager.instance();
-         ClassPool pool = manager.registerClassLoader(loader);
+         ClassPool pool = AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
          CtClass remoteTestRunner = pool.get(MAIN_CLASS.replace('/', '.'));
          remoteTestRunner.defrost();
 

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/Instrumentor.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/Instrumentor.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/Instrumentor.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -630,7 +630,7 @@
          {
             ref = it.next();
             if (!manager.getInterceptionMarkers(clazz.getClassPool().getClassLoader()).convertReference(ref)
-                || manager.isNonAdvisableClassName(ref)
+                || !AOPSystem.getWeaver().isWeavable(ref)
                 || ref.startsWith("java.")
                 || ref.startsWith("javax.")
                 || ref.startsWith("["))
@@ -991,7 +991,7 @@
          {
             for (CtClass clazz : processedClasses) 
             {
-               if (manager.isNonAdvisableClassName(clazz.getName()) || ! isTransformable(clazz))
+               if (!AOPSystem.getWeaver().isWeavable(clazz.getName()) || ! isTransformable(clazz))
                {
                   continue;
                }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultAOPSystem.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultAOPSystem.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultAOPSystem.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -23,6 +23,7 @@
 
 import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.spi.AbstractAOPSystem;
+import org.jboss.aop.spi.ClassPoolRegistry;
 import org.jboss.aop.spi.Configuration;
 import org.jboss.aop.spi.Manager;
 import org.jboss.aop.spi.Weaver;
@@ -37,6 +38,7 @@
    private Configuration configuration;
    private Manager mainManager;
    private Weaver weaver;
+   private ClassPoolRegistry registry;
 
    public DefaultAOPSystem(AOPSystem system)
    {
@@ -70,7 +72,7 @@
    @Override
    protected void initWeaver(AOPSystem system)
    {
-      weaver = new DefaultWeaver(configuration);
+      weaver = new DefaultWeaver();
    }
 
    @Override
@@ -79,4 +81,15 @@
       return weaver;
    }
 
+   @Override
+   protected void initClassPoolRegistry(AOPSystem system)
+   {
+      registry = new DefaultClassPoolRegistry();
+   }
+   
+   @Override
+   protected ClassPoolRegistry getClassPoolRegistry(AOPSystem system)
+   {
+      return registry;
+   }
 }

Added: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultClassPoolRegistry.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultClassPoolRegistry.java	                        (rev 0)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultClassPoolRegistry.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -0,0 +1,174 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file 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.plugins;
+
+import java.util.Map;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+
+import org.jboss.aop.ClassLoaderValidation;
+import org.jboss.aop.classpool.AOPClassLoaderScopingPolicy;
+import org.jboss.aop.classpool.AOPClassPoolRepository;
+import org.jboss.aop.spi.AOPSystem;
+import org.jboss.aop.spi.ClassPoolRegistry;
+import org.jboss.aop.spi.Configuration;
+import org.jboss.aop.spi.Weaver;
+import org.jboss.aop.util.logging.AOPLogger;
+
+/**
+ * Singleton managed by AOPSystem for managing the classpools
+ *  
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DefaultClassPoolRegistry implements ClassPoolRegistry
+{
+   final protected AOPLogger log = AOPLogger.getLogger(this.getClass());
+   
+   private Weaver weaver;
+   
+   @SuppressWarnings("unused")
+   private Configuration configuration;
+   
+   private AOPClassPoolRepository repository = AOPClassPoolRepository.getInstance();
+   
+   private AOPClassLoaderScopingPolicy classLoaderScopingPolicy;
+   
+   private ClassLoaderValidation classLoaderValidator;
+   
+   public DefaultClassPoolRegistry()
+   {
+   }
+   
+   public void setWeaver(AOPSystem system, Weaver weaver)
+   {
+      this.weaver = weaver;
+   }
+   
+   public void setConfiguration(AOPSystem system, Configuration configuration)
+   {
+      this.configuration = configuration;
+      setPrune(configuration.isPrune());
+   }
+   
+   public boolean isPrune()
+   {
+      return repository.isPrune();
+   }
+
+   public void setPrune(boolean prune)
+   {
+      repository.setPrune(prune);
+   }
+
+   public void setClassPoolFactory(ScopedClassPoolFactory factory)
+   {
+      repository.setClassPoolFactory(factory);
+   }
+
+   public ScopedClassPoolFactory getClassPoolFactory()
+   {
+      return repository.getClassPoolFactory();
+   }
+
+   public AOPClassLoaderScopingPolicy getClassLoaderScopingPolicy()
+   {
+      return classLoaderScopingPolicy;
+   }
+
+   public void setClassLoaderScopingPolicy(AOPClassLoaderScopingPolicy classLoaderScopingPolicy)
+   {
+      if (isNotStartup() && classLoaderScopingPolicy != this.classLoaderScopingPolicy)
+      {
+         log.warn("Attempt to change classLoaderScopingPolicy to '" + classLoaderScopingPolicy + "' from '" + this.classLoaderScopingPolicy + "' is ignored since weaving has started");
+         return;
+      }
+      this.classLoaderScopingPolicy = classLoaderScopingPolicy;
+   }
+
+   public ClassLoaderValidation getClassLoaderValidator()
+   {
+      return classLoaderValidator;
+   }
+
+   public void setClassLoaderValidator(ClassLoaderValidation classLoaderValidator)
+   {
+      if (isNotStartup() && classLoaderValidator != this.classLoaderValidator)
+      {
+         log.warn("Attempt to change classLoaderScopingPolicy to '" + classLoaderValidator + "' from '" + this.classLoaderValidator + "' is ignored since weaving has started");
+         return;
+      }
+      this.classLoaderValidator = classLoaderValidator;
+   }
+
+   public Map<ClassLoader, ClassPool> getRegisteredCLs()
+   {
+      return repository.getRegisteredCLs();
+   }
+
+   public void clearUnregisteredClassLoaders()
+   {
+      repository.clearUnregisteredClassLoaders();
+   }
+
+   public ClassPool registerClassLoader(ClassLoader ucl)
+   {
+      return repository.registerClassLoader(ucl);
+   }
+
+   public void registerClass(Class<?> clazz)
+   {
+      repository.registerClass(clazz);
+   }
+   
+   public ClassPool findClassPool(ClassLoader cl)
+   {
+      if (cl == null)
+      {
+         //!(cl instanceof Translatable)
+         // findClassPool has problems with boot and system classes, because
+         // they may be null
+         return registerClassLoader(SecurityActions.getContextClassLoader());
+      }
+      return registerClassLoader(cl);
+   }
+   
+   public ClassPool findClassPool(Class<?> clazz)
+   {
+      return findClassPool(SecurityActions.getClassLoader(clazz));
+   }
+
+   public void unregisterClassLoader(ClassLoader cl)
+   {
+      repository.unregisterClassLoader(cl);
+   }
+   
+   private boolean isNotStartup()
+   {
+      if (weaver == null || !weaver.hasTransformationStarted())
+      {
+         return false;
+      }
+      return true;
+   }
+}

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultConfiguration.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultConfiguration.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultConfiguration.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -26,9 +26,6 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.jboss.aop.AdvisorFactory;
-import org.jboss.aop.ClassLoaderValidation;
-import org.jboss.aop.classpool.AOPClassLoaderScopingPolicy;
-import org.jboss.aop.classpool.AOPClassPoolRepository;
 import org.jboss.aop.instrument.InstrumentorFactory;
 import org.jboss.aop.pointcut.ast.ClassExpression;
 import org.jboss.aop.spi.AOPSystem;
@@ -44,9 +41,10 @@
  */
 public class DefaultConfiguration implements Configuration, ConfigurationProperties
 {
-   AOPLogger log = AOPLogger.getLogger(this.getClass());
+   final protected AOPLogger log = AOPLogger.getLogger(this.getClass());
    
    private Weaver weaver;
+   private boolean prune = true; //This is the default value in ScopedClassPoolRepositoryImpl
    private boolean optimize;
    private boolean verbose;
    private List<String> exclude = new CopyOnWriteArrayList<String>();
@@ -56,8 +54,6 @@
    protected List<String> includedInvisibleAnnotations = new CopyOnWriteArrayList<String>();
    private boolean debugClasses;
    private boolean maintainAdvisorMethodInterceptors;
-   private AOPClassLoaderScopingPolicy classLoaderScopingPolicy;
-   private ClassLoaderValidation classLoaderValidator;
    
    public DefaultConfiguration()
    {
@@ -66,7 +62,7 @@
 
    public void setWeaver(AOPSystem system, Weaver weaver)
    {
-      if (weaver != null)
+      if (this.weaver != null)
       {
          throw new IllegalStateException("Weaver is already set");
       }
@@ -88,6 +84,11 @@
       this.optimize = optimize;
    }
 
+   public boolean isPrune()
+   {
+      return prune;
+   }
+   
    public boolean isVerbose()
    {
       return verbose;
@@ -192,36 +193,6 @@
       this.maintainAdvisorMethodInterceptors = maintainMethodInterceptors;
    }
 
-   public AOPClassLoaderScopingPolicy getClassLoaderScopingPolicy()
-   {
-      return classLoaderScopingPolicy;
-   }
-
-   public void setClassLoaderScopingPolicy(AOPClassLoaderScopingPolicy classLoaderScopingPolicy)
-   {
-      if (isNotStartup() && classLoaderScopingPolicy != this.classLoaderScopingPolicy)
-      {
-         log.warn("Attempt to change classLoaderScopingPolicy to '" + classLoaderScopingPolicy + "' from '" + this.classLoaderScopingPolicy + "' is ignored since weaving has started");
-         return;
-      }
-      this.classLoaderScopingPolicy = classLoaderScopingPolicy;
-   }
-
-   public ClassLoaderValidation getClassLoaderValidator()
-   {
-      return classLoaderValidator;
-   }
-
-   public void setClassLoaderValidator(ClassLoaderValidation classLoaderValidator)
-   {
-      if (isNotStartup() && classLoaderValidator != this.classLoaderValidator)
-      {
-         log.warn("Attempt to change classLoaderScopingPolicy to '" + classLoaderValidator + "' from '" + this.classLoaderValidator + "' is ignored since weaving has started");
-         return;
-      }
-      this.classLoaderValidator = classLoaderValidator;
-   }
-
    protected void initialise()
    {
       initialiseOptimized();
@@ -254,7 +225,7 @@
       Boolean prune = getBooleanProperty(PRUNE);
       if (prune != null)
       {
-         AOPClassPoolRepository.getInstance().setPrune(prune);
+         this.prune = prune;
       }
    }
 

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultManager.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultManager.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultManager.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -37,6 +37,7 @@
  */
 public class DefaultManager implements Manager
 {
+   @SuppressWarnings("unused")
    private final Configuration configuration;
    
    private final Object lazyCollectionLock = new Object();

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultWeaver.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultWeaver.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultWeaver.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -35,6 +35,7 @@
 import org.jboss.aop.pointcut.ast.ClassExpression;
 import org.jboss.aop.spi.AOPLock;
 import org.jboss.aop.spi.AOPSystem;
+import org.jboss.aop.spi.ClassPoolRegistry;
 import org.jboss.aop.spi.Configuration;
 import org.jboss.aop.spi.Weaver;
 
@@ -48,14 +49,34 @@
    private AOPLock lock;
    
    private Configuration configuration;
-   
+
+   private ClassPoolRegistry classPoolRegistry;
+
    private DynamicAOPStrategy dynamicStrategy = new LoadInterceptedClassesStrategy();
    
-   protected DefaultWeaver(Configuration configuration)
+   protected DefaultWeaver()
    {
+   }
+   
+   public void setConfiguration(AOPSystem system, Configuration configuration)
+   {
+      if (this.configuration != null)
+      {
+         throw new IllegalStateException("Configuration is already set");
+      }
       this.configuration = configuration;
    }
-   
+
+
+   public void setClassPoolRegistry(AOPSystem system, ClassPoolRegistry classPoolRegistry)
+   {
+      if (this.classPoolRegistry != null)
+      {
+         throw new IllegalStateException("ClassPoolRegistry is already set");
+      }
+      this.classPoolRegistry = classPoolRegistry;
+   }
+
    /**
     * Sets the AOPLock. This method can only be called by AOPSystem and
     * should only be called once
@@ -162,6 +183,7 @@
 
    public void unregisterClassLoader(ClassLoader loader)
    {
+      classPoolRegistry.unregisterClassLoader(loader);
    }
 
    private boolean ignoreClass(String classname)
@@ -226,5 +248,4 @@
       }
       
    }
-   
 }

Added: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/SecurityActions.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/SecurityActions.java	                        (rev 0)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/SecurityActions.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -0,0 +1,224 @@
+/*
+* 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.plugins;
+
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Constructor;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+import javassist.CtClass;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+class SecurityActions
+{
+   interface SetAccessibleAction
+   {
+      void setAccessible(AccessibleObject accessibleObject);
+      
+      SetAccessibleAction PRIVILEGED = new SetAccessibleAction()
+      {
+         public void setAccessible(final AccessibleObject accessibleObject)
+         {
+            try
+            {
+               AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
+               {
+                  public Object run() throws Exception
+                  {
+                     accessibleObject.setAccessible(true);
+                     return null;
+                  }
+               });
+            }
+            catch (PrivilegedActionException e)
+            {
+               throw new RuntimeException("Error setting " + accessibleObject + " as accessible ", e.getException());
+            }
+         }
+      };
+
+      SetAccessibleAction NON_PRIVILEGED = new SetAccessibleAction()
+      {
+         public void setAccessible(AccessibleObject accessibleObject)
+         {
+            accessibleObject.setAccessible(true);
+         }
+      };
+   }
+
+   static void setAccessible(AccessibleObject accessibleObject)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         SetAccessibleAction.NON_PRIVILEGED.setAccessible(accessibleObject);
+      }
+      else
+      {
+         SetAccessibleAction.PRIVILEGED.setAccessible(accessibleObject);
+      }
+   }
+
+   interface CtClassDebugWriteFileAction
+   {
+      void debugWriteFile(CtClass ctClass);
+      
+      CtClassDebugWriteFileAction PRIVILEGED = new CtClassDebugWriteFileAction()
+      {
+         public void debugWriteFile(final CtClass ctClass)
+         {
+            try
+            {
+               AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
+               {
+                  public Object run() throws Exception
+                  {
+                     ctClass.debugWriteFile();
+                     return null;
+                  }
+               });
+            }
+            catch (PrivilegedActionException e)
+            {
+               //Not really a problem if we're not able to write the debug class file
+            }
+         }
+      };
+
+      CtClassDebugWriteFileAction NON_PRIVILEGED = new CtClassDebugWriteFileAction()
+      {
+         public void debugWriteFile(CtClass ctClass)
+         {
+            ctClass.debugWriteFile();
+         }
+      };
+   }
+
+   static void debugWriteFile(CtClass ctClass)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         CtClassDebugWriteFileAction.NON_PRIVILEGED.debugWriteFile(ctClass);
+      }
+      else
+      {
+         CtClassDebugWriteFileAction.PRIVILEGED.debugWriteFile(ctClass);
+      }
+   }
+
+   public static class GetContextClassLoaderAction implements PrivilegedAction<ClassLoader>
+   {
+      public static GetContextClassLoaderAction INSTANCE = new GetContextClassLoaderAction();
+      
+      public ClassLoader run()
+      {
+         return Thread.currentThread().getContextClassLoader();
+      }
+   }
+
+   static ClassLoader getContextClassLoader()
+   {
+      if (System.getSecurityManager() == null)
+         return Thread.currentThread().getContextClassLoader();
+      else
+         return AccessController.doPrivileged(GetContextClassLoaderAction.INSTANCE);
+   }
+   
+   interface GetDeclaredConstructorsAction 
+   {
+      Constructor<?>[] getDeclaredConstructors(Class<?> clazz);
+      
+      GetDeclaredConstructorsAction NON_PRIVILEGED = new GetDeclaredConstructorsAction() {
+
+         public Constructor<?>[] getDeclaredConstructors(Class<?> clazz)
+         {
+            return clazz.getDeclaredConstructors();
+         }};
+
+         GetDeclaredConstructorsAction PRIVILEGED = new GetDeclaredConstructorsAction() {
+
+            public Constructor<?>[] getDeclaredConstructors(final Class<?> clazz)
+            {
+               return AccessController.doPrivileged(new PrivilegedAction<Constructor<?>[]>() {
+
+                  public Constructor<?>[] run()
+                  {
+                     return clazz.getDeclaredConstructors();
+                  }});
+            }};
+   }
+   
+   static Constructor<?>[] getDeclaredConstructors(Class<?> clazz)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         return GetDeclaredConstructorsAction.NON_PRIVILEGED.getDeclaredConstructors(clazz);
+      }
+      else
+      {
+         return GetDeclaredConstructorsAction.PRIVILEGED.getDeclaredConstructors(clazz);
+      }
+   }
+
+   
+   interface GetClassLoaderAction 
+   {
+      ClassLoader getClassLoader(Class<?> clazz);
+      
+      GetClassLoaderAction NON_PRIVILEGED = new GetClassLoaderAction() {
+
+         public ClassLoader getClassLoader(Class<?> clazz)
+         {
+            return clazz.getClassLoader();
+         }};
+
+     GetClassLoaderAction PRIVILEGED = new GetClassLoaderAction() {
+
+         public ClassLoader getClassLoader(final Class<?> clazz)
+         {
+            return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+
+               public ClassLoader run()
+               {
+                  return clazz.getClassLoader();
+               }});
+         }};
+   }
+   
+   static ClassLoader getClassLoader(Class<?> clazz)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         return GetClassLoaderAction.NON_PRIVILEGED.getClassLoader(clazz);
+      }
+      else
+      {
+         return GetClassLoaderAction.PRIVILEGED.getClassLoader(clazz);
+      }
+   }
+}

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -40,12 +40,12 @@
 import javassist.Modifier;
 import javassist.SerialVersionUID;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.ClassAdvisor;
 import org.jboss.aop.ClassInstanceAdvisor;
 import org.jboss.aop.InstanceAdvisor;
 import org.jboss.aop.instrument.Instrumentor;
 import org.jboss.aop.instrument.TransformerCommon;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.JavassistMethodHashing;
 import org.jboss.aop.util.reference.MethodPersistentReference;
 import org.jboss.aop.util.reference.PersistentReference;
@@ -86,7 +86,7 @@
       // Don't make a proxy of a proxy !
       if (ClassProxy.class.isAssignableFrom(clazz)) clazz = clazz.getSuperclass();
 
-      ClassPool pool = AspectManager.instance().findClassPool(clazz);
+      ClassPool pool = AOPSystem.getClassPoolRegistry().findClassPool(clazz);
       if (pool == null) throw new NullPointerException("Could not find ClassPool");
 
       
@@ -277,12 +277,12 @@
          {
             HashSet<Long> mixinMethods = new HashSet<Long>();
             Class<?>[] mixinf = mixins[i].getInterfaces();
-            ClassPool mixPool = AspectManager.instance().findClassPool(mixins[i].getMixin().getClass());
+            ClassPool mixPool = AOPSystem.getClassPoolRegistry().findClassPool(mixins[i].getMixin().getClass());
             CtClass mixClass = mixPool.get(mixins[i].getMixin().getClass().getName());
             for (int j = 0; j < mixinf.length; j++)
             {
                if (addedInterfaces.contains(mixinf[j].getName())) throw new Exception("2 mixins are implementing the same interfaces");
-               ClassPool mixIntfPool = AspectManager.instance().findClassPool(mixinf[j]);
+               ClassPool mixIntfPool = AOPSystem.getClassPoolRegistry().findClassPool(mixinf[j]);
                CtClass intfClass = mixIntfPool.get(mixinf[j].getName());
                CtMethod[] methods = intfClass.getMethods();
                for (int m = 0; m < methods.length; m++)

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/ProxyFactory.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/ProxyFactory.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/ProxyFactory.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -32,6 +32,7 @@
 import org.jboss.aop.InstanceAdvisor;
 import org.jboss.aop.instrument.Instrumentor;
 import org.jboss.aop.instrument.TransformerCommon;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.JavassistMethodHashing;
 import org.jboss.aop.util.reference.MethodPersistentReference;
 import org.jboss.util.collection.WeakValueHashMap;
@@ -171,12 +172,12 @@
          {
             HashSet<Long> mixinMethods = new HashSet<Long>();
             Class<?>[] mixinf = mixins[i].getInterfaces();
-            ClassPool mixPool = AspectManager.instance().findClassPool(mixins[i].getMixin().getClass());
+            ClassPool mixPool = AOPSystem.getClassPoolRegistry().findClassPool(mixins[i].getMixin().getClass());
             CtClass mixClass = mixPool.get(mixins[i].getMixin().getClass().getName());
             for (int j = 0; j < mixinf.length; j++)
             {
                if (addedInterfaces.contains(mixinf[j].getName())) throw new Exception("2 mixins are implementing the same interfaces");
-               ClassPool mixIntfPool = AspectManager.instance().findClassPool(mixinf[j]);
+               ClassPool mixIntfPool = AOPSystem.getClassPoolRegistry().findClassPool(mixinf[j]);
                CtClass intfClass = mixIntfPool.get(mixinf[j].getName());
                CtMethod[] methods = intfClass.getMethods();
                for (int m = 0; m < methods.length; m++)
@@ -206,7 +207,7 @@
       for (int i = 0; i < interfaces.length; i++)
       {
          if (addedInterfaces.contains(interfaces[i].getName())) continue;
-         ClassPool mixPool = AspectManager.instance().findClassPool(interfaces[i]);
+         ClassPool mixPool = AOPSystem.getClassPoolRegistry().findClassPool(interfaces[i]);
          CtClass intfClass = mixPool.get(interfaces[i].getName());
          CtMethod[] methods = intfClass.getMethods();
          for (int m = 0; m < methods.length; m++)

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/container/ContainerProxyFactory.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/container/ContainerProxyFactory.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/container/ContainerProxyFactory.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -61,6 +61,7 @@
 import org.jboss.aop.instrument.TransformerCommon;
 import org.jboss.aop.introduction.InterfaceIntroduction;
 import org.jboss.aop.proxy.ClassProxyFactory;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.JavassistMethodHashing;
 
 
@@ -256,11 +257,11 @@
       if (loader != null)
       {
          validateLoader();
-         pool = AspectManager.instance().findClassPool(loader); 
+         pool = AOPSystem.getClassPoolRegistry().findClassPool(loader); 
       }
       if (pool == null)
       {
-         pool = AspectManager.instance().findClassPool(clazz);
+         pool = AOPSystem.getClassPoolRegistry().findClassPool(clazz);
       }
       if (pool == null) throw new NullPointerException("Could not find ClassPool");
 

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/reflectprototype/AopClassPoolFactory.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/reflectprototype/AopClassPoolFactory.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/reflectprototype/AopClassPoolFactory.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -21,10 +21,10 @@
   */
 package org.jboss.aop.reflectprototype;
 
-import org.jboss.aop.AspectManager;
-
 import javassist.ClassPool;
 
+import org.jboss.aop.spi.AOPSystem;
+
 /**
  * A AopClassPoolFactory.
  * 
@@ -36,7 +36,7 @@
 
    public  ClassPool getPoolForLoader(ClassLoader cl)
    {
-      return AspectManager.instance().registerClassLoader(cl);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(cl);
    }
 
 }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/AOPSystem.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/AOPSystem.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/AOPSystem.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -60,9 +60,9 @@
    
    private AOPSystem()
    {
-      System.out.println(SYSTEM);
       SYSTEM.setConfiguration(INSTANCE, initialiseConfiguration());
-      if (SYSTEM.getConfiguration(INSTANCE) == null)
+      final Configuration configuration = SYSTEM.getConfiguration(INSTANCE); 
+      if (configuration == null)
       {
          throw new IllegalStateException("Null Configuration");
       }
@@ -73,14 +73,29 @@
             public Object run() throws Exception
             {
                SYSTEM.initRootManager(INSTANCE);
+               
                SYSTEM.initWeaver(INSTANCE);
                final Weaver weaver = SYSTEM.getWeaver(INSTANCE);
                if (weaver == null)
                {
                   throw new IllegalStateException("Null Weaver");
                }
+               weaver.setConfiguration(INSTANCE, configuration);
                weaver.setAOPLock(INSTANCE, LOCK);
-               SYSTEM.getConfiguration(INSTANCE).setWeaver(INSTANCE, weaver); 
+               
+               configuration.setWeaver(INSTANCE, weaver);
+               
+               SYSTEM.initClassPoolRegistry(INSTANCE);
+               final ClassPoolRegistry classPoolRegistry = SYSTEM.getClassPoolRegistry(INSTANCE);
+               if (classPoolRegistry == null)
+               {
+                  throw new IllegalStateException("Null ClassPoolRegistry");
+               }
+               classPoolRegistry.setConfiguration(INSTANCE, configuration);
+               classPoolRegistry.setWeaver(INSTANCE, weaver);
+               
+               weaver.setClassPoolRegistry(INSTANCE, classPoolRegistry);
+               
                Deployment.deploy();
                return null;
             }});
@@ -121,6 +136,11 @@
       return SYSTEM.getWeaver(INSTANCE);
    }
    
+   public static ClassPoolRegistry getClassPoolRegistry()
+   {
+      return SYSTEM.getClassPoolRegistry(INSTANCE);
+   }
+   
    /**
     * Initialises the AOPSystem using class given in the {@link ConfigurationProperties#AOP_SYSTEM}
     * system property.

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/AbstractAOPSystem.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/AbstractAOPSystem.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/AbstractAOPSystem.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -71,7 +71,7 @@
    protected abstract Manager getRootManager(AOPSystem system);
    
    /**
-    * Initialise the weaver to be used. This method will be called from withing a privileged block
+    * Initialise the weaver to be used. This method will be called from within a privileged block
     * @param system The calling AOPSystem
     */
    protected abstract void initWeaver(AOPSystem system);
@@ -82,4 +82,17 @@
     * @return The weaver
     */
    protected abstract Weaver getWeaver(AOPSystem system);
+   
+   /**
+    * Initialise the weaver to be used. This method will be called from within a privileged block
+    * @param system The calling AOPSystem
+    */
+   protected abstract void initClassPoolRegistry(AOPSystem system);   
+   
+   /**
+    * Get the ClassPoolRegistry
+    * @param system The calling AOPSystem
+    * @return The weaver
+    */
+   protected abstract ClassPoolRegistry getClassPoolRegistry(AOPSystem system);
 }

Added: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ClassPoolRegistry.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ClassPoolRegistry.java	                        (rev 0)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ClassPoolRegistry.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -0,0 +1,144 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file 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.spi;
+
+import java.util.Map;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+
+import org.jboss.aop.ClassLoaderValidation;
+import org.jboss.aop.classpool.AOPClassLoaderScopingPolicy;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ClassPoolRegistry extends ConfigurationAware, WeaverAware
+{
+   /**
+    * Returns whether the underlying classpools prune a class once woven
+    * @return true if pruning happens
+    */
+   boolean isPrune();
+
+   /**
+    * Sets whether the underlying classpools should prune a class once woven
+    * @param prune Whether pruning should happen
+    */
+   void setPrune(boolean prune);
+
+   /**
+    * Returns a map of ClassLoaders to ClassPool that have been registered
+    * @return the map of ClassLoaders to ClassPools
+    */
+   Map<ClassLoader, ClassPool> getRegisteredCLs();
+
+   /**
+    * Clears the classloaders that no longer are active
+    */
+   void clearUnregisteredClassLoaders();
+
+   /**
+    * Registers a ClassLoader and creates a new ClassPool. If the classloader is already 
+    * registered it returns the ClassPool for that ClassLoader
+    * @return The ClassPool
+    */
+   ClassPool registerClassLoader(ClassLoader cl);
+
+   /**
+    * Registers a class with the underlying classpool repository
+    * @param clazz The class to be registered
+    */
+   void registerClass(Class<?> clazz);
+
+   /**
+    * Finds the registered ClassPool for a ClassLoader
+    * @param cl The ClassLoader
+    * @return The found ClassPool or null if no ClassPool could be found 
+    */
+   ClassPool findClassPool(ClassLoader cl);
+
+   /**
+    * Finds the registered ClassPool for a class
+    * @param clazz The class
+    * @return The found ClassPool or null if no ClassPool could be found 
+    */
+   public ClassPool findClassPool(Class<?> clazz);
+   
+   /**
+    * Unregisters a ClassLoader and destroys its ClassPool. 
+    * @param The ClassLoader to unregister
+    */
+   void unregisterClassLoader(ClassLoader cl);
+   
+   /**
+    * Gets the classpool factory. This is normally only overridden when running in a managed environment 
+    * such as JBoss Application Server.
+    * @return The classpool factory
+    */
+   ScopedClassPoolFactory getClassPoolFactory();
+
+   /**
+    * Gets the classpool factory. This is normally only overridden when running in a managed environment 
+    * such as JBoss Application Server.
+    * This should only get set on startup, subsequent attempts to change this are ignored.
+    * @param factory The classpool factory
+    */
+   void setClassPoolFactory(ScopedClassPoolFactory factory);
+
+   /**
+    * Gets the classloader scoping policy. This is normally only used when running in a managed environment 
+    * such as JBoss Application Server
+    * @return The classloader scoping policy
+    */
+   //TODO SPI interface needed for AOPClassLoaderScopingPolicy
+   AOPClassLoaderScopingPolicy getClassLoaderScopingPolicy();
+
+   /**
+    * Sets the classloader scoping policy. This is normally only used when running in a managed environment 
+    * such as JBoss Application Server.
+    * This should only get set on startup, subsequent attempts to change this are ignored.
+    * @param classLoaderScopingPolicy The classloader scoping policy
+    */
+   //TODO SPI interface needed for AOPClassLoaderScopingPolicy
+   void setClassLoaderScopingPolicy(AOPClassLoaderScopingPolicy classLoaderScopingPolicy);
+
+   /**
+    * Gets the classloader validation. This is normally only used whhen running in a managed environment 
+    * such as JBoss Application Server.
+    * @return The classloader validation
+    */
+   //TODO SPI interface needed for ClassLoaderValidation
+   ClassLoaderValidation getClassLoaderValidator();
+
+   /**
+    * Sets the classloader validation. This is normally only used whhen running in a managed environment 
+    * such as JBoss Application Server
+    * This should only get set on startup, subsequent attempts to change this are ignored.
+    * @param classLoaderValidator The classloader validation
+    */
+   //TODO SPI interface needed for ClassLoaderValidation
+   void setClassLoaderValidator(ClassLoaderValidation classLoaderValidator);
+
+}
\ No newline at end of file

Copied: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ClassPoolRegistryAware.java (from rev 84506, projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java)
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ClassPoolRegistryAware.java	                        (rev 0)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ClassPoolRegistryAware.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -0,0 +1,40 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file 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.spi;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ClassPoolRegistryAware
+{
+   /**
+    * Sets the class pool registry once initialised. This method can only be called by AOPSystem and
+    * should only be called once
+    * @param system The calling AOPSystem
+    * @param classPoolRegistry The class pool registry set. This is guaranteed not-null
+    * @throws IllegalStateException if the class pool registry is already set
+    */
+   void setClassPoolRegistry(AOPSystem system, ClassPoolRegistry classPoolRegistry);
+
+}

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/Configuration.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/Configuration.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/Configuration.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -24,8 +24,6 @@
 import java.util.List;
 
 import org.jboss.aop.Advisor;
-import org.jboss.aop.ClassLoaderValidation;
-import org.jboss.aop.classpool.AOPClassLoaderScopingPolicy;
 import org.jboss.aop.pointcut.ast.ClassExpression;
 
 
@@ -36,18 +34,9 @@
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public interface Configuration
+public interface Configuration extends WeaverAware
 {
    /**
-    * Sets the weaver once initialised. This method can only be called by AOPSystem and
-    * should only be called once
-    * @param system The calling AOPSystem
-    * @param Weaver The weaver set. This is guaranteed not-null
-    * @throws IllegalStateException if the weaver is already set
-    */
-   void setWeaver(AOPSystem system, Weaver weaver);
-   
-   /**
     * Gets whether invocation classes should be generated to avoid reflection when using classic weaving.
     * @return whether to generate invocation classes
     */
@@ -73,6 +62,14 @@
    void setVerbose(boolean verbose);
 
    /**
+    * Gets whether classes should be pruned in the underlying classpool.
+    * This only returns value for the {@link ConfigurationProperties#PRUNE} system
+    * property on startup. At runtime use {@link ClassPoolRegistry#isPrune()}
+    * @return The prune flag
+    */
+   public boolean isPrune();
+
+   /**
     * Gets a list of annotation type names that should be checked in RuntimeInvisible(Parameter)Annotations
     * @return the annotation types to be checked 
     */
@@ -152,39 +149,4 @@
     * @param maintainMethodInterceptors whether Advisor.methodinterceptors should be maintained
     */
    void setMaintainAdvisorMethodInterceptors(boolean maintainMethodInterceptors);
-
-   /**
-    * Gets the classloader scoping policy. This is normally only used when running in a managed environment 
-    * such as JBoss Application Server
-    * @return The classloader scoping policy
-    */
-   //TODO SPI interface needed for AOPClassLoaderScopingPolicy
-   AOPClassLoaderScopingPolicy getClassLoaderScopingPolicy();
-
-   /**
-    * Sets the classloader scoping policy. This is normally only used when running in a managed environment 
-    * such as JBoss Application Server.
-    * This should only get set on startup, subsequent attempts to change this are ignored.
-    * @param classLoaderScopingPolicy The classloader scoping policy
-    */
-   //TODO SPI interface needed for AOPClassLoaderScopingPolicy
-   void setClassLoaderScopingPolicy(AOPClassLoaderScopingPolicy classLoaderScopingPolicy);
-
-   /**
-    * Gets the classloader validation. This is normally only used whhen running in a managed environment 
-    * such as JBoss Application Server.
-    * @return The classloader validation
-    */
-   //TODO SPI interface needed for ClassLoaderValidation
-   ClassLoaderValidation getClassLoaderValidator();
-
-   /**
-    * Sets the classloader validation. This is normally only used whhen running in a managed environment 
-    * such as JBoss Application Server
-    * This should only get set on startup, subsequent attempts to change this are ignored.
-    * @param classLoaderValidator The classloader validation
-    */
-   //TODO SPI interface needed for ClassLoaderValidation
-   void setClassLoaderValidator(ClassLoaderValidation classLoaderValidator);
-
 }

Copied: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ConfigurationAware.java (from rev 84506, projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java)
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ConfigurationAware.java	                        (rev 0)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/ConfigurationAware.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -0,0 +1,40 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file 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.spi;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ConfigurationAware
+{
+   /**
+    * Sets the confiuration once initialised. This method can only be called by AOPSystem and
+    * should only be called once
+    * @param system The calling AOPSystem
+    * @param configuration The weaver set. This is guaranteed not-null
+    * @throws IllegalStateException if the configuration is already set
+    */
+   void setConfiguration(AOPSystem system, Configuration configuration);
+
+}

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/Weaver.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/Weaver.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/Weaver.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -30,7 +30,7 @@
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public interface Weaver extends Translator
+public interface Weaver extends Translator, ConfigurationAware, ClassPoolRegistryAware
 {
    /**
     * Sets the AOPLock. This method can only be called by AOPSystem and
@@ -41,7 +41,6 @@
     */
    void setAOPLock(AOPSystem system, AOPLock lock);
    
-
    /**
     * Entry point for weaving a class
     * @param className The name of the class we are loading

Copied: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/WeaverAware.java (from rev 84506, projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java)
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/WeaverAware.java	                        (rev 0)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/WeaverAware.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -0,0 +1,40 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file 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.spi;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface WeaverAware
+{
+   /**
+    * Sets the weaver once initialised. This method can only be called by AOPSystem and
+    * should only be called once
+    * @param system The calling AOPSystem
+    * @param Weaver The weaver set. This is guaranteed not-null
+    * @throws IllegalStateException if the weaver is already set
+    */
+   void setWeaver(AOPSystem system, Weaver weaver);
+
+}

Copied: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/temp/Internal.java (from rev 84506, projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java)
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/temp/Internal.java	                        (rev 0)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/temp/Internal.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -0,0 +1,35 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file 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.spi.temp;
+
+/**
+ * Annotation to help refactoring. Used to mark classes and spi methods that are only for internal use.
+ * If the class is a parameter/return for an spi method then it should be possible to just change that class
+ * into an interface in the spi package + an impl class in the plugins package 
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public @interface Internal 
+{
+
+}

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/AOPTransformer.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/AOPTransformer.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/AOPTransformer.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -25,8 +25,8 @@
 import java.lang.instrument.IllegalClassFormatException;
 import java.security.ProtectionDomain;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.instrument.JoinPointGenerator;
+import org.jboss.aop.spi.AOPSystem;
 
 /**
  * Comment
@@ -84,7 +84,7 @@
       try
       {
          //Make sure that we use the correct classloader, in order to get the correct domain if it is a scoped loader
-         return AspectManager.instance(loader).transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
+         return AOPSystem.getWeaver().transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
       }
       catch (Exception e)
       {

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/Agent.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/Agent.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/Agent.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -24,6 +24,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.DynamicAOPStrategy;
 import org.jboss.aop.HotSwapStrategy;
+import org.jboss.aop.spi.AOPSystem;
 
 import java.lang.instrument.Instrumentation;
 
@@ -46,15 +47,15 @@
    {
       instrumentation = inst;
       StandaloneClassPoolFactory factory = new StandaloneClassPoolFactory(); 
-      AspectManager.setClassPoolFactory(factory);
+      AOPSystem.getClassPoolRegistry().setClassPoolFactory(factory);
       // necessary for configuration
       AspectManager.instance();
       if (agentArgs != null && agentArgs.indexOf("-hotSwap") != -1)
       {
          // setting dynamic aop strategy: hot swap classes through InstrumentationAdapter
          DynamicAOPStrategy strategy = new HotSwapStrategy(new InstrumentationAdapter(inst));
-         AspectManager.instance().setDynamicAOPStrategy(strategy);
-         AspectManager.setPrune(false); // no prune 
+         AOPSystem.getWeaver().setDynamicAOPStrategy(strategy);
+         AOPSystem.getClassPoolRegistry().setPrune(false);// no prune
       }
       inst.addTransformer(new AOPTransformer());
    }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/Compiler.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/Compiler.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/Compiler.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -389,7 +389,7 @@
          System.out.println("[warning] Trying to compile " + info.getFile() + " and found it also within " + classUrl.getFile() + " will not proceed. ");
          return;
       }
-      byte[] bytes = AspectManager.instance().transform(loader, info.getClassName(), null, null, null);
+      byte[] bytes = AOPSystem.getWeaver().transform(loader, info.getClassName(), null, null, null);
       if (bytes == null)
       {
          if (verbose) System.out.println("[no comp needed] " + info.getFile());

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/util/ReflectToJavassist.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/util/ReflectToJavassist.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/util/ReflectToJavassist.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -21,6 +21,10 @@
   */
 package org.jboss.aop.util;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
 import javassist.ClassPool;
 import javassist.CtClass;
 import javassist.CtConstructor;
@@ -28,12 +32,8 @@
 import javassist.CtMethod;
 import javassist.NotFoundException;
 
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.spi.AOPSystem;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
 /**
  * Comment
  *
@@ -45,7 +45,7 @@
 {
    public static CtClass classToJavassist(Class<?> clazz) throws NotFoundException
    {
-      ClassPool pool = AspectManager.instance().findClassPool(clazz);
+      ClassPool pool = AOPSystem.getClassPoolRegistry().findClassPool(clazz);
       CtClass ct = pool.get(clazz.getName());
       return ct;
    }

Modified: projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/ScenarioLoader.java
===================================================================
--- projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/ScenarioLoader.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/ScenarioLoader.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -30,6 +30,7 @@
 import java.util.Properties;
 
 import org.jboss.aop.AspectManager;
+import org.jboss.aop.spi.AOPSystem;
 
 /**
  * Loads the scenario classes using a class loader. This assures that the scenario to
@@ -189,6 +190,6 @@
     */
    public void removeClassLoaderFromAspectManager()
    {
-      AspectManager.instance().unregisterClassLoader(classLoader);
+      AOPSystem.getClassPoolRegistry().unregisterClassLoader(classLoader);
    }
 }
\ No newline at end of file

Modified: projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/scenario/ScenarioRunner.java
===================================================================
--- projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/scenario/ScenarioRunner.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/jdk15/dynamic/common/scenario/ScenarioRunner.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -36,6 +36,7 @@
 import org.jboss.aop.advice.AdviceBinding;
 import org.jboss.aop.classpool.AOPClassPool;
 import org.jboss.aop.pointcut.ast.ParseException;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.test.aop.jdk15.dynamic.common.BindingInterceptor;
 import org.jboss.test.aop.jdk15.dynamic.common.InstanceInterceptor;
 import org.jboss.test.aop.jdk15.dynamic.common.POJOWrappingInfo;
@@ -325,7 +326,7 @@
     */
    private static void loadPOJOData()
    {
-      Map<ClassLoader, ClassPool> cls = AspectManager.getRegisteredCLs();
+      Map<ClassLoader, ClassPool> cls = AOPSystem.getClassPoolRegistry().getRegisteredCLs();
       AOPClassPool classPool = (AOPClassPool) cls.get(POJO.class.getClassLoader());
       try
       {

Modified: projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/unit/spi/AOPSystemUnitTestCase.java
===================================================================
--- projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/unit/spi/AOPSystemUnitTestCase.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/unit/spi/AOPSystemUnitTestCase.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -22,8 +22,11 @@
 package org.jboss.test.aop.unit.spi;
 
 import org.jboss.aop.spi.AOPSystem;
+import org.jboss.aop.spi.ClassPoolRegistry;
 import org.jboss.aop.spi.Configuration;
 import org.jboss.aop.spi.ConfigurationProperties;
+import org.jboss.aop.spi.Manager;
+import org.jboss.aop.spi.Weaver;
 
 import junit.framework.TestCase;
 
@@ -37,11 +40,32 @@
    protected void setUp() throws Exception
    {
       System.setProperty(ConfigurationProperties.VERBOSE, "true");
+      System.setProperty(ConfigurationProperties.PRUNE, "false");
    }
 
    public void testCanGetConfiuration()
    {
       Configuration config = AOPSystem.getConfiguration();
       assertNotNull(config);
+      assertTrue(config.isVerbose());
    }
+   
+   public void testCanGetRootManager()
+   {
+      Manager manager = AOPSystem.getRootManager();
+      assertNotNull(manager);
+   }
+   
+   public void testCanGetWeaver()
+   {
+      Weaver weaver = AOPSystem.getWeaver();
+      assertNotNull(weaver);
+   }
+   
+   public void testCanGetClassPoolRegistry()
+   {
+      ClassPoolRegistry registry = AOPSystem.getClassPoolRegistry();
+      assertNotNull(registry);
+      assertFalse(registry.isPrune());
+   }
 }

Modified: projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/unit/spi/ConfigurationUnitTestCase.java
===================================================================
--- projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/unit/spi/ConfigurationUnitTestCase.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/unit/spi/ConfigurationUnitTestCase.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -461,7 +461,27 @@
       }
       
    }
+
+   public void testPruneNotSet()
+   {
+      Configuration conf = createConfiguration();
+      assertTrue(conf.isPrune());
+   }
    
+   public void testPruneSet()
+   {
+      System.setProperty("jboss.aop.prune", "false");
+      try
+      {
+         Configuration conf = createConfiguration();
+         assertFalse(conf.isPrune());
+      }
+      finally
+      {
+         System.clearProperty("jboss.aop.prune");
+      }
+   }
+   
    private Configuration createConfiguration()
    {
       return new DefaultConfiguration();

Modified: projects/aop/branches/createspi/asintegration-core/src/main/java/org/jboss/aop/asintegration/core/AspectManagerServiceDelegate.java
===================================================================
--- projects/aop/branches/createspi/asintegration-core/src/main/java/org/jboss/aop/asintegration/core/AspectManagerServiceDelegate.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-core/src/main/java/org/jboss/aop/asintegration/core/AspectManagerServiceDelegate.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -57,6 +57,7 @@
 import org.jboss.aop.introduction.InterfaceIntroduction;
 import org.jboss.aop.pointcut.Pointcut;
 import org.jboss.aop.spi.AOPSystem;
+import org.jboss.aop.spi.ClassPoolRegistry;
 import org.jboss.aop.spi.Configuration;
 import org.jboss.logging.Logger;
 import org.jboss.system.server.ServerConfig;
@@ -71,7 +72,8 @@
 public abstract class AspectManagerServiceDelegate
 {
    //TODO should be injected?
-   Configuration configuration = AOPSystem.getConfiguration();
+   private Configuration configuration = AOPSystem.getConfiguration();
+   private ClassPoolRegistry classPoolRegistry = AOPSystem.getClassPoolRegistry();
    
    Logger log = Logger.getLogger(AspectManagerServiceDelegate.class);
    
@@ -241,9 +243,9 @@
       // Validate the the tmp dir exists
       if (tmpClassesDir.exists() == false && tmpClassesDir.mkdirs() == false)
          throw new FileNotFoundException("Failed to create tmpClassesDir: " + tmpClassesDir.getAbsolutePath());
-      AspectManager.setClassPoolFactory(createFactory());
+      AOPSystem.getClassPoolRegistry().setClassPoolFactory(createFactory());
 
-      configuration.setClassLoaderValidator(createClassLoaderValidation());
+      classPoolRegistry.setClassLoaderValidator(createClassLoaderValidation());
       // Add the tmp classes dir to our UCL classpath
 
       Deployment.searchClasspath = false; // turn off dynamic finding of DDs
@@ -257,7 +259,7 @@
       {
          attachTranslator();
       }
-      configuration.setClassLoaderScopingPolicy(integration.createAOPClassLoaderScopingPolicy());
+      classPoolRegistry.setClassLoaderScopingPolicy(integration.createAOPClassLoaderScopingPolicy());
 
       deployBootstrapXml();
       deployBaseXml();
@@ -433,7 +435,7 @@
             try
             {
                //Make sure that we use the correct classloader, in order to get the correct domain if it is a scoped loader
-               return AspectManager.instance(loader).translate(classname, loader, classBytes);
+               return AOPSystem.getWeaver().translate(classname, loader, classBytes);
             }
             catch (Exception e)
             {
@@ -450,12 +452,12 @@
 
    public boolean getPrune()
    {
-      return AspectManager.getPrune();
+      return configuration.isPrune();
    }
 
    public void setPrune(boolean prune)
    {
-      AspectManager.setPrune(prune);
+      AOPSystem.getClassPoolRegistry().setPrune(prune);
    }
 
    public String getExclude()
@@ -733,7 +735,7 @@
 
    public String registeredClassLoaders()
    {
-      Map<ClassLoader, ClassPool> loaders = AspectManager.getRegisteredCLs();
+      Map<ClassLoader, ClassPool> loaders = AOPSystem.getClassPoolRegistry().getRegisteredCLs();
       StringBuffer buffer = new StringBuffer("");
       for (ClassLoader loader : loaders.keySet())
       {

Modified: projects/aop/branches/createspi/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/ScopedJBossClassPool.java
===================================================================
--- projects/aop/branches/createspi/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/ScopedJBossClassPool.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-jmx/src/main/java/org/jboss/aop/asintegration/jboss4/ScopedJBossClassPool.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -25,19 +25,19 @@
 import java.net.URL;
 import java.util.ArrayList;
 
-import org.jboss.aop.AspectManager;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.aop.asintegration.jboss4.LoaderRepositoryUrlUtil.UrlInfo;
 import org.jboss.aop.classpool.AOPClassPool;
 import org.jboss.aop.classpool.AOPClassPoolRepository;
-import org.jboss.aop.asintegration.jboss4.LoaderRepositoryUrlUtil.UrlInfo;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
 import org.jboss.mx.loading.LoaderRepository;
 import org.jboss.mx.loading.RepositoryClassLoader;
 
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
 /**
  * A classpool in JBoss backed by a scoped (HierarchicalLoaderRepository) loader repository
  * 
@@ -194,18 +194,18 @@
    
    private ClassPool getCorrectPoolForResource(String classname, URL url)
    {
-      synchronized(AspectManager.getRegisteredCLs())
+      synchronized(AOPSystem.getClassPoolRegistry().getRegisteredCLs())
       {
          //JBoss 5 has an extra NoAnnotationURLCLassLoader that is not on the default path, make sure that that is checked at the end
          //FIXME This needs revisiting/removing once the 
          ArrayList<AOPClassPool> noAnnotationURLClassLoaderPools = null;
          String resource = url.toString();
-         for(ClassPool pool : AspectManager.getRegisteredCLs().values())
+         for(ClassPool pool : AOPSystem.getClassPoolRegistry().getRegisteredCLs().values())
          {
             AOPClassPool candidate = (AOPClassPool)pool;
             if (candidate.isUnloadedClassLoader())
             {
-               AspectManager.instance().unregisterClassLoader(candidate.getClassLoader());
+               AOPSystem.getClassPoolRegistry().unregisterClassLoader(candidate.getClassLoader());
                continue;
             }
             

Modified: projects/aop/branches/createspi/asintegration-jmx/src/main/java/org/jboss/aop/deployment/AspectDeployer.java
===================================================================
--- projects/aop/branches/createspi/asintegration-jmx/src/main/java/org/jboss/aop/deployment/AspectDeployer.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-jmx/src/main/java/org/jboss/aop/deployment/AspectDeployer.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -36,6 +36,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.AspectXmlLoader;
 import org.jboss.aop.asintegration.jboss4.ScopedRepositoryClassLoaderHelper;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.deployment.DeploymentException;
 import org.jboss.deployment.DeploymentInfo;
 import org.jboss.deployment.DeploymentState;
@@ -242,7 +243,7 @@
          URL docURL = getDocUrl(di);
          //long start = System.currentTimeMillis();
          AspectXmlLoader.undeployXML(docURL);
-         AspectManager.instance().unregisterClassLoader(di.ucl);
+         AOPSystem.getClassPoolRegistry().unregisterClassLoader(di.ucl);
 
          /*
 //         System.out.println("************************");

Modified: projects/aop/branches/createspi/asintegration-jmx/src/test/java/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java
===================================================================
--- projects/aop/branches/createspi/asintegration-jmx/src/test/java/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-jmx/src/test/java/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -35,8 +35,8 @@
 import javax.management.MBeanServerFactory;
 import javax.management.ObjectName;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.classpool.ucl.JBossUclDelegatingClassPoolFactory;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
 import org.jboss.mx.loading.LoaderRepository;
 import org.jboss.mx.loading.RepositoryClassLoader;
@@ -80,7 +80,7 @@
       try
       {
          MAIN_LOADER_REPOSITORY_OBJECT_NAME = new ObjectName("JMImplementation:name=Default,service=LoaderRepository");
-         AspectManager.setClassPoolFactory(new JBossUclDelegatingClassPoolFactory(new File(".")));
+         AOPSystem.getClassPoolRegistry().setClassPoolFactory(new JBossUclDelegatingClassPoolFactory(new File(".")));
       }
       catch (Exception e)
       {
@@ -162,7 +162,7 @@
    protected ClassPool createGlobalClassPool(URL url) throws Exception
    {
       ClassLoader loader = createGlobalClassLoader(url);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
    
    protected ClassLoader createGlobalClassLoaderWithParent(URL url, ClassLoader parent) throws Exception
@@ -177,7 +177,7 @@
    {
       ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
       ClassLoader loader = createGlobalClassLoaderWithParent(url, parentLoader);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
    
    protected void removeClassLoaderFromRepository(ClassLoader cl)
@@ -200,7 +200,7 @@
          if (cl != null)
          {
             removeClassLoaderFromRepository(cl);
-            AspectManager.instance().unregisterClassLoader(cl);
+            AOPSystem.getClassPoolRegistry().unregisterClassLoader(cl);
             registeredClassLoaders.remove(cl);
             //Delete the temporary directory since running in Eclipse does not do this automatically
             deleteTempDir();
@@ -287,7 +287,7 @@
    protected ClassPool createChildClassPool(URL url, boolean parentFirst) throws Exception
    {
       ClassLoader loader = createChildClassLoader(url, parentFirst);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
    
    protected ClassLoader createChildURLClassLoader(ClassLoader parent, URL url)
@@ -309,7 +309,7 @@
       ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
       ClassLoader cl = createChildURLClassLoader(parentLoader, url);
       registeredClassLoaders.add(cl);
-      return AspectManager.instance().registerClassLoader(cl);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(cl);
    }   
    
    protected ClassPool createChildURLClassPoolParentLast(ClassPool parent, URL url)
@@ -317,7 +317,7 @@
       ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
       ClassLoader cl = createChildURLClassLoaderParentLast(parentLoader, url);
       registeredClassLoaders.add(cl);
-      ClassPool pool = AspectManager.instance().registerClassLoader(cl);
+      ClassPool pool = AOPSystem.getClassPoolRegistry().registerClassLoader(cl);
       pool.childFirstLookup = true;
       return pool;
    }   

Modified: projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/AOPClassLoaderInitializer.java
===================================================================
--- projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/AOPClassLoaderInitializer.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/AOPClassLoaderInitializer.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -38,7 +38,7 @@
 {
    public static Domain initializeForUnit(DeploymentUnit unit)
    {
-      AOPClassLoaderScopingPolicyWithRegistry policy = (AOPClassLoaderScopingPolicyWithRegistry)AOPSystem.getConfiguration().getClassLoaderScopingPolicy();
+      AOPClassLoaderScopingPolicyWithRegistry policy = (AOPClassLoaderScopingPolicyWithRegistry)AOPSystem.getClassPoolRegistry().getClassLoaderScopingPolicy();
       registerLoaders(policy, unit);
       Domain domain = getDomain(policy.getRegistry(), unit);
       
@@ -47,12 +47,12 @@
 
    public static void unregisterLoaders(AspectManager manager, DeploymentUnit unit)
    {
-      AOPClassLoaderScopingPolicyWithRegistry policy = (AOPClassLoaderScopingPolicyWithRegistry)AOPSystem.getConfiguration().getClassLoaderScopingPolicy();
+      AOPClassLoaderScopingPolicyWithRegistry policy = (AOPClassLoaderScopingPolicyWithRegistry)AOPSystem.getClassPoolRegistry().getClassLoaderScopingPolicy();
       DomainRegistry registry = policy.getRegistry();
       if (unit.isTopLevel() || unit.getParent().getClassLoader() != unit.getClassLoader())
       {
          registry.cleanupLoader(unit.getClassLoader());
-         manager.unregisterClassLoader(unit.getClassLoader());
+         AOPSystem.getClassPoolRegistry().unregisterClassLoader(unit.getClassLoader());
       }
    }
    

Modified: projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/DefaultTranslator.java
===================================================================
--- projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/DefaultTranslator.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/DefaultTranslator.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -23,7 +23,7 @@
 
 import java.security.ProtectionDomain;
 
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.util.loading.Translator;
 
 /**
@@ -33,18 +33,12 @@
  */
 public class DefaultTranslator implements Translator
 {
-   AspectManager manager;
    boolean translate;
    
-   public DefaultTranslator(AspectManager manager)
-   {
-      this.manager = manager;
-   }
-
    public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
          ProtectionDomain protectionDomain, byte[] classfileBuffer) throws Exception
    {
-      return manager.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
+      return AOPSystem.getWeaver().transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
    }
 
    public void unregisterClassLoader(ClassLoader loader)

Modified: projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5ClassPoolFactory.java
===================================================================
--- projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5ClassPoolFactory.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5ClassPoolFactory.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -28,9 +28,9 @@
 import javassist.scopedpool.ScopedClassPoolFactory;
 import javassist.scopedpool.ScopedClassPoolRepository;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.classpool.AOPClassPool;
 import org.jboss.aop.classpool.AbstractJBossClassPoolFactory;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloading.spi.RealClassLoader;
@@ -88,7 +88,7 @@
    private ClassPool getParentUnitClassPool(ClassLoader cl)
    {
       ClassLoader parent = registry.getParentUnitLoader(cl);
-      return AspectManager.instance().registerClassLoader(parent);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(parent);
    }
    
 

Modified: projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5Integration.java
===================================================================
--- projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5Integration.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/JBoss5Integration.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -33,7 +33,6 @@
 import javassist.scopedpool.ScopedClassPoolFactory;
 import javassist.scopedpool.ScopedClassPoolRepository;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.asintegration.JBossIntegration;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloading.spi.RealClassLoader;
@@ -151,7 +150,7 @@
    
    public void attachDeprecatedTranslator()
    {
-      ClassLoaderSystem.getInstance().setTranslator(new DefaultTranslator(AspectManager.getTopLevelAspectManager()));      
+      ClassLoaderSystem.getInstance().setTranslator(new DefaultTranslator());      
    }
 
    public void detachDeprecatedTranslator()

Modified: projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java
===================================================================
--- projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/ScopedJBoss5ClassPool.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -34,6 +34,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.classpool.AOPClassPool;
 import org.jboss.aop.classpool.AOPClassPoolRepository;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.Loader;
 import org.jboss.classloading.spi.RealClassLoader;
@@ -302,18 +303,18 @@
    
    private ClassPool getCorrectPoolForResource(String classname, String resourceName, URL url, boolean trace)
    {
-      synchronized(AspectManager.getRegisteredCLs())
+      synchronized(AOPSystem.getClassPoolRegistry().getRegisteredCLs())
       {
          //JBoss 5 has an extra NoAnnotationURLCLassLoader that is not on the default path, make sure that that is checked at the end
          //FIXME This needs revisiting/removing once the 
          ArrayList<ClassPool> noAnnotationURLClassLoaderPools = null;
                  
-         for(Iterator<ClassPool> it = AspectManager.getRegisteredCLs().values().iterator() ; it.hasNext() ; )
+         for(Iterator<ClassPool> it = AOPSystem.getClassPoolRegistry().getRegisteredCLs().values().iterator() ; it.hasNext() ; )
          {
             AOPClassPool candidate = (AOPClassPool)it.next();
             if (candidate.isUnloadedClassLoader())
             {
-               AspectManager.instance().unregisterClassLoader(candidate.getClassLoader());
+               AOPSystem.getClassPoolRegistry().unregisterClassLoader(candidate.getClassLoader());
                continue;
             }
             
@@ -373,7 +374,7 @@
       //Rememeber that the stuff in jboss5/lib goes in a child classloader of the default classloader. We need
       //to make this the parent of the temp classloader
       ClassLoader aopLoader = AspectManager.class.getClassLoader();
-      ClassPool pool = AspectManager.instance().registerClassLoader(aopLoader);
+      ClassPool pool = AOPSystem.getClassPoolRegistry().registerClassLoader(aopLoader);
       return AOPClassPool.createAOPClassPool(pool, AOPClassPoolRepository.getInstance());
    }
    

Modified: projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/VFSClassLoaderScopingPolicy.java
===================================================================
--- projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/VFSClassLoaderScopingPolicy.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/VFSClassLoaderScopingPolicy.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -27,6 +27,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.Domain;
 import org.jboss.aop.classpool.ExtraClassPoolFactoryParameters;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.classloading.spi.dependency.Module;
 import org.jboss.logging.Logger;
 
@@ -54,7 +55,7 @@
       ExtraClassPoolFactoryParameters.pushThreadProperties(properties);
       try
       {
-         AspectManager.instance().registerClassLoader(loader); //Ends up in classpool factory create method
+         AOPSystem.getClassPoolRegistry().registerClassLoader(loader); //Ends up in classpool factory create method
       }
       finally
       {

Modified: projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -23,8 +23,8 @@
 
 import javassist.ClassPool;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.classpool.ClassPoolToClassPoolDomainAdapter;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.classloader.spi.base.BaseClassLoaderDomain;
 
 /**
@@ -37,6 +37,6 @@
    @Override
    public ClassPool initialiseParentClassLoader()
    {
-      return AspectManager.instance().registerClassLoader(BaseClassLoaderDomain.class.getClassLoader());
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(BaseClassLoaderDomain.class.getClassLoader());
    }
 }

Modified: projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java
===================================================================
--- projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -26,13 +26,13 @@
 import javassist.scopedpool.ScopedClassPoolFactory;
 import javassist.scopedpool.ScopedClassPoolRepository;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.asintegration.jboss5.DomainRegistry;
 import org.jboss.aop.classpool.AbstractJBossDelegatingClassPoolFactory;
 import org.jboss.aop.classpool.ClassPoolDomain;
 import org.jboss.aop.classpool.ClassPoolDomainRegistry;
 import org.jboss.aop.classpool.ClassPoolToClassPoolDomainAdapter;
 import org.jboss.aop.classpool.NonDelegatingClassPool;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloading.spi.RealClassLoader;
@@ -100,7 +100,7 @@
             ClassLoader parentUnitLoader = registry.getParentUnitLoader(cl);
             if (parentUnitLoader != null)
             {
-               ClassPool parentUnitPool = AspectManager.getTopLevelAspectManager().registerClassLoader(parentUnitLoader);
+               ClassPool parentUnitPool = AOPSystem.getClassPoolRegistry().registerClassLoader(parentUnitLoader);
                parentPoolDomain = new ClassPoolToClassPoolDomainAdapter(parentUnitPool);
             }
          }

Modified: projects/aop/branches/createspi/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithReplaceReferencesTestCase.java
===================================================================
--- projects/aop/branches/createspi/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithReplaceReferencesTestCase.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithReplaceReferencesTestCase.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -38,9 +38,9 @@
 import javassist.Modifier;
 import junit.framework.Test;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.classpool.AOPClassPool;
 import org.jboss.aop.classpool.AOPClassPoolRepository;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.classloading.spi.DomainClassLoader;
 import org.jboss.test.AbstractTestDelegate;
 import org.jboss.util.loading.Translator;
@@ -202,7 +202,7 @@
             return null;
          }
 
-         ClassPool pool = AspectManager.instance().registerClassLoader(loader);
+         ClassPool pool = AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
          CtClass clazz = pool.get(className);
          if (className.endsWith("Caller"))
          {

Modified: projects/aop/branches/createspi/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
===================================================================
--- projects/aop/branches/createspi/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java	2009-02-20 17:57:17 UTC (rev 84563)
+++ projects/aop/branches/createspi/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java	2009-02-20 18:21:08 UTC (rev 84564)
@@ -35,9 +35,9 @@
 import javassist.CtClass;
 import junit.framework.Test;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.asintegration.jboss5.VFSClassLoaderDomainRegistry;
 import org.jboss.aop.classpool.jbosscl.JBossClDelegatingClassPoolFactory;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
 import org.jboss.classloader.plugins.filter.CombiningClassFilter;
 import org.jboss.classloader.plugins.filter.PatternClassFilter;
@@ -122,7 +122,7 @@
    {
       domainRegistry = new VFSClassLoaderDomainRegistry();
       
-      AspectManager.setClassPoolFactory(new JBossClDelegatingClassPoolFactory(domainRegistry));
+      AOPSystem.getClassPoolRegistry().setClassPoolFactory(new JBossClDelegatingClassPoolFactory(domainRegistry));
       VFS.init();
    }
 
@@ -507,7 +507,7 @@
    protected ClassPool createClassPool(Result result, String name, boolean importAll, URL... urls) throws Exception
    {
       ClassLoader loader = createClassLoader(result, name, importAll, urls);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
    
    protected ClassPool createClassPool(String name, BundleInfoBuilder builder, URL... urls) throws Exception
@@ -529,7 +529,7 @@
    {
       TestVFSClassLoaderFactory factory = TestVFSClassLoaderFactoryFactory.createClassLoaderFactory(name, importAll, builder, urls);
       ClassLoader loader = createClassLoader(result, factory);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
 
    protected ClassPool createChildDomainParentFirstClassPool(String name, String domainName, boolean importAll, URL... urls) throws Exception
@@ -540,7 +540,7 @@
    protected ClassPool createChildDomainParentFirstClassPool(Result result, String name, String domainName, boolean importAll, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentFirstClassLoader(result, name, domainName, importAll, urls);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
    
    protected ClassPool createChildDomainParentFirstClassPool(String name, String domainName, boolean importAll, ClassPool parent, URL... urls) throws Exception
@@ -551,7 +551,7 @@
    protected ClassPool createChildDomainParentFirstClassPool(Result result, String name, String domainName, boolean importAll, ClassPool parent, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentFirstClassLoader(result, name, domainName, importAll, parent.getClassLoader(), urls);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
    
    protected ClassPool createChildDomainParentFirstClassPool(String name, String domainName, String parentDomainName, boolean importAll, URL... urls) throws Exception
@@ -562,7 +562,7 @@
    protected ClassPool createChildDomainParentFirstClassPool(Result result, String name, String domainName, String parentDomainName, boolean importAll, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentFirstClassLoader(result, name, domainName, parentDomainName, importAll, urls);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
 
    protected ClassPool createChildDomainParentLastClassPool(String name, String domainName, boolean importAll, URL... urls) throws Exception
@@ -573,7 +573,7 @@
    protected ClassPool createChildDomainParentLastClassPool(Result result, String name, String domainName, boolean importAll, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentLastClassLoader(result, name, domainName, importAll, urls);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
 
    protected ClassPool createChildDomainParentLastClassPool(String name, String domainName, boolean importAll, ClassPool parent, URL... urls) throws Exception
@@ -584,7 +584,7 @@
    protected ClassPool createChildDomainParentLastClassPool(Result result, String name, String domainName, boolean importAll, ClassPool parent, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentLastClassLoader(result, name, domainName, importAll, parent.getClassLoader(), urls);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
    
    protected ClassPool createChildDomainParentLastClassPool(String name, String domainName, String parentDomainName, boolean importAll, URL... urls) throws Exception
@@ -595,7 +595,7 @@
    protected ClassPool createChildDomainParentLastClassPool(Result result, String name, String domainName, String parentDomainName, boolean importAll, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentLastClassLoader(result, name, domainName, parentDomainName, importAll, urls);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
    
    protected ClassPool createChildDomainParentFirstClassPool(String name, String domainName, String parentDomainName, BundleInfoBuilder builder, URL... urls) throws Exception
@@ -606,7 +606,7 @@
    protected ClassPool createChildDomainParentFirstClassPool(Result result, String name, String domainName, String parentDomainName, BundleInfoBuilder builder, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentFirstClassLoader(result, name, domainName, parentDomainName, builder, urls);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
 
    protected ClassPool createChildDomainParentFirstClassPool(String name, String domainName, BundleInfoBuilder builder, URL... urls) throws Exception
@@ -617,7 +617,7 @@
    protected ClassPool createChildDomainParentFirstClassPool(Result result, String name, String domainName, BundleInfoBuilder builder, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentFirstClassLoader(result, name, domainName, builder, urls);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
 
    protected ClassPool createChildDomainParentLastClassPool(String name, String domainName, BundleInfoBuilder builder, URL... urls) throws Exception
@@ -628,7 +628,7 @@
    protected ClassPool createChildDomainParentLastClassPool(Result result, String name, String domainName, BundleInfoBuilder builder, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentLastClassLoader(result, name, domainName, builder, urls);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
 
    protected ClassPool createChildURLClassPool(ClassPool parent, URL url)
@@ -639,7 +639,7 @@
          parentLoader = parent.getClassLoader();
       }
       ClassLoader loader = createChildURLClassLoader(parentLoader, url);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
    
    protected void registerModule(ClassLoader loader, Module module)
@@ -722,7 +722,7 @@
       if (pool != null)
       {
          ClassLoader loader = pool.getClassLoader();
-         AspectManager.instance().unregisterClassLoader(loader);
+         AOPSystem.getClassPoolRegistry().unregisterClassLoader(loader);
          if (loader != null)
          {
             unregisterClassLoader(loader);
@@ -815,7 +815,7 @@
    protected ClassPool assertClassPool(TestVFSClassLoaderFactory factory) throws Exception
    {
       ClassLoader loader = assertClassLoader(factory);
-      return AspectManager.instance().registerClassLoader(loader);
+      return AOPSystem.getClassPoolRegistry().registerClassLoader(loader);
    }
    
    protected Class<?> assertLoadClass(String name, ClassLoader initiating) throws Exception




More information about the jboss-cvs-commits mailing list