[jboss-cvs] JBossAS SVN: r84505 - in projects/aop/branches/createspi: aop/src/main/java/org/jboss/aop/advice and 14 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Feb 20 06:50:52 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-02-20 06:50:52 -0500 (Fri, 20 Feb 2009)
New Revision: 84505

Removed:
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/AbstractManager.java
Modified:
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Advisor.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AdvisorFactory.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectAnnotationLoader.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectManager.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectXmlLoader.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/ClassContainer.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/Deployment.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/GeneratedClassAdvisor.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/MethodMatchInfo.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/advice/AdviceBinding.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/AspectFactoryWithClassLoaderSupport.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/ClassifiedBindingAndPointcutCollection.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/GenericAspectFactory.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/annotation/AdviceMethodFactory.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/annotation/PortableAnnotationElement.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/CallerTransformer.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/ClassicInstrumentor.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/FieldAccessTransformer.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/instrument/InstrumentorFactory.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/JoinPointGenerator.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/JoinpointSimpleClassifier.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/TransformerFactory.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/introduction/AnnotationIntroduction.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/LoadInterceptedClassesStrategy.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/pointcut/MatcherStrategy.java
   projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/container/GeneratedAOPProxyFactory.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/Configuration.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/JavassistToReflect.java
   projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/container/ContainerTestCase.java
   projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/stress/FileScenarioPropertyReader.java
   projects/aop/branches/createspi/asintegration-core/src/main/java/org/jboss/aop/asintegration/core/AspectManagerServiceDelegate.java
   projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/AOPClassLoaderInitializer.java
Log:
Add Weaver, Configuration and Manager interfaces

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Advisor.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Advisor.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Advisor.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -73,6 +73,8 @@
 import org.jboss.aop.metadata.MethodMetaData;
 import org.jboss.aop.metadata.SimpleMetaData;
 import org.jboss.aop.pointcut.PointcutMethodMatch;
+import org.jboss.aop.spi.AOPSystem;
+import org.jboss.aop.spi.Configuration;
 import org.jboss.aop.util.JoinPointComparator;
 import org.jboss.aop.util.UnmodifiableEmptyCollections;
 import org.jboss.aop.util.logging.AOPLogger;
@@ -93,6 +95,7 @@
  */
 public abstract class Advisor
 {
+   
    /**
     * Returns the {@code MethodInfo} that represents the execution of the method
     * identified by {@code hash}.
@@ -144,6 +147,8 @@
       }
    }
 
+   protected final Configuration config = AOPSystem.getConfiguration();
+   
    /** Read/Write lock to be used when lazy creating the collections */
    protected Object lazyCollectionLock = new Object();
 
@@ -1335,7 +1340,7 @@
          if (match != null && match.isMatch())
          {
             adviceBindings.add(binding);
-            if (AspectManager.verbose)
+            if (AOPSystem.getConfiguration().isVerbose())
             {
                /*
                RepositoryClassLoader loader = (RepositoryClassLoader)clazz.getClassLoader();
@@ -1353,7 +1358,7 @@
             binding.addAdvisor(this);
             MethodMatchInfo info = methodInfos.getMatchInfo(keys[i]);
             info.addMatchedBinding(binding, match);
-            if (AspectManager.maintainAdvisorMethodInterceptors)
+            if (config.isMaintainAdvisorMethodInterceptors())
             {
                methodInterceptors.put(keys[i], info);
             }
@@ -1371,14 +1376,14 @@
 
          if (match != null && match.isMatch())
          {
-            if (AspectManager.verbose)
+            if (AOPSystem.getConfiguration().isVerbose())
             {
                logger.debug("removing matched binding: "+method.toString());
             }
             MethodMatchInfo info = methodInfos.getMatchInfo(keys[i]);
             info.removeMatchedBinding(binding, match);
             info.getInfo().clear();
-            if (AspectManager.maintainAdvisorMethodInterceptors)
+            if (config.isMaintainAdvisorMethodInterceptors())
             {
                methodInterceptors.put(keys[i], info);
             }
@@ -1399,7 +1404,7 @@
          if ((!write && binding.getPointcut().matchesGet(this, field))
          || (write && binding.getPointcut().matchesSet(this, field)))
          {
-            if (AspectManager.verbose) logger.debug("Removing field, matched " + ((write) ? "write" : "read") + " binding: " + field);
+            if (AOPSystem.getConfiguration().isVerbose()) logger.debug("Removing field, matched " + ((write) ? "write" : "read") + " binding: " + field);
             fieldInfos[i].clear();
             
             for(AdviceBinding ab : bindings)
@@ -1432,7 +1437,7 @@
             Constructor<?> constructor = constructors[i];
             if (binding.getPointcut().matchesExecution(this, constructor))
             {
-               if (AspectManager.verbose) logger.debug("Removing constructor, matched binding: " + constructor);
+               if (AOPSystem.getConfiguration().isVerbose()) logger.debug("Removing constructor, matched binding: " + constructor);
                constructorInfos[i].clear();
                for(AdviceBinding ab : bindingCol.getConstructorExecutionBindings())
                {
@@ -1442,7 +1447,7 @@
                      pointcutResolved(constructorInfos[i], ab, new ConstructorJoinpoint(constructor));
                   }
                }
-               if (AspectManager.maintainAdvisorMethodInterceptors)
+               if (config.isMaintainAdvisorMethodInterceptors())
                {
                   this.constructorInterceptors[i] = constructorInfos[i].getInterceptors();
                }
@@ -1463,7 +1468,7 @@
             Constructor<?> constructor = info.getConstructor();
             if (binding.getPointcut().matchesConstruction(this, constructor))
             {
-               if (AspectManager.verbose) logger.debug("Removing construction, matched binding: " + constructor);
+               if (AOPSystem.getConfiguration().isVerbose()) logger.debug("Removing construction, matched binding: " + constructor);
                constructionInfos[i].clear();
                for(AdviceBinding ab : bindingCol.getConstructionBindings())
                {
@@ -1473,7 +1478,7 @@
                      pointcutResolved(constructionInfos[i], ab, new ConstructorJoinpoint(constructor));
                   }
                }
-               if (AspectManager.maintainAdvisorMethodInterceptors)
+               if (config.isMaintainAdvisorMethodInterceptors())
                {
                   this.constructionInterceptors[i] = constructionInfos[i].getInterceptors();
                }
@@ -1533,7 +1538,7 @@
    
    protected void finalizeMethodChain()
    {
-      boolean maintain = AspectManager.maintainAdvisorMethodInterceptors;
+      boolean maintain = config.isMaintainAdvisorMethodInterceptors();
       TLongObjectHashMap newMethodInfos = (maintain) ? new TLongObjectHashMap() : null;
       
       long[] keys = methodInfos.keys();
@@ -1854,12 +1859,12 @@
          Constructor<?> constructor = constructors[i];
          if (binding.getPointcut().matchesExecution(this, constructor))
          {
-            if (AspectManager.verbose) logger.debug("constructor matched binding: " + constructor);
+            if (config.isVerbose()) logger.debug("constructor matched binding: " + constructor);
             adviceBindings.add(binding);
             binding.addAdvisor(this);
             pointcutResolved(constructorInfos[i], binding, new ConstructorJoinpoint(constructor));
             // if we must keep track of deprecated fields and the field is already initialized
-            if (AspectManager.maintainAdvisorMethodInterceptors && constructorInterceptors != null)
+            if (config.isMaintainAdvisorMethodInterceptors() && constructorInterceptors != null)
             {
                constructorInterceptors[i] = constructorInfos[i].getInterceptors();
             }
@@ -1877,12 +1882,12 @@
             Constructor<?> constructor = info.getConstructor();
             if (binding.getPointcut().matchesConstruction(this, constructor))
             {
-               if (AspectManager.verbose) logger.debug("construction matched binding: " + constructor);
+               if (config.isVerbose()) logger.debug("construction matched binding: " + constructor);
                adviceBindings.add(binding);
                binding.addAdvisor(this);
                pointcutResolved(info, binding, new ConstructorJoinpoint(constructor));
                // if we must keep track of deprecated fields and the field is already initialized
-               if (AspectManager.maintainAdvisorMethodInterceptors && this.constructionInterceptors != null)
+               if (config.isMaintainAdvisorMethodInterceptors() && this.constructionInterceptors != null)
                {
                   this.constructionInterceptors[i] = constructionInfos[i].getInterceptors();
                }
@@ -1894,7 +1899,7 @@
    /** @deprecated We should just be using xxxxInfos */
    protected void populateInterceptorsFromInfos()
    {
-      if (!AspectManager.maintainAdvisorMethodInterceptors)
+      if (!config.isMaintainAdvisorMethodInterceptors())
       {
          return;
       }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AdvisorFactory.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AdvisorFactory.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AdvisorFactory.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -53,9 +53,9 @@
    private static final Class<?>[] CONSTRUCTOR_SIG = new Class<?>[] {String.class, AspectManager.class};
    
    
-   public static void initialise(String property)
+   public static void initialise(boolean verbose, String property)
    {
-      if (AspectManager.verbose && logger.isDebugEnabled())
+      if (verbose && logger.isDebugEnabled())
       {
          logger.debug("Passed in advisor: " + property);
       }
@@ -86,7 +86,7 @@
       }
       else
       {
-         if (AspectManager.verbose  && logger.isDebugEnabled())
+         if (verbose && logger.isDebugEnabled())
          {
             logger.debug("[debug] Defaulting advisor to: " + ClassAdvisor.class.getName());
          }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectAnnotationLoader.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectAnnotationLoader.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectAnnotationLoader.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -51,6 +51,8 @@
 import org.jboss.aop.pointcut.DynamicCFlow;
 import org.jboss.aop.pointcut.ast.ASTCFlowExpression;
 import org.jboss.aop.pointcut.ast.PointcutExpressionParser;
+import org.jboss.aop.spi.AOPSystem;
+import org.jboss.aop.spi.Configuration;
 import org.jboss.aop.util.MethodHashing;
 import org.jboss.aop.util.logging.AOPLogger;
 
@@ -62,6 +64,7 @@
  */
 public class AspectAnnotationLoader
 {
+   Configuration config = AOPSystem.getConfiguration();
    
    private static final AOPLogger logger = AOPLogger.getLogger(AspectAnnotationLoader.class);
 
@@ -118,7 +121,7 @@
 
    public void deployClassFile(ClassFile cf) throws Exception
    {
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Looking for aspects in: " + cf.getName());
+      if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("Looking for aspects in: " + cf.getName());
       AnnotationsAttribute visible = (AnnotationsAttribute) cf.getAttribute(AnnotationsAttribute.visibleTag);
       if (visible != null)
       {
@@ -163,7 +166,7 @@
    
    public void undeployClassFile(ClassFile cf) throws Exception
    {
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Looking for aspects in: " + cf.getName());
+      if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("Looking for aspects in: " + cf.getName());
       AnnotationsAttribute visible = (AnnotationsAttribute) cf.getAttribute(AnnotationsAttribute.visibleTag);
       if (visible != null)
       {
@@ -189,7 +192,7 @@
       javassist.bytecode.annotation.Annotation info = visible.getAnnotation(Aspect.class.getName());
       if (info != null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("[debug] Found @Aspect in: " + cf.getName());
+         if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("[debug] Found @Aspect in: " + cf.getName());
          Aspect aspect = (Aspect) AnnotationProxy.createProxy(info, Aspect.class);
          Scope scope = aspect.scope();
          
@@ -224,7 +227,7 @@
       javassist.bytecode.annotation.Annotation info = visible.getAnnotation(Aspect.class.getName());
       if (info != null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Undeploying @Aspect in: " + cf.getName());
+         if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("Undeploying @Aspect in: " + cf.getName());
          loaderStrategy.undeployAspect(this, cf.getName());
 
          undeployAspectMethodBindings(cf);
@@ -237,7 +240,7 @@
       javassist.bytecode.annotation.Annotation info = visible.getAnnotation(InterceptorDef.class.getName());
       if (info != null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Found @InterceptorDef in: " + cf.getName());
+         if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("Found @InterceptorDef in: " + cf.getName());
          Aspect aspect = (Aspect) AnnotationProxy.createProxy(info, Aspect.class);
          Scope scope = aspect.scope();
 
@@ -274,7 +277,7 @@
       javassist.bytecode.annotation.Annotation info = visible.getAnnotation(InterceptorDef.class.getName());
       if (info != null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Undeploying @InterceptorDef in: " + cf.getName());
+         if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("Undeploying @InterceptorDef in: " + cf.getName());
          AnnotationProxy.createProxy(info, Aspect.class);
 
          loaderStrategy.undeployInterceptor(this, cf.getName());
@@ -288,7 +291,7 @@
       javassist.bytecode.annotation.Annotation info = visible.getAnnotation(DynamicCFlowDef.class.getName());
       if (info != null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Found @DynamicCFlowDef in: " + cf.getName());
+         if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("Found @DynamicCFlowDef in: " + cf.getName());
          AnnotationProxy.createProxy(info, DynamicCFlowDef.class);
 
          String name = cf.getName();
@@ -315,7 +318,7 @@
       javassist.bytecode.annotation.Annotation info = visible.getAnnotation(DynamicCFlowDef.class.getName());
       if (info != null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Undeploying @DynamicCFlowDef in: " + cf.getName());
+         if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("Undeploying @DynamicCFlowDef in: " + cf.getName());
          String name = cf.getName();
          loaderStrategy.undeployDynamicCFlow(this, name);
       }
@@ -327,7 +330,7 @@
       javassist.bytecode.annotation.Annotation info = visible.getAnnotation(Prepare.class.getName());
       if (info != null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Found top-level @Prepare in: " + cf.getName());
+         if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("Found top-level @Prepare in: " + cf.getName());
          Prepare prepare = (Prepare) AnnotationProxy.createProxy(info, Prepare.class);
 
          String name = cf.getName() + "." + visible.getName();
@@ -355,7 +358,7 @@
       javassist.bytecode.annotation.Annotation info = visible.getAnnotation(Precedence.class.getName());
       if (info != null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Found top-level @Precedence in: " + cf.getName());
+         if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("Found top-level @Precedence in: " + cf.getName());
          
          ArrayList<PrecedenceDefEntry> entries = new ArrayList<PrecedenceDefEntry>();
          Iterator<FieldInfo> fields = cf.getFields().iterator();

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectManager.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -30,7 +30,6 @@
 import java.security.ProtectionDomain;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -82,7 +81,11 @@
 import org.jboss.aop.pointcut.PointcutStats;
 import org.jboss.aop.pointcut.Typedef;
 import org.jboss.aop.pointcut.ast.ClassExpression;
+import org.jboss.aop.spi.AOPSystem;
+import org.jboss.aop.spi.Configuration;
+import org.jboss.aop.spi.Manager;
 import org.jboss.aop.util.AOPLock;
+import org.jboss.aop.util.CollectionConvert;
 import org.jboss.aop.util.UnmodifiableEmptyCollections;
 import org.jboss.aop.util.logging.AOPLogger;
 import org.jboss.util.collection.WeakValueHashMap;
@@ -108,6 +111,9 @@
 {
    private static final AOPLogger logger = AOPLogger.getLogger(AspectManager.class);
    
+   //TOD how this gets set needs revisiting
+   Manager manager = null;
+   
    /** Indicates that a call to the factory has been made, but it returned null. */
    private static final Object NULL_ASPECT = new Object();
 
@@ -143,83 +149,45 @@
    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, 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;
 
-   /** class name prefixes to explicitly exclude unless contained in include. Maintained by top-level AspectManager */
-   protected volatile ArrayList<String> exclude = UnmodifiableEmptyCollections.EMPTY_ARRAYLIST;
-
-   /** class name prefixes to explicitly include, this overrides whatever was set in exclude. Maintained by top-level AspectManager */
-   protected volatile ArrayList<String> include = UnmodifiableEmptyCollections.EMPTY_ARRAYLIST;
-
-   /** A set of wildcard enabled classnames that will be ignored no matter if they have been included. Maintained by top-level AspectManager */
-   protected volatile ArrayList<String> ignore = UnmodifiableEmptyCollections.EMPTY_ARRAYLIST;
-
-   /** A set of annotation names that will be included even though they are invisible. */
-   protected List<String> includeInvisibleAnnotations = Collections .emptyList();
-
-   /** ClassExpressions built from ignore. Maintained by top-level AspectManager */
-   protected ClassExpression[] ignoreExpressions = new ClassExpression[0];
-
    protected static AOPLock lock = new AOPLock();
 
-   public static boolean classicOrder = false;
-
    protected volatile LinkedHashMap<String, ClassMetaDataBinding> classMetaData = UnmodifiableEmptyCollections.EMPTY_LINKED_HASHMAP;
    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;
 
-   protected DynamicAOPStrategy dynamicStrategy = new LoadInterceptedClassesStrategy();
-
-   /** The classloader scoping policy */
-   // This shouldn't really be static (artifact of singleton and self-bootstrap design)
-   private static AOPClassLoaderScopingPolicy classLoaderScopingPolicy;
-
    //Keeps track of if we need to convert references etc for a given class. Domains for scoped classloaders will have their own version of this
    protected static Map<ClassLoader, InterceptionMarkers> interceptionMarkers = new WeakHashMap<ClassLoader, InterceptionMarkers>();
    private final static ClassLoader NULL_CLASSLOADER = new URLClassLoader(new URL[0]);
    
    // Static -------------------------------------------------------
 
-   protected static AspectManager manager;
-   public static boolean optimize = true;
-   public static boolean debugClasses;//If true, the generated advisor instrumentor will output the generated classes
-   public static ClassLoaderValidation classLoaderValidator;
+   protected static AspectManager singleton;
 
    //Keep track of the microcontainer lifecycle callbacks
    public LifecycleManager lifecycleManager = new LifecycleManager(this);
 
    /**
-    * logging switch.  We don't use log4j to avoid another heavy library
-    */
-   public static boolean verbose = false;
-
-   /**
-    * Whether or not we should maintain the deprecated Advisor.methodInterceptors field
-    * This is required in jboss 4.x for backwards compatibility with EJB 3
-    * See JBAOP-517
-    */
-   public static boolean maintainAdvisorMethodInterceptors;
-
-   /**
     * Get the top level aspect manager
     *
     * @return the top level aspect manager
     */
    public static synchronized AspectManager getTopLevelAspectManager()
    {
-      if (classLoaderScopingPolicy == null)
+      if (AOPSystem.getConfiguration().getClassLoaderScopingPolicy() == null)
       {
          //We are not running in jboss
          return instance();
       }
 
       AspectManager result = initManager();
-      Domain scopedDomain = classLoaderScopingPolicy.getTopLevelDomain(result);
+      Domain scopedDomain = AOPSystem.getConfiguration().getClassLoaderScopingPolicy().getTopLevelDomain(result);
       if (scopedDomain != null)
          result = scopedDomain;
       return result;
@@ -239,9 +207,9 @@
    public static synchronized AspectManager instance(ClassLoader loadingClassLoader)
    {
       AspectManager result = initManager();
-      if (classLoaderScopingPolicy != null)
+      if (AOPSystem.getConfiguration().getClassLoaderScopingPolicy() != null)
       {
-         Domain scopedDomain = classLoaderScopingPolicy.getDomain(loadingClassLoader, result);
+         Domain scopedDomain = AOPSystem.getConfiguration().getClassLoaderScopingPolicy().getDomain(loadingClassLoader, result);
          if (scopedDomain != null)
             result = scopedDomain;
       }
@@ -257,128 +225,38 @@
     */
    private static AspectManager initManager()
    {
-      if (manager == null)
+      if (singleton == null)
       {
          AccessController.doPrivileged(new PrivilegedAction<AspectManager>()
          {
             public AspectManager run()
             {
-               String optimized = System.getProperty("jboss.aop.optimized", null);
-               if (optimized != null)
-               {
-                  optimize = (new Boolean(optimized)).booleanValue();
-               }
-               String pruneit = System.getProperty("jboss.aop.prune", null);
-               if (pruneit != null)
-               {
-                  AOPClassPoolRepository.getInstance().setPrune((new Boolean(pruneit)).booleanValue());
-               }
-               manager = new AspectManager();
-               //Initialise frequently used fields needed by the top-level manager
-               manager.subDomainsPerClass = new WeakHashMap<Class<?>, WeakReference<Domain>>();
-               manager.exclude = new ArrayList<String>();
-               manager.include = new ArrayList<String>();
-               manager.ignore = new ArrayList<String>();
-               manager.includeInvisibleAnnotations = new ArrayList<String>();
-               
-
-               AOPClassPoolRepository.getInstance().setAspectManager(manager);
-
-               if (!verbose)
-               {
-                  verbose = (new Boolean(System.getProperty("jboss.aop.verbose", "false"))).booleanValue();
-               }
-               String exclude = System.getProperty("jboss.aop.exclude", null);
-               if (exclude != null)
-               {
-                  ArrayList<String> list = splitString(exclude, ",");
-                  manager.setExclude(list);
-               }
-               String include = System.getProperty("jboss.aop.include", null);
-               if (include != null)
-               {
-                  ArrayList<String> list = splitString(include, ",");
-                  manager.setInclude(list);
-               }
-               String ignore = System.getProperty("jboss.aop.ignore", null);
-               if (ignore != null)
-               {
-                  ArrayList<String> list = splitString(ignore, ",");
-                  manager.setIgnore(list);
-               }
-               String invisibleAnnotations = System.getProperty("jboss.aop.invisible.annotations", null);
-               if(invisibleAnnotations != null)
-               {
-                  ArrayList<String> list = splitString(invisibleAnnotations, ",");
-                  manager.setIncludedInvisibleAnnotations(list);
-               }
-               
-               String instrument = System.getProperty("jboss.aop.instrumentor", null);
-               InstrumentorFactory.initialise(instrument);
-
-               String advisorName = System.getProperty("jboss.aop.advisor", null);
-               AdvisorFactory.initialise(advisorName);
-
-               String debugClass = System.getProperty("jboss.aop.debug.classes", null);
-               if (debugClass != null)
-               {
-                  debugClasses = (new Boolean(debugClass)).booleanValue();
-               }
-
-               String classic = System.getProperty("jboss.aop.classicorder", null);
-               if (classic != null)
-               {
-                  classicOrder = (new Boolean(classic)).booleanValue();
-               }
-
-               String methodInterceptors = System.getProperty("jboss.aop.advisor.methodInterceptors", null);
-               if (methodInterceptors != null)
-               {
-                  maintainAdvisorMethodInterceptors = (new Boolean(methodInterceptors)).booleanValue();
-               }
-
-
+               singleton = new AspectManager();
+               AOPClassPoolRepository.getInstance().setAspectManager(singleton);
                Deployment.deploy();
                return null;
             }
          });
       }
-      return manager;
+      return singleton;
    }
 
-   private static ArrayList<String> splitString(String string, String delim)
-   {
-      if (string != null)
-      {
-         ArrayList<String> list = new ArrayList<String>();
-         for(String token : string.split(delim))
-         {
-            list.add(token.trim());
-         }
-         return list;
-      }
-      return null;
-   }
-   
    /**
-    * Get the classLoaderScopingPolicy.
-    *
-    * @return the classLoaderScopingPolicy.
+    * @see Configuration#getClassLoaderScopingPolicy()
     */
+   @Deprecated
    public static AOPClassLoaderScopingPolicy getClassLoaderScopingPolicy()
    {
-      return classLoaderScopingPolicy;
+      return AOPSystem.getConfiguration().getClassLoaderScopingPolicy();
    }
 
    /**
-    * Set the classLoaderScopingPolicy.
-    *
-    * TODO does it make sense for this to be modified once it has been set?
-    * @param classLoaderScopingPolicy the classLoaderScopingPolicy.
+    * @see Configuration#setClassLoaderScopingPolicy()
     */
+   @Deprecated
    public static void setClassLoaderScopingPolicy(AOPClassLoaderScopingPolicy classLoaderScopingPolicy)
    {
-      AspectManager.classLoaderScopingPolicy = classLoaderScopingPolicy;
+      AOPSystem.getConfiguration().setClassLoaderScopingPolicy(classLoaderScopingPolicy);
    }
 
    public InterceptionMarkers getInterceptionMarkers(ClassLoader loader)
@@ -411,20 +289,20 @@
 
    public CFlowStack getCFlowStack(String name)
    {
-      return cflowStacks.get(name);
+      return manager.getCFlowStack(name);
    }
 
    public void addCFlowStack(CFlowStack stack)
    {
-      initCflowStacksMap();
-      cflowStacks.put(stack.getName(), stack);
+      manager.addCFlowStack(stack);
    }
 
    public void removeCFlowStack(String name)
    {
-      cflowStacks.remove(name);
+      manager.removeCFlowStack(name);
    }
 
+   
    @Deprecated
    public DynamicCFlow getDynamicCFlow(String name)
    {
@@ -749,7 +627,7 @@
             advisors.put(clazz, new WeakReference<Advisor>(advisor));
             registerClass(clazz);
             advisor.attachClass(clazz);
-            InterceptorChainObserver observer = dynamicStrategy.getInterceptorChainObserver(clazz);
+            InterceptorChainObserver observer = AOPSystem.getWeaver().getDynamicAOPStrategy().getInterceptorChainObserver(clazz);
             advisor.setInterceptorChainObserver(observer);
             if (notificationHandler != null)
             {
@@ -789,6 +667,7 @@
       synchronized (getRegisteredCLs())
       {
          if (!advisors.containsKey(advisor.getClazz())) return false;
+         final ClassLoaderValidation classLoaderValidator = AOPSystem.getConfiguration().getClassLoaderValidator();
          if (classLoaderValidator != null)
          {
             if (classLoaderValidator.isValidClassLoader(advisor.getClassLoader()))
@@ -855,237 +734,160 @@
       AOPClassPoolRepository.getInstance().unregisterClassLoader(cl);
    }
 
+   @Deprecated
    public ArrayList<String> getExclude()
    {
-      return exclude;
+      return CollectionConvert.toArrayList(AOPSystem.getConfiguration().getExclude());
    }
 
+   @Deprecated
    public void setExclude(ArrayList<String> exclude)
    {
-      this.exclude.clear();
-      this.exclude.addAll(exclude);
+      AOPSystem.getConfiguration().setExclude(exclude);
    }
 
+   @Deprecated
    public ArrayList<String> getInclude()
    {
-      return include;
+      return CollectionConvert.toArrayList(AOPSystem.getConfiguration().getInclude());
    }
 
+   @Deprecated
    public void setInclude(ArrayList<String> include)
    {
-      this.include.clear();
-      this.include.addAll(include);
+      AOPSystem.getConfiguration().setInclude(include);
    }
 
+   @Deprecated
    public ArrayList<String> getIgnore()
    {
-      return ignore;
+      return CollectionConvert.toArrayList(AOPSystem.getConfiguration().getIgnore());
    }
    
-   
+   @Deprecated
    public List<String> getIncludedInvisibleAnnotations()
    {
-      return includeInvisibleAnnotations;
+      return AOPSystem.getConfiguration().getIncludedInvisibleAnnotations();
    }
    
+   @Deprecated
    public void setIncludedInvisibleAnnotations(List<String> ia)
    {
-      includeInvisibleAnnotations.clear();
-      includeInvisibleAnnotations.addAll(ia);
+      AOPSystem.getConfiguration().setIncludedInvisibleAnnotations(ia);
    }
 
+   @Deprecated
    public ClassExpression[] getIgnoreExpressions()
    {
-      return ignoreExpressions;
+      return AOPSystem.getConfiguration().getIgnoreExpressions();
    }
 
+   @Deprecated
    public void setIgnore(ArrayList<String> ignore)
    {
-      this.ignore.clear();
-      this.ignore.addAll(ignore);
-      ignoreExpressions = new ClassExpression[ignore.size()];
-      for (int i = 0 ; i < ignore.size() ; i++)
-      {
-        String ex = ignore.get(i);
-        ignoreExpressions[i] = new ClassExpression(ex);
-      }
+      AOPSystem.getConfiguration().setIgnore(ignore);
    }
 
-   public boolean ignoreClass(String classname)
-   {
-      ArrayList<String> ignore = getIgnore();
-      if (ignore == null) return false;
-      ClassExpression[] ignoreExprs = getIgnoreExpressions();
-      for (int i = 0; i < ignoreExprs.length; i++)
-      {
-         if(ignoreExprs[i].matches(classname)) return true;
-      }
-      return false;
-   }
+   //These do not seem to be used from anywhere else, and I doubt any users would need them
+   //They have been moved as private methods in DefaultWeaver
+//   public boolean ignoreClass(String classname)
+//   public boolean includeClass(String classname)
+//   public boolean excludeClass(String classname)
 
-   public boolean includeClass(String classname)
-   {
-      ArrayList<String> include = getInclude();
-      if (include == null) return false;
-      for (int i = 0; i < include.size(); i++)
-      {
-         String str = include.get(i);
-         if (classname.startsWith(str)) return true;
-      }
-      return false;
-   }
-
-   public boolean excludeClass(String classname)
-   {
-      ArrayList<String> exclude = getExclude();
-      if (exclude == null) return false;
-      for (int i = 0; i < exclude.size(); i++)
-      {
-         String str = exclude.get(i);
-         if (str.equals("*")) return true;
-         if (classname.startsWith(str)) return true;
-      }
-      return false;
-   }
-
+   @Deprecated
    public static boolean getPrune()
    {
       return AOPClassPoolRepository.getInstance().isPrune();
    }
 
+   @Deprecated
    public static void setPrune(boolean prune)
    {
       AOPClassPoolRepository.getInstance().setPrune(prune);
    }
 
+   @Deprecated
    public static void setClassPoolFactory(ScopedClassPoolFactory factory)
    {
       AOPClassPoolRepository.getInstance().setClassPoolFactory(factory);
    }
 
+   @Deprecated
    public static ScopedClassPoolFactory getClassPoolFactory()
    {
       return AOPClassPoolRepository.getInstance().getClassPoolFactory();
    }
 
+   @Deprecated
    public boolean isNonAdvisableClassName(String classname)
    {
-      if (ignoreClass(classname)) return true;
-      if (includeClass(classname)) return false;
-      if (excludeClass(classname)) return true;
-      return (classname.startsWith("org.jboss.aop.") ||
-              classname.endsWith("$aop") ||
-              classname.startsWith("javassist") ||
-              classname.startsWith("org.jboss.util.") ||
-              classname.startsWith("gnu.trove.") ||
-              classname.startsWith("EDU.oswego.cs.dl.util.concurrent.") ||
-              classname.contains('.' + JoinPointGenerator.JOINPOINT_CLASS_PREFIX) ||
-      // System classes
-              classname.startsWith("org.apache.tools.ant") ||
-              classname.startsWith("org.apache.crimson") ||
-              classname.startsWith("org.apache.xalan") ||
-              classname.startsWith("org.apache.xml") ||
-              classname.startsWith("org.apache.xpath") ||
-              classname.startsWith("org.ietf.") ||
-              classname.startsWith("org.omg.") ||
-              classname.startsWith("org.w3c.") ||
-              classname.startsWith("org.xml.sax.") ||
-              classname.startsWith("sunw.") ||
-              classname.startsWith("sun.") ||
-              classname.startsWith("java.") ||
-              classname.startsWith("javax.") ||
-              classname.startsWith("com.sun.") ||
-              classname.startsWith("junit") ||
-              classname.startsWith("jrockit.") ||
-              classname.startsWith("com.bea.vm.") ||
-              classname.startsWith("$Proxy")
-             );
+      return AOPSystem.getWeaver().isWeavable(classname) == false;
    }
 
-   /**
-    * This is the hook for ClassLoaders that want to instrument their classes with AOP
-    * <p/>
-    * This would be called during a findClass or loadClass call.  The return value
-    * is used by defineClass to create the class from bytecode
-    */
+   @Deprecated
    public byte[] transform(ClassLoader loader,
                            String className,
-                           @SuppressWarnings(value= {"all"}) Class classBeingRedefined,
+                           Class<?> classBeingRedefined,
                            ProtectionDomain protectionDomain,
                            byte[] classfileBuffer)
            throws Exception
    {
-      byte[] b = translate(className, loader, classfileBuffer);
-      return b;
+      
+      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);
+//      }
+
    }
 
 
-   /**
-    * This is to be backward compatible with JBoss 3.2.3 Translator interface
-    *
-    * @param className
-    * @param loader
-    * @return
-    * @throws Exception
-    */
+   @Deprecated
    public byte[] translate(String className, ClassLoader loader) throws Exception
    {
       return translate(className, loader, null);
    }
 
-   /**
-    * This is to be backward compatible with JBoss 3.2.3 Translator interface
-    * TODO: stalep, added a synchronized block for the entire method to prevent
-    *  a deadlock. its not optimal and should be further reviewed.
-    *  (commented out sync block inside the method)
-    *
-    * @param className
-    * @param loader
-    * @return
-    * @throws Exception
-    */
+   @Deprecated
    public byte[] translate(String className, ClassLoader loader, byte[] classfileBuffer) throws Exception
    {
-      try
-      {
-         if (isNonAdvisableClassName(className))
-         {
-            return null;
-         }
-         lock.lockRead();
-         try
-         {
-            synchronized(this){
-               if (weavingStrategy == null)
-               {
-                  if (TransformerCommon.isCompileTime() || classicOrder)
-                  {
-                     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);
-      }
+      return AOPSystem.getWeaver().translate(className, loader, classfileBuffer);
    }
 
    /**
@@ -1393,7 +1195,7 @@
          if (binding != null)
          {
             binding.clearAdvisors();
-            dynamicStrategy.interceptorChainsUpdated();
+            AOPSystem.getWeaver().getDynamicAOPStrategy().interceptorChainsUpdated();
          }
       }
       finally
@@ -1451,7 +1253,7 @@
          }
          advisor.removeAdviceBindings(removedBindings);
       }
-      dynamicStrategy.interceptorChainsUpdated();
+      AOPSystem.getWeaver().getDynamicAOPStrategy().interceptorChainsUpdated();
    }
 
    /**
@@ -1489,7 +1291,7 @@
                }
             }
          }
-         this.dynamicStrategy.interceptorChainsUpdated();
+         AOPSystem.getWeaver().getDynamicAOPStrategy().interceptorChainsUpdated();
       }
       finally
       {
@@ -1518,14 +1320,14 @@
                
                if (binding.getPointcut().softMatch(advisor))
                {
-                  if (AspectManager.verbose && logger.isDebugEnabled())
+                  if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled())
                      logger.debug("softmatch succeeded for : " + advisor.getName() + " " + binding + " " + binding.getPointcut().getExpr());
                   advisor.newBindingAdded(binding);
                   //affectedAdvisors.remove(advisor);
                }
                else
                {
-                  if (AspectManager.verbose && logger.isDebugEnabled())
+                  if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled())
                      logger.debug("softmatch failed for : " + advisor.getName() + " " + binding + " " + binding.getPointcut().getExpr());
                }
             }
@@ -1790,7 +1592,7 @@
       if (declare.isPointcut())
       {
          PointcutStats stats;
-         stats = new PointcutStats(declare.getAst(), manager);
+         stats = new PointcutStats(declare.getAst(), singleton);
          stats.matches();
          bindingCollection.updateStats(stats);
       }
@@ -2056,7 +1858,7 @@
 
    public Map<String, CFlowStack> getCflowStacks()
    {
-      return cflowStacks;
+      return manager.getCFlowStacks();
    }
 
    public Map<String, DynamicCFlowDefinition> getDynamicCFlows()
@@ -2074,27 +1876,16 @@
       return classMetaData;
    }
 
-   /**
-    * Returns the dynamic aop strategy to be used.
-    */
+   @Deprecated
    public DynamicAOPStrategy getDynamicAOPStrategy()
    {
-      return this.dynamicStrategy;
+      return AOPSystem.getWeaver().getDynamicAOPStrategy();
    }
 
-   /**
-    * Sets the dynamic aop strategy to be used.
-    * Should be called only before any class is transformed.
-    * @param strategy the new dynamic aop strategy.
-    */
+   @Deprecated
    public void setDynamicAOPStrategy(DynamicAOPStrategy strategy)
    {
-      // avoid users calling this method in run time
-      if (hasTransformationStarted())
-      {
-         throw new RuntimeException("Dynamic AOP Strategy Update not allowed in run time");
-      }
-      this.dynamicStrategy = strategy;
+      AOPSystem.getWeaver().setDynamicAOPStrategy(strategy);
    }
 
    /**
@@ -2158,6 +1949,7 @@
    private Advisor getAdvisorFromAdvisorsKeySetIterator(Iterator<Class<?>> it)
    {
       Class<?> clazz = it.next();
+      final ClassLoaderValidation classLoaderValidator = AOPSystem.getConfiguration().getClassLoaderValidator();
       if (classLoaderValidator != null && !classLoaderValidator.isValidClassLoader(SecurityActions.getClassLoader(clazz)))
       {
          it.remove();
@@ -2455,20 +2247,6 @@
       }
    }
 
-   protected void initCflowStacksMap()
-   {
-      if (cflowStacks == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)
-      {
-         synchronized(lazyCollectionLock)
-         {
-            if (cflowStacks == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)
-            {
-               cflowStacks = new ConcurrentHashMap<String, CFlowStack>();
-            }
-         }
-      }
-   }
-
    protected void initDynamicCflowsMap()
    {
       if (dynamicCFlows == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectXmlLoader.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectXmlLoader.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/AspectXmlLoader.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -68,6 +68,7 @@
 import org.jboss.aop.pointcut.ast.ParseException;
 import org.jboss.aop.pointcut.ast.PointcutExpressionParser;
 import org.jboss.aop.pointcut.ast.TypeExpressionParser;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.XmlHelper;
 import org.jboss.aop.util.logging.AOPLogger;
 import org.jboss.util.xml.XmlLoadable;
@@ -105,7 +106,7 @@
 
    public void setManager(AspectManager manager)
    {
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("AspectXMLLoader using manager" + manager);
+      if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("AspectXMLLoader using manager" + manager);
       this.manager = manager;
    }
    

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassAdvisor.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -441,11 +441,11 @@
          if ((!write && binding.getPointcut().matchesGet(this, field))
          || (write && binding.getPointcut().matchesSet(this, field)))
          {
-            if (AspectManager.verbose) logger.debug("field matched " + ((write) ? "write" : "read") + " binding: " + field);
+            if (config.isVerbose()) logger.debug("field matched " + ((write) ? "write" : "read") + " binding: " + field);
             adviceBindings.add(binding);
             binding.addAdvisor(this);
             pointcutResolved(newFieldInfos[i], binding, new FieldJoinpoint(field));
-            if (AspectManager.maintainAdvisorMethodInterceptors && this.initialized)
+            if (config.isMaintainAdvisorMethodInterceptors() && this.initialized)
             {
                interceptors[i] = newFieldInfos[i].getInterceptors();
             }
@@ -584,7 +584,7 @@
    @SuppressWarnings("deprecation")
    protected void createInterceptorChains() throws Exception
    {
-      if (AspectManager.verbose && logger.isDebugEnabled())
+      if (config.isVerbose() && logger.isDebugEnabled())
       {
          logger.debug("Creating chains for " + clazz + " " + getClassLoader());
       }
@@ -622,7 +622,7 @@
       ClassifiedBindingAndPointcutCollection bindingCol = manager.getBindingCollection();
       for (AdviceBinding binding: bindingCol.getFieldReadBindings())
       {
-         if (AspectManager.verbose && logger.isDebugEnabled())
+         if (config.isVerbose() && logger.isDebugEnabled())
          {
             logger.debug("iterate binding " + binding.getName() + " " +
                   binding.getPointcut().getExpr());
@@ -631,7 +631,7 @@
       }
       for (AdviceBinding binding: bindingCol.getFieldWriteBindings())
       {
-         if (AspectManager.verbose && logger.isDebugEnabled())
+         if (config.isVerbose() && logger.isDebugEnabled())
          {
             logger.debug("iterate binding " + binding.getName() + " " +
                   binding.getPointcut().getExpr());
@@ -640,7 +640,7 @@
       }
       for (AdviceBinding binding: bindingCol.getConstructionBindings())
       {
-         if (AspectManager.verbose && logger.isDebugEnabled())
+         if (config.isVerbose() && logger.isDebugEnabled())
          {
             logger.debug("iterate binding " + binding.getName() + " " +
                   binding.getPointcut().getExpr());
@@ -649,7 +649,7 @@
       }
       for (AdviceBinding binding: bindingCol.getConstructorExecutionBindings())
       {
-         if (AspectManager.verbose && logger.isDebugEnabled())
+         if (config.isVerbose() && logger.isDebugEnabled())
          {
             logger.debug("iterate binding " + binding.getName() + " " +
                   binding.getPointcut().getExpr());
@@ -658,7 +658,7 @@
       }
       for (AdviceBinding binding: bindingCol.getMethodExecutionBindings())
       {
-         if (AspectManager.verbose && logger.isDebugEnabled())
+         if (config.isVerbose() && logger.isDebugEnabled())
          {
             logger.debug("iterate binding " + binding.getName() + " " +
                   binding.getPointcut().getExpr());
@@ -669,7 +669,7 @@
    
    protected void updateInterceptorChains() throws Exception
    {
-      if (AspectManager.verbose && logger.isDebugEnabled())
+      if (config.isVerbose() && logger.isDebugEnabled())
       {
          logger.debug("Updating chains for " + clazz + " " + ((clazz != null) ? getClassLoader() : null ));
       }
@@ -745,7 +745,7 @@
    
    protected void resolvePointcuts(AdviceBinding binding)
    {
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("iterate binding " + binding.getName() + " " + binding.getPointcut().getExpr());
+      if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("iterate binding " + binding.getName() + " " + binding.getPointcut().getExpr());
       if (BindingClassifier.isExecution(binding))
       {
          resolveMethodPointcut(binding);
@@ -832,7 +832,7 @@
    @Override
    protected void updateFieldPointcutAfterRemove(FieldInfo fieldInfo, int i, boolean write)
    {
-      if (AspectManager.maintainAdvisorMethodInterceptors)
+      if (config.isMaintainAdvisorMethodInterceptors())
       {
          if (write)
          {
@@ -1298,7 +1298,7 @@
 
    public void addConstructorCallerPointcut(int callingIndex, String calledClass, long calledMethodHash, AdviceBinding binding) throws Exception
    {
-      if (AspectManager.verbose) logger.debug("constructor call matched binding " + binding.getPointcut().getExpr());
+      if (config.isVerbose()) logger.debug("constructor call matched binding " + binding.getPointcut().getExpr());
       adviceBindings.add(binding);
       binding.addAdvisor(this);
       HashMap<String, TLongObjectHashMap> callingCon = methodCalledByConBindings[callingIndex];
@@ -1336,7 +1336,7 @@
 
    private void addConstructorCalledByConPointcut(int callingIndex, String calledClass, long calledConHash, AdviceBinding binding) throws Exception
    {
-      if (AspectManager.verbose) logger.debug("constructor call matched binding " + binding.getPointcut().getExpr());
+      if (config.isVerbose()) logger.debug("constructor call matched binding " + binding.getPointcut().getExpr());
       adviceBindings.add(binding);
       binding.addAdvisor(this);
       HashMap<String, TLongObjectHashMap> callingCon = conCalledByConBindings[callingIndex];
@@ -2040,7 +2040,7 @@
    @Override
    protected void populateInterceptorsFromInfos()
    {
-      if (!AspectManager.maintainAdvisorMethodInterceptors)
+      if (!config.isMaintainAdvisorMethodInterceptors())
       {
          return;
       }
@@ -2479,7 +2479,7 @@
       private void addMethodCalledByMethodPointcut(long callingMethodHash, String calledClass, long calledMethodHash, AdviceBinding binding) throws Exception
       {
          //Called via resolveCallerMethodInfo, maps are initialised
-         if (AspectManager.verbose) logger.debug("method call matched binding " + binding.getPointcut().getExpr());
+         if (config.isVerbose()) logger.debug("method call matched binding " + binding.getPointcut().getExpr());
          adviceBindings.add(binding);
          binding.addAdvisor(ClassAdvisor.this);
          HashMap<String, TLongObjectHashMap> callingMethod = (HashMap<String, TLongObjectHashMap>)methodCalledByMethodBindings.get(callingMethodHash);
@@ -2755,7 +2755,7 @@
 
       private void addConstructorCalledByMethodPointcut(long callingMethodHash, String calledClass, long calledMethodHash, AdviceBinding binding) throws Exception
       {
-         if (AspectManager.verbose) logger.debug("method call matched binding " + binding.getPointcut().getExpr());
+         if (config.isVerbose()) logger.debug("method call matched binding " + binding.getPointcut().getExpr());
          adviceBindings.add(binding);
          binding.addAdvisor(ClassAdvisor.this);
          HashMap<String, TLongObjectHashMap> callingMethod = (HashMap<String, TLongObjectHashMap>) conCalledByMethodBindings.get(callingMethodHash);

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassContainer.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassContainer.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassContainer.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -146,7 +146,7 @@
    @Override
    protected void rebuildInterceptorsForAddedBinding(AdviceBinding binding)
    {
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("iterate binding " + binding.getName());
+      if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("iterate binding " + binding.getName());
       resetChainKeepInterceptors(methodInfos);
       resetChainKeepInterceptors(constructorInfos);
 
@@ -329,13 +329,13 @@
          Collection<AdviceBinding> bindings = bindingCol.getConstructorExecutionBindings(); 
          for (AdviceBinding binding : bindings)
          {
-            if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("iterate binding " + binding.getName());
+            if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("iterate binding " + binding.getName());
             resolveConstructorPointcut(binding);
          }
          bindings = bindingCol.getMethodExecutionBindings(); 
          for (AdviceBinding binding : bindings)
          {
-            if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("iterate binding " + binding.getName());
+            if (config.isVerbose() && logger.isDebugEnabled()) logger.debug("iterate binding " + binding.getName());
             resolveMethodPointcut(binding);
          }
       }

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/ClassicWeavingStrategy.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -24,6 +24,7 @@
 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;
@@ -41,12 +42,13 @@
 {
    private static final AOPLogger logger = AOPLogger.getLogger(ClassicWeavingStrategy.class);
    
-	private boolean verbose = AspectManager.verbose;
     /**
      * This is the translate version that was always there
      */
     public byte[] translate(AspectManager manager, String className, ClassLoader loader, byte[] classfileBuffer) throws Exception
     {
+       final boolean verbose = AOPSystem.getConfiguration().isVerbose();
+
        if (isReEntry())
        {
           return null;
@@ -95,8 +97,8 @@
           Instrumentor instrumentor = InstrumentorFactory.getInstrumentor(
                 pool,
                 manager,
-                manager.dynamicStrategy.getJoinpointClassifier(),
-                manager.dynamicStrategy.getDynamicTransformationObserver(clazz));
+                AOPSystem.getWeaver().getDynamicAOPStrategy().getJoinpointClassifier(),
+                AOPSystem.getWeaver().getDynamicAOPStrategy().getDynamicTransformationObserver(clazz));
 
           if (!Instrumentor.isTransformable(clazz))
           {
@@ -111,7 +113,7 @@
           if (transformed)
           {
              pool.lockInCache(clazz);
-             if (AspectManager.debugClasses)
+             if (AOPSystem.getConfiguration().isDebugClasses())
              {
                 SecurityActions.debugWriteFile(clazz);
              }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Deployment.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Deployment.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Deployment.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -21,6 +21,7 @@
   */
 package org.jboss.aop;
 
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 import org.jboss.util.file.ArchiveBrowser;
 import org.jboss.util.file.ClassFileFilter;
@@ -69,7 +70,7 @@
    {
       String search = System.getProperty("jboss.aop.search.classpath", null);
       if (search != null) searchClasspath = (new Boolean(search)).booleanValue();
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("jboss.aop.search.classpath: '" + search + "' " + searchClasspath);
+      if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("jboss.aop.search.classpath: '" + search + "' " + searchClasspath);
       if (searchClasspath)
       {
          try
@@ -78,7 +79,7 @@
             while (en.hasMoreElements())
             {
                URL url = en.nextElement();
-               if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("deploying  " + url);
+               if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("deploying  " + url);
                AspectXmlLoader.deployXML(url);
             }
          }
@@ -97,10 +98,10 @@
       String path = System.getProperty("jboss.aop.class.path", null);
       if (path == null)
       {
-         if (AspectManager.verbose) logger.debug("jboss.aop.class.path is NULL");
+         if (AOPSystem.getConfiguration().isVerbose()) logger.debug("jboss.aop.class.path is NULL");
          return;
       }
-      if (AspectManager.verbose) logger.debug("jboss.aop.class.path: " + path);
+      if (AOPSystem.getConfiguration().isVerbose()) logger.debug("jboss.aop.class.path: " + path);
       StringTokenizer t = new StringTokenizer(path, File.pathSeparator);
       while (t.hasMoreTokens())
       {
@@ -134,14 +135,14 @@
    public static void preconfigThroughSystemProperty()
    {
       String path = System.getProperty("jboss.aop.path", null);
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("jboss.aop.path: " + path);
+      if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("jboss.aop.path: " + path);
       if (path == null) return;
       StringTokenizer t = new StringTokenizer(path, File.pathSeparator);
       int j = 0;
       while (t.hasMoreTokens())
       {
          String token = t.nextToken();
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("jboss.aop.path[" + j + "]: " + token);
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("jboss.aop.path[" + j + "]: " + token);
          File f = new File(token);
          try
          {
@@ -180,7 +181,7 @@
    {
       // use toURI().toURL() because of bug http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4273532
       URL url = f.toURI().toURL();
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("deploying " + url);
+      if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("deploying " + url);
       AspectXmlLoader.deployXML(url);
    }
 }

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/Domain.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -50,7 +50,6 @@
 import org.jboss.aop.pointcut.Pointcut;
 import org.jboss.aop.pointcut.PointcutInfo;
 import org.jboss.aop.pointcut.Typedef;
-import org.jboss.aop.pointcut.ast.ClassExpression;
 import org.jboss.aop.util.UnmodifiableEmptyCollections;
 
 /**
@@ -561,18 +560,20 @@
          {
             // when child first, parent bindings go in first so that they can be overridden by child.
             map.putAll(parent.getCflowStacks());
-            synchronized (cflowStacks)
-            {
-               map.putAll(cflowStacks);
-            }
+            //TODO necessary locking?
+//            synchronized (cflowStacks)
+//            {
+               map.putAll(getCflowStacks());
+//            }
             return map;
          }
          else
          {
-            synchronized (cflowStacks)
-            {
-               map.putAll(cflowStacks);
-            }
+            //TODO necessary locking?
+//            synchronized (cflowStacks)
+//            {
+               map.putAll(getCflowStacks());
+//            }
             map.putAll(parent.getCflowStacks());
             return map;
          }
@@ -1004,42 +1005,7 @@
       return parent.getSubDomainsPerClass();
    }
 
-   /** Only set on a per vm basis */
    @Override
-   public ArrayList<String> getExclude()
-   {
-      return parent.getExclude();
-   }
-
-   /** Only set on a per vm basis */
-   @Override
-   public ArrayList<String> getInclude()
-   {
-      return parent.getInclude();
-   }
-
-   /** Only set on a per vm basis */
-   @Override
-   public ArrayList<String> getIgnore()
-   {
-      return parent.getIgnore();
-   }
-
-   /** Only set on a per vm basis */
-   @Override
-   public ClassExpression[] getIgnoreExpressions()
-   {
-      return parent.getIgnoreExpressions();
-   }
-   
-   /** Only set on a per vm basis */
-   @Override
-   public List<String> getIncludedInvisibleAnnotations()
-   {
-      return parent.getIncludedInvisibleAnnotations();
-   }
-   
-   @Override
    public DynamicAOPStrategy getDynamicAOPStrategy()
    {
       return parent.getDynamicAOPStrategy();

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/GeneratedClassAdvisor.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/GeneratedClassAdvisor.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/GeneratedClassAdvisor.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -53,6 +53,7 @@
 import org.jboss.aop.joinpoint.Joinpoint;
 import org.jboss.aop.joinpoint.MethodJoinpoint;
 import org.jboss.aop.pointcut.PointcutMethodMatch;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.UnmodifiableEmptyCollections;
 import org.jboss.aop.util.logging.AOPLogger;
 
@@ -288,7 +289,7 @@
             if (match != null && match.isMatch())
             {
                adviceBindings.add(binding);
-               if (AspectManager.verbose)
+               if (AOPSystem.getConfiguration().isVerbose())
                {
                   logger.error("method matched binding " + binding.getPointcut().getExpr() + " " + method.toString());     
                }
@@ -632,7 +633,7 @@
          MethodJoinPointGenerator generator = getJoinPointGenerator(info);
          finalizeChainAndRebindJoinPoint(oldInfos, info, generator, OldInfoMaps.INFOS);
       }
-      if (AspectManager.maintainAdvisorMethodInterceptors)
+      if (config.isMaintainAdvisorMethodInterceptors())
       {
          methodInterceptors = newMethodInfos;
       }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/MethodMatchInfo.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/MethodMatchInfo.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/MethodMatchInfo.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -26,6 +26,7 @@
 import org.jboss.aop.advice.AdviceBinding;
 import org.jboss.aop.joinpoint.MethodJoinpoint;
 import org.jboss.aop.pointcut.PointcutMethodMatch;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 
 /**
@@ -116,14 +117,15 @@
    
    private void overridePopulateBindings(ArrayList<AdviceBinding> applicableBindings)
    {
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("populate bindings for " + info.getMethod() + " all bindings");
+      final boolean verbose = AOPSystem.getConfiguration().isVerbose();
+      if (verbose && logger.isDebugEnabled()) logger.debug("populate bindings for " + info.getMethod() + " all bindings");
       int size = bindings.size();
       int minMatchLevel = 1000000;
       for (int i = 0 ; i < size ; i++)
       {
          AdviceBinding binding = bindings.get(i);
          PointcutMethodMatch match = pointcutMethodMatches.get(i);
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug(match.getMatchLevel() + " " + match.getMatchedClass().getName() + " " + binding.getPointcut().getExpr() + " : " + binding.getInterceptorFactories().length);
+         if (verbose && logger.isDebugEnabled()) logger.debug(match.getMatchLevel() + " " + match.getMatchedClass().getName() + " " + binding.getPointcut().getExpr() + " : " + binding.getInterceptorFactories().length);
          
          if (minMatchLevel > match.getMatchLevel() && !match.isInstanceOf())
          {
@@ -131,7 +133,7 @@
          }
       }
 
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("populate bindings for " + info.getMethod() + " actual bindings");
+      if (verbose && logger.isDebugEnabled()) logger.debug("populate bindings for " + info.getMethod() + " actual bindings");
       for (int i = 0 ; i < size ; i++)
       {
          AdviceBinding binding = bindings.get(i);
@@ -139,7 +141,7 @@
          
          if (match.isInstanceOf() || match.getMatchLevel() == minMatchLevel)
          {
-            if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug(match.getMatchLevel() + " " + match.getMatchedClass().getName() + " " + binding.getPointcut().getExpr() + " : " + binding.getInterceptorFactories().length);
+            if (verbose && logger.isDebugEnabled()) logger.debug(match.getMatchLevel() + " " + match.getMatchedClass().getName() + " " + binding.getPointcut().getExpr() + " : " + binding.getInterceptorFactories().length);
             applyBinding(applicableBindings, binding);
          }
       }

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/SuperClassesFirstWeavingStrategy.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -25,6 +25,7 @@
 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;
@@ -44,11 +45,12 @@
 
    private static final AOPLogger logger = AOPLogger.getLogger(SuperClassesFirstWeavingStrategy.class);
    
-   private boolean verbose = AspectManager.verbose;
    public static final String AOP_PACKAGE = Advised.class.getPackage().getName();
 
    public byte[] translate(AspectManager manager, String className, ClassLoader loader, byte[] classfileBuffer) throws Exception
    {
+      final boolean verbose = AOPSystem.getConfiguration().isVerbose();
+
       if (isReEntry())
       {
          return null;
@@ -70,7 +72,7 @@
          if (woven != null)
          {
             pool.lockInCache(woven);
-            if (AspectManager.debugClasses)
+            if (AOPSystem.getConfiguration().isDebugClasses())
             {
                SecurityActions.debugWriteFile(clazz);
             }
@@ -123,6 +125,8 @@
 
    private CtClass instrumentClass(AspectManager manager, AOPClassPool pool, CtClass clazz, boolean isLoadedClass) throws NotFoundException, Exception
    {
+      final boolean verbose = AOPSystem.getConfiguration().isVerbose();
+
       if (pool.isClassLoadedButNotWoven(clazz.getName()))
       {
          return null;
@@ -186,8 +190,8 @@
             Instrumentor instrumentor = InstrumentorFactory.getInstrumentor(
                   pool,
                   manager,
-                  manager.dynamicStrategy.getJoinpointClassifier(),
-                  manager.dynamicStrategy.getDynamicTransformationObserver(clazz));
+                  AOPSystem.getWeaver().getDynamicAOPStrategy().getJoinpointClassifier(),
+                  AOPSystem.getWeaver().getDynamicAOPStrategy().getDynamicTransformationObserver(clazz));
 
             if (!Instrumentor.isTransformable(clazz))
             {

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/AdviceBinding.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/AdviceBinding.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/AdviceBinding.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -36,6 +36,7 @@
 import org.jboss.aop.pointcut.ast.ASTCFlowExpression;
 import org.jboss.aop.pointcut.ast.ParseException;
 import org.jboss.aop.pointcut.ast.PointcutExpressionParser;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 
 /**
@@ -327,7 +328,7 @@
     */
    public void addAdvisor(Advisor advisor)
    {
-      if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("added advisor: " + advisor.getName() + " from binding: " + name);
+      if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("added advisor: " + advisor.getName() + " from binding: " + name);
       // Don't hold a direct reference to an advisor because of undeploy and redeploy.  Use WeakRefrences because
       // we may be having in the future an Advisor per instance.
       synchronized (advisors)

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/AspectFactoryWithClassLoaderSupport.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/AspectFactoryWithClassLoaderSupport.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/AspectFactoryWithClassLoaderSupport.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -23,7 +23,7 @@
 
 import java.lang.ref.WeakReference;
 
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 
 /**
@@ -84,12 +84,12 @@
       {
          // FIXME ClassLoader - which should we always know the correct classloader?
          ClassLoader tcl = SecurityActions.getContextClassLoader(); 
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Using context classloader " + tcl + " to load aspect " + name);
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("Using context classloader " + tcl + " to load aspect " + name);
          return tcl.loadClass(name);
       }
       else
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Using scoped classloader " + cl + " to load aspect " + name);
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("Using scoped classloader " + cl + " to load aspect " + name);
          return cl.loadClass(name);
       }
    }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/ClassifiedBindingAndPointcutCollection.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/ClassifiedBindingAndPointcutCollection.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/ClassifiedBindingAndPointcutCollection.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -32,6 +32,7 @@
 import org.jboss.aop.pointcut.PointcutExpression;
 import org.jboss.aop.pointcut.PointcutInfo;
 import org.jboss.aop.pointcut.PointcutStats;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.BindingClassifier;
 import org.jboss.aop.util.UnmodifiableEmptyCollections;
 import org.jboss.aop.util.UnmodifiableLinkedHashMap;
@@ -930,7 +931,7 @@
       }
       else
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Setting all pointcut stats to true");
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("Setting all pointcut stats to true");
          // can't be sure so set all
          execution = true;
          construction = true;

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -25,7 +25,6 @@
 import java.lang.reflect.Modifier;
 
 import org.jboss.aop.Advisor;
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.ClassAdvisor;
 import org.jboss.aop.ClassInstanceAdvisor;
 import org.jboss.aop.GeneratedClassAdvisor;
@@ -49,6 +48,7 @@
 import org.jboss.aop.joinpoint.MethodInvocation;
 import org.jboss.aop.joinpoint.MethodJoinpoint;
 import org.jboss.aop.pointcut.ast.ASTCFlowExpression;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 
 /**
@@ -275,7 +275,7 @@
          if (instance == null)
          {
             //Used by JoinPointGenerator at code generation time
-            if (AspectManager.verbose && logger.isDebugEnabled())
+            if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled())
             {
                logger.debug("Calling create on PER_JOINPOINT scoped AspectFactory with no InstanceAdvisor as part of setup");
             }
@@ -320,7 +320,7 @@
       if (ia == null)
       {
          //Used by JoinPointGenerator at code generation time
-         if (AspectManager.verbose && logger.isDebugEnabled())
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled())
          {
             logger.debug("Calling create on PER_INSTANCE scoped AspectFactory with no InstanceAdvisor as part of setup");
          }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/GenericAspectFactory.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/GenericAspectFactory.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/GenericAspectFactory.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -30,9 +30,9 @@
 import java.lang.reflect.Method;
 
 import org.jboss.aop.Advisor;
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.InstanceAdvisor;
 import org.jboss.aop.joinpoint.Joinpoint;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -310,7 +310,7 @@
    {
       if (advisor == null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled())
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled())
          {
             logger.debug("Ignoring attempt to set advisor attribute on PER_VM scoped aspect/interceptor: " + classname);
          }
@@ -333,7 +333,7 @@
    {
       if (jp == null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled())
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled())
          {
             logger.debug("Ignoring attempt to set joinpoint attribute on aspect/interceptor: " + classname + " which is not scoped PER_JOINPOINT");
          }
@@ -356,7 +356,7 @@
    {
       if (instanceAdvisor == null)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled())
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled())
          {
             logger.debug("Ignoring attempt to set instance advisor attribute on aspect/interceptor: " + classname + " which is not scoped PER_INSTANCE or PER_JOINPOINT");
          }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/annotation/AdviceMethodFactory.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/annotation/AdviceMethodFactory.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/advice/annotation/AdviceMethodFactory.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -34,12 +34,12 @@
 import java.util.ListIterator;
 import java.util.Map;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.advice.AdviceMethodProperties;
 import org.jboss.aop.advice.AdviceType;
 import org.jboss.aop.advice.InvalidAdviceException;
 import org.jboss.aop.advice.NoMatchingAdviceException;
 import org.jboss.aop.advice.annotation.assignability.DegreeAlgorithm;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.ReflectUtils;
 
 /**
@@ -138,7 +138,7 @@
                      {
                         return true;
                      }
-                     if (AspectManager.verbose)
+                     if (AOPSystem.getConfiguration().isVerbose())
                      {
                         appendNewMatchingMessage(method, "argument 0 is not assignable from ");
                         appendMatchingMessage(properties.getInvocationType());
@@ -361,7 +361,7 @@
 
          if (methods.length == 0)
          {
-            if (AspectManager.verbose)
+            if (AOPSystem.getConfiguration().isVerbose())
             {
                throw new NoMatchingAdviceException(properties, adviceType,
                      ": no method named " + properties.getAdviceName() +

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/annotation/PortableAnnotationElement.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/annotation/PortableAnnotationElement.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/annotation/PortableAnnotationElement.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -35,6 +35,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.annotation.factory.javassist.AnnotationProxy;
 import org.jboss.aop.advice.SecurityActions;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.ReflectToJavassist;
 
 import java.lang.annotation.Annotation;
@@ -672,7 +673,7 @@
    
    protected static boolean includeInvisibleAnnotation(String annotation)
    {
-      for(String includedAnnotation : AspectManager.instance().getIncludedInvisibleAnnotations())
+      for(String includedAnnotation : AOPSystem.getConfiguration().getIncludedInvisibleAnnotations())
       {
          if(includedAnnotation.equals("*") || annotation.startsWith(includedAnnotation))
          {

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/CallerTransformer.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/CallerTransformer.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/CallerTransformer.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -28,6 +28,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.ClassAdvisor;
 import org.jboss.aop.pointcut.Pointcut;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.Advisable;
 import org.jboss.aop.util.JavassistMethodHashing;
 import org.jboss.aop.util.logging.AOPLogger;
@@ -84,7 +85,7 @@
    {
       if (!advisor.getManager().isWithin() && !advisor.getManager().isCall() && !advisor.getManager().isWithincode())
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("There are no caller pointcuts!");
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("There are no caller pointcuts!");
          return false;
       }
       CallerExprEditor expr = callerExprEditorFactory(advisor, clazz);
@@ -348,7 +349,7 @@
                }
                else
                {
-                  if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("MethodCall does not match: " + p.getExpr());
+                  if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("MethodCall does not match: " + p.getExpr());
                }
             }
 

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/ClassicInstrumentor.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/ClassicInstrumentor.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/ClassicInstrumentor.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -32,6 +32,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.ClassAdvisor;
 import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.spi.AOPSystem;
 
 /**
  * Comment
@@ -63,7 +64,7 @@
    protected void intitialiseTransformers()
    {
       
-      if (AspectManager.optimize)
+      if (AOPSystem.getConfiguration().isOptimize())
       {
          methodExecutionTransformer = new OptimizedMethodExecutionTransformer(this);
          constructorExecutionTransformer = new OptimizedConstructorExecutionTransformer(this);

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/FieldAccessTransformer.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/FieldAccessTransformer.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/FieldAccessTransformer.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -38,9 +38,9 @@
 import javassist.expr.ExprEditor;
 import javassist.expr.FieldAccess;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.ClassAdvisor;
 import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.Advisable;
 
 /**
@@ -69,7 +69,7 @@
    protected FieldAccessTransformer(Instrumentor instrumentor)
    {
       this.instrumentor = instrumentor;
-      this.optimize = AspectManager.optimize;
+      this.optimize = AOPSystem.getConfiguration().isOptimize();
       this.codifier = new Codifier();
       this.classifier = instrumentor.joinpointClassifier;
    }

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/Instrumentor.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -58,6 +58,7 @@
 import org.jboss.aop.classpool.AOPClassPoolRepository;
 import org.jboss.aop.introduction.AnnotationIntroduction;
 import org.jboss.aop.introduction.InterfaceIntroduction;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.Advisable;
 import org.jboss.aop.util.CtConstructorComparator;
 import org.jboss.aop.util.CtFieldComparator;
@@ -323,6 +324,7 @@
       HashSet<Long> addedMethods = new HashSet<Long>();
 
       String[] interfaces = mixin.getInterfaces();
+      final boolean verbose = AOPSystem.getConfiguration().isVerbose();
       for (int i = 0; i < interfaces.length; i++)
       {
          CtClass intf = classPool.get(interfaces[i]);
@@ -348,7 +350,7 @@
                }
                else
                {
-                  if (AspectManager.verbose)logger.warn(msg);
+                  if (verbose)logger.warn(msg);
                }
             }
             // If another interface of this mixin has a duplicate method, then its ok, but don't re-add
@@ -432,12 +434,14 @@
            throws Exception
    {
       boolean changed = false;
+      final boolean verbose = AOPSystem.getConfiguration().isVerbose();
+
       for (AnnotationIntroduction introduction : advisor.getManager().getAnnotationIntroductions())
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("**** " + introduction.getOriginalAnnotationExpr() + " invisible: " + introduction.isInvisible() + " expr: " + introduction.getOriginalExpression());
+         if (verbose && logger.isDebugEnabled()) logger.debug("**** " + introduction.getOriginalAnnotationExpr() + " invisible: " + introduction.isInvisible() + " expr: " + introduction.getOriginalExpression());
          if (introduction.matches(advisor, clazz))
          {
-            if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug(introduction.getAnnotation() + " binds to " + clazz.getName());
+            if (verbose && logger.isDebugEnabled()) logger.debug(introduction.getAnnotation() + " binds to " + clazz.getName());
             javassist.bytecode.annotation.Annotation info = AnnotationInfoCreator.createAnnotationInfo(classPool, clazz.getClassFile2().getConstPool(), introduction.getAnnotation());
             if (introduction.isInvisible())
             {
@@ -652,7 +656,7 @@
                   if (AspectManager.suppressReferenceErrors)
                   {
                      System.err.println("[warn] Could not find class " + ref + " (or one of its implemented interfaces) that " + clazz.getName() + " references.  It may not be in your classpath and you may not be getting field and constructor weaving for this class.");
-                     if (AspectManager.verbose) e.printStackTrace();
+                     if (AOPSystem.getConfiguration().isVerbose()) e.printStackTrace();
                      continue;
                   }
                   else
@@ -733,7 +737,7 @@
       {
          if (shouldNotTransform(clazz)) return false;
          prepareClassForTransformation(clazz);
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("trying to transform " + clazz.getName());
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("trying to transform " + clazz.getName());
 
          DeclareChecker.checkDeclares(manager, clazz, advisor);
 
@@ -797,7 +801,7 @@
             processedClasses.add(clazz);
          }
 
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("was " + clazz.getName() + " converted: " + (basicsSet || converted));
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("was " + clazz.getName() + " converted: " + (basicsSet || converted));
 
          if (basicsSet || converted)
          {
@@ -1058,7 +1062,7 @@
 
       if (shouldReplaceArrayAccess)
       {
-		  if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("[debug] Replacing array access in " + clazz.getName());
+		  if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("[debug] Replacing array access in " + clazz.getName());
          converter.replaceArrayAccess(classPool.get(ArrayAdvisor.class.getName()), new CodeConverter.DefaultArrayAccessReplacementMethodNames());
       }
       return shouldReplaceArrayAccess;

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/InstrumentorFactory.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/InstrumentorFactory.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/InstrumentorFactory.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -43,9 +43,9 @@
    
    private static final Class<?>[] CONSTRUCTOR_SIG = new Class[] {AOPClassPool.class, AspectManager.class, JoinpointClassifier.class, DynamicTransformationObserver.class};
    
-   public static void initialise(String property)
+   public static void initialise(boolean verbose, String property)
    {
-      if (AspectManager.verbose && logger.isDebugEnabled())
+      if (verbose && logger.isDebugEnabled())
       {
          logger.debug("Passed in instrumentor: " + property);
       }
@@ -83,7 +83,7 @@
       else
       {
          instrumentor = InstrumentorEnum.GENERATED_ADVISOR;
-         if (AspectManager.verbose && logger.isDebugEnabled())
+         if (verbose && logger.isDebugEnabled())
          {
             logger.debug("Defaulting instrumentor to: " + getInstrumentorName());
          }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/JoinPointGenerator.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/JoinPointGenerator.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/JoinPointGenerator.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -62,6 +62,7 @@
 import org.jboss.aop.joinpoint.JoinPointBean;
 import org.jboss.aop.pointcut.ast.ASTCFlowExpression;
 import org.jboss.aop.pointcut.ast.ClassExpression;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.JavassistUtils;
 import org.jboss.aop.util.ReflectToJavassist;
 import org.jboss.aop.util.logging.AOPLogger;
@@ -1287,7 +1288,7 @@
       
       if (superDispatches.length > 2)
       {
-         if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("Too many dispatch() methods found in " + superClass.getName());
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isDebugEnabled()) logger.debug("Too many dispatch() methods found in " + superClass.getName());
       }
       
       for (int i = 0 ; i < superDispatches.length ; i++)

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/JoinpointSimpleClassifier.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/JoinpointSimpleClassifier.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/JoinpointSimpleClassifier.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -27,8 +27,8 @@
 import javassist.NotFoundException;
 
 import org.jboss.aop.Advisor;
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.pointcut.Pointcut;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 
 /**
@@ -57,19 +57,20 @@
     */
    protected JoinpointClassification classifyJoinpoint(CtMember member, Advisor advisor, Matcher joinpointMatcher, BindingCollectionAccessor bindingCollectionAccessor) throws NotFoundException
    {
+      final boolean verbose = AOPSystem.getConfiguration().isVerbose();
       Collection<Pointcut> pointcuts = bindingCollectionAccessor.getPointcuts(advisor);
       for (Pointcut pointcut : pointcuts)
       {
          if (joinpointMatcher.matches(pointcut, advisor, member))
          {
-            if (AspectManager.verbose && logger.isDebugEnabled())
+            if (verbose && logger.isDebugEnabled())
             {
                logger.debug(member + " matches pointcut: " + pointcut.getExpr());
             }
             return JoinpointClassification.WRAPPED;
          }
       }
-      if (AspectManager.verbose && logger.isDebugEnabled())
+      if (verbose && logger.isDebugEnabled())
       {
          logger.debug(member + " matches no pointcuts");
       }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -39,8 +39,8 @@
 import javassist.CtField;
 import javassist.NotFoundException;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.standalone.Compiler;
 
 /**
@@ -108,7 +108,7 @@
             }
          }
 
-         if (AspectManager.debugClasses)
+         if (AOPSystem.getConfiguration().isDebugClasses())
          {
             debugWriteFile(newClass);
          }
@@ -299,7 +299,7 @@
                {
                   public Class<?> run() throws Exception
                   {
-                     if (AspectManager.debugClasses)
+                     if (AOPSystem.getConfiguration().isDebugClasses())
                      {
                         clazz.debugWriteFile();
                      }
@@ -324,7 +324,7 @@
          public Class<?> toClass(CtClass clazz, ClassLoader loader, ProtectionDomain pd)
             throws CannotCompileException
          {
-            if (AspectManager.debugClasses)
+            if (AOPSystem.getConfiguration().isDebugClasses())
             {
                clazz.debugWriteFile();
             }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/TransformerFactory.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/TransformerFactory.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/instrument/TransformerFactory.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -21,7 +21,7 @@
   */
 package org.jboss.aop.instrument;
 
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.spi.AOPSystem;
 
 /**
  * Comment
@@ -34,7 +34,7 @@
    public static MethodExecutionTransformer getMethodExecutionTransformer(
          Instrumentor instrumentor)
    {
-      if (AspectManager.optimize)
+      if (AOPSystem.getConfiguration().isOptimize())
       {
          return new OptimizedMethodExecutionTransformer(instrumentor);
       }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/introduction/AnnotationIntroduction.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/introduction/AnnotationIntroduction.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/introduction/AnnotationIntroduction.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -21,26 +21,27 @@
   */
 package org.jboss.aop.introduction;
 
+import java.io.StringReader;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
 import javassist.CtClass;
 import javassist.CtConstructor;
 import javassist.CtField;
 import javassist.CtMethod;
-import org.jboss.aop.Advisor;
-import org.jboss.aop.AspectManager;
+
 import org.jboss.annotation.factory.ast.ASTAnnotation;
 import org.jboss.annotation.factory.ast.AnnotationParser;
 import org.jboss.annotation.factory.ast.ParseException;
+import org.jboss.aop.Advisor;
 import org.jboss.aop.pointcut.AnnotationMatcher;
 import org.jboss.aop.pointcut.ast.ASTStart;
 import org.jboss.aop.pointcut.ast.TypeExpressionParser;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 import org.jboss.util.StringPropertyReplacer;
 
-import java.io.StringReader;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
 /**
  * Comment
  *
@@ -95,7 +96,7 @@
       originalExpression = expr;
       try
       {
-         if (AspectManager.verbose && logger.isTraceEnabled())
+         if (AOPSystem.getConfiguration().isVerbose() && logger.isTraceEnabled())
          {
             logger.trace("Creating annotation from " + originalAnnotationExpr);
          }

Deleted: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/AbstractManager.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/AbstractManager.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/AbstractManager.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -1,77 +0,0 @@
-/*
-* 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.Collections;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.jboss.aop.pointcut.CFlowStack;
-import org.jboss.aop.spi.Manager;
-import org.jboss.aop.util.UnmodifiableEmptyCollections;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class AbstractManager implements Manager
-{
-   private final Object lazyCollectionLock = new Object();
-   
-   protected volatile ConcurrentHashMap<String, CFlowStack> cflowStacks = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
-
-   public void addCFlowStack(CFlowStack stack)
-   {
-      initCflowStacksMap();
-      cflowStacks.put(stack.getName(), stack);
-   }
-
-   public CFlowStack getCFlowStack(String name)
-   {
-      return cflowStacks.get(name);
-   }
-
-   public void removeCFlowStack(String name)
-   {
-      cflowStacks.remove(name);
-   }
-
-   public Map<String, CFlowStack> getCFlowStacks()
-   {
-      return Collections.unmodifiableMap(cflowStacks);
-   }
-
-   protected void initCflowStacksMap()
-   {
-      if (cflowStacks == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)
-      {
-         synchronized(lazyCollectionLock)
-         {
-            if (cflowStacks == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)
-            {
-               cflowStacks = new ConcurrentHashMap<String, CFlowStack>();
-            }
-         }
-      }
-   }
-}

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultAOPSystem.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -22,13 +22,61 @@
 package org.jboss.aop.plugins;
 
 import org.jboss.aop.spi.AOPSystem;
+import org.jboss.aop.spi.AbstractAOPSystem;
+import org.jboss.aop.spi.Configuration;
+import org.jboss.aop.spi.Manager;
+import org.jboss.aop.spi.Weaver;
 
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public class DefaultAOPSystem extends AOPSystem
+public class DefaultAOPSystem extends AbstractAOPSystem
 {
+   private Configuration configuration;
+   private Manager mainManager;
+   private Weaver weaver;
 
+   public DefaultAOPSystem(AOPSystem system)
+   {
+      super(system);
+   }
+
+   @Override
+   protected void setConfiguration(AOPSystem system, Configuration configuration)
+   {
+      this.configuration = configuration; 
+   }
+
+   @Override
+   protected Configuration getConfiguration(AOPSystem system)
+   {
+      return configuration;
+   }
+
+   @Override
+   protected void initRootManager(AOPSystem system)
+   {
+      mainManager = new DefaultManager(configuration);
+   }
+
+   @Override
+   protected Manager getRootManager(AOPSystem system)
+   {
+      return mainManager;
+   }
+
+   @Override
+   protected void initWeaver(AOPSystem system)
+   {
+      weaver = new DefaultWeaver(configuration);
+   }
+
+   @Override
+   protected Weaver getWeaver(AOPSystem system)
+   {
+      return null;
+   }
+
 }

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/DefaultConfiguration.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -26,7 +26,8 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.jboss.aop.AdvisorFactory;
-import org.jboss.aop.Deployment;
+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;
@@ -49,6 +50,8 @@
    protected List<String> includedInvisibleAnnotations = new CopyOnWriteArrayList<String>();
    private boolean debugClasses;
    private boolean maintainAdvisorMethodInterceptors;
+   private AOPClassLoaderScopingPolicy classLoaderScopingPolicy;
+   private ClassLoaderValidation classLoaderValidator;
    
    public DefaultConfiguration()
    {
@@ -164,6 +167,26 @@
       this.maintainAdvisorMethodInterceptors = maintainMethodInterceptors;
    }
 
+   public AOPClassLoaderScopingPolicy getClassLoaderScopingPolicy()
+   {
+      return classLoaderScopingPolicy;
+   }
+
+   public void setClassLoaderScopingPolicy(AOPClassLoaderScopingPolicy classLoaderScopingPolicy)
+   {
+      this.classLoaderScopingPolicy = classLoaderScopingPolicy;
+   }
+
+   public ClassLoaderValidation getClassLoaderValidator()
+   {
+      return classLoaderValidator;
+   }
+
+   public void setClassLoaderValidator(ClassLoaderValidation classLoaderValidator)
+   {
+      this.classLoaderValidator = classLoaderValidator;
+   }
+
    protected void initialise()
    {
       initialiseOptimized();
@@ -179,12 +202,10 @@
       //TODO Make these accessible from AOPFactory?
       //If not move them into initialiseXXX methods
       String instrument = System.getProperty(INSTRUMENTOR, null);
-      InstrumentorFactory.initialise(instrument);
+      InstrumentorFactory.initialise(verbose, instrument);
 
       String advisorName = System.getProperty(ADVISOR, null);
-      AdvisorFactory.initialise(advisorName);
-
-      Deployment.deploy();
+      AdvisorFactory.initialise(verbose, advisorName);
    }
 
    private void initialiseOptimized()

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/LoadInterceptedClassesStrategy.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/LoadInterceptedClassesStrategy.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/plugins/LoadInterceptedClassesStrategy.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -19,12 +19,13 @@
   * 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;
+package org.jboss.aop.plugins;
 
 import javassist.CodeConverter;
 import javassist.CtClass;
 import javassist.CtField;
 
+import org.jboss.aop.DynamicAOPStrategy;
 import org.jboss.aop.instrument.DynamicTransformationObserver;
 import org.jboss.aop.instrument.JoinpointClassifier;
 import org.jboss.aop.instrument.JoinpointSimpleClassifier;

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/pointcut/MatcherStrategy.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/pointcut/MatcherStrategy.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/pointcut/MatcherStrategy.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -25,10 +25,10 @@
 import java.lang.reflect.Method;
 
 import org.jboss.aop.Advisor;
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.annotation.AnnotationElement;
 import org.jboss.aop.pointcut.ast.ClassExpression;
 import org.jboss.aop.proxy.container.ClassProxyContainer;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 
 /**
@@ -79,7 +79,7 @@
          }
          catch (ClassNotFoundException e)
          {
-            if (AspectManager.verbose)
+            if (AOPSystem.getConfiguration().isVerbose())
             {
                logger.warn("The annotation @" + sub + " referenced in one of your pointcut expressions can not be found");
             }

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/container/GeneratedAOPProxyFactory.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/container/GeneratedAOPProxyFactory.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/proxy/container/GeneratedAOPProxyFactory.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -26,6 +26,7 @@
 import org.jboss.aop.Advised;
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.instrument.Untransformable;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.logging.AOPLogger;
 
 /**
@@ -55,7 +56,7 @@
       params.setObjectAsSuperClass(true);
       params.setTarget(target);
       Object proxy = proxyFactory.createAdvisedProxy(params);
-      if( AspectManager.verbose  && logger.isDebugEnabled())
+      if(AOPSystem.getConfiguration().isVerbose()  && logger.isDebugEnabled())
          logger.debug("Created proxy: "+proxy.getClass()+"@"+System.identityHashCode(proxy)+" target: "+target.getClass());
       return interfaceClass.cast(proxy);
    }

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/AOPSystem.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -21,9 +21,13 @@
 */ 
 package org.jboss.aop.spi;
 
+import java.lang.reflect.Constructor;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 
+import org.jboss.aop.Deployment;
 import org.jboss.aop.util.logging.AOPLogger;
 import org.jboss.logging.Logger;
 
@@ -33,31 +37,82 @@
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public abstract class AOPSystem
+public final class AOPSystem
 {
    private static final Logger STATIC_LOGGER = Logger.getLogger(AOPSystem.class);
    protected final AOPLogger log = AOPLogger.getLogger(this.getClass());
    
-   protected static final AOPSystem INSTANCE;
+   private static final AOPSystem INSTANCE;
    
-   protected final Configuration CONFIGURATION;
+   /**
+    * The AbstractAOPSystem called by our static methods
+    */
+   private static final AbstractAOPSystem SYSTEM;
+
    static
    {
-      INSTANCE = initialiseAOPSystem();
+      SYSTEM = initialiseAOPSystem();
+      INSTANCE = new AOPSystem();
    }
    
-   protected AOPSystem()
+   private AOPSystem()
    {
-      CONFIGURATION = initialiseConfiguration();
+      System.out.println(SYSTEM);
+      SYSTEM.setConfiguration(INSTANCE, initialiseConfiguration());
+      try
+      {
+         AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
+
+            public Object run() throws Exception
+            {
+               SYSTEM.initRootManager(INSTANCE);
+               SYSTEM.initWeaver(INSTANCE);
+               Deployment.deploy();
+               return null;
+            }});
+      }
+      catch (PrivilegedActionException e)
+      {
+         Throwable t = e.getCause();
+         System.out.println("Error initialising AOP System");
+         t.printStackTrace();
+         throw new RuntimeException(t);
+      }
    }
    
+   /**
+    * Get the Configuration singleton
+    * @return The Configuration singleton
+    */
    public static Configuration getConfiguration()
    {
-      return INSTANCE.CONFIGURATION;
+      return SYSTEM.getConfiguration(INSTANCE);
    }
 
-   private static AOPSystem initialiseAOPSystem()
+   /**
+    * Get the root Manager
+    * @return Get the root Manager
+    */
+   public static Manager getRootManager()
    {
+      return SYSTEM.getRootManager(INSTANCE);
+   }
+   
+   /**
+    * Get the Weaver
+    * @return the Weaver
+    */
+   public static Weaver getWeaver()
+   {
+      return SYSTEM.getWeaver(INSTANCE);
+   }
+   
+   /**
+    * Initialises the AOPSystem using class given in the {@link ConfigurationProperties#AOP_SYSTEM}
+    * system property.
+    */
+   private static AbstractAOPSystem initialiseAOPSystem()
+   {
       String name = AccessController.doPrivileged(new PrivilegedAction<String>() {
          public String run()
          {
@@ -67,7 +122,20 @@
       try
       {
          Class<?> clazz = Class.forName(name);
-         return (AOPSystem)clazz.newInstance();
+         if (!AbstractAOPSystem.class.isAssignableFrom(clazz))
+         {
+            throw new IllegalStateException(clazz.getName() + " is not an instance of " + AbstractAOPSystem.class.getName());
+         }
+         try
+         {
+            Constructor<?> ctor = clazz.getDeclaredConstructor(AOPSystem.class);
+            return (AbstractAOPSystem)ctor.newInstance(INSTANCE);
+         }
+         catch (Exception e)
+         {
+            throw new IllegalStateException(clazz.getName() + " does not seem to have a public constructor with " + 
+                  AOPSystem.class.getName() + " as its only argument");
+         }
       }
       catch (Exception e)
       {
@@ -76,7 +144,11 @@
       }
    }
 
-   private static Configuration initialiseConfiguration()
+   /**
+    * Initialises the AOPSystem using class given in the {@link ConfigurationProperties#AOP_SYSTEM}
+    * system property.
+    */
+   private Configuration initialiseConfiguration()
    {
       String name = AccessController.doPrivileged(new PrivilegedAction<String>() {
          public String run()
@@ -97,5 +169,6 @@
          throw new RuntimeException(e);
       }
    }
-
+   
+   
 }

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/spi/Configuration.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -24,10 +24,14 @@
 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;
 
 
 /**
+ * Interface for the singleton Configuration object that contains global
+ * configuration data
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
@@ -137,4 +141,37 @@
     * @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
+    * @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
+    * @param classLoaderValidator The classloader validation
+    */
+   //TODO SPI interface needed for ClassLoaderValidation
+   void setClassLoaderValidator(ClassLoaderValidation classLoaderValidator);
+
 }

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/standalone/Compiler.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -42,6 +42,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.Deployment;
 import org.jboss.aop.instrument.TransformationException;
+import org.jboss.aop.spi.AOPSystem;
 
 /**
  * takes jar or class files and adds needed jboss bytecode
@@ -189,9 +190,9 @@
       Thread.currentThread().setContextClassLoader(loader);
 
       Deployment.searchClasspath = true; // turn on dynamic finding of DDs
-      AspectManager.verbose = verbose;
+      AOPSystem.getConfiguration().setVerbose(verbose);
       AspectManager.suppressReferenceErrors = suppress;
-      AspectManager.optimize = optimized;
+      AOPSystem.getConfiguration().setOptimize(optimized);
       AspectManager.instance();
 
       if (report)

Modified: projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/util/JavassistToReflect.java
===================================================================
--- projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/util/JavassistToReflect.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/main/java/org/jboss/aop/util/JavassistToReflect.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -25,7 +25,7 @@
 import javassist.CtClass;
 import javassist.NotFoundException;
 
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.spi.AOPSystem;
 
 /**
  * Comment
@@ -90,7 +90,7 @@
       else
       {
          //Array initialisers are not supported
-         if (AspectManager.debugClasses)
+         if (AOPSystem.getConfiguration().isDebugClasses())
          {
             return "new " + getArrayClassName(clazz) + "[0].getClass()";
          }

Modified: projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/container/ContainerTestCase.java
===================================================================
--- projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/container/ContainerTestCase.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/container/ContainerTestCase.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -34,6 +34,7 @@
 import org.jboss.aop.MethodInfo;
 import org.jboss.aop.advice.Interceptor;
 import org.jboss.aop.joinpoint.MethodInvocation;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.aop.util.MethodHashing;
 import org.jboss.test.aop.AOPTestWithSetup;
 
@@ -73,13 +74,13 @@
 
    public void testMethodInterceptorsPopulated() throws Throwable
    {
-      AspectManager.maintainAdvisorMethodInterceptors = true;
+      AOPSystem.getConfiguration().setMaintainAdvisorMethodInterceptors(true);
       checkMethodInterceptors(true);
    }
    
    public void testMethodInterceptorsNotPopulated() throws Throwable
    {
-      AspectManager.maintainAdvisorMethodInterceptors = false;
+      AOPSystem.getConfiguration().setMaintainAdvisorMethodInterceptors(false);
       checkMethodInterceptors(false);      
    }
    

Modified: projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/stress/FileScenarioPropertyReader.java
===================================================================
--- projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/stress/FileScenarioPropertyReader.java	2009-02-20 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/aop/src/test/java/org/jboss/test/aop/stress/FileScenarioPropertyReader.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -30,7 +30,7 @@
 import java.net.URL;
 import java.util.Properties;
 
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.logging.Logger;
 
 /**
@@ -65,7 +65,7 @@
                throw new RuntimeException("Could not find config file " + file);
             }
                
-            if (AspectManager.verbose)
+            if (AOPSystem.getConfiguration().isVerbose())
             {
                System.out.println("Could not find test/scenario config file " + file + ". Creating passthrough reader");
             }

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/asintegration-core/src/main/java/org/jboss/aop/asintegration/core/AspectManagerServiceDelegate.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -56,6 +56,8 @@
 import org.jboss.aop.instrument.TransformerCommon;
 import org.jboss.aop.introduction.InterfaceIntroduction;
 import org.jboss.aop.pointcut.Pointcut;
+import org.jboss.aop.spi.AOPSystem;
+import org.jboss.aop.spi.Configuration;
 import org.jboss.logging.Logger;
 import org.jboss.system.server.ServerConfig;
 import org.w3c.dom.Document;
@@ -68,6 +70,9 @@
  */
 public abstract class AspectManagerServiceDelegate
 {
+   //TODO should be injected?
+   Configuration configuration = AOPSystem.getConfiguration();
+   
    Logger log = Logger.getLogger(AspectManagerServiceDelegate.class);
    
    static {
@@ -152,9 +157,10 @@
    /**
     * This needs setting to true in AS 4
     */
+   @Deprecated
    public void setAspectManagerMaintainAdvisorInterceptors(boolean maintain)
    {
-      AspectManager.maintainAdvisorMethodInterceptors = maintain;
+      AOPSystem.getConfiguration().setMaintainAdvisorMethodInterceptors(maintain);
    }
    
    public void setAspectManager(AspectManager manager)
@@ -237,7 +243,7 @@
          throw new FileNotFoundException("Failed to create tmpClassesDir: " + tmpClassesDir.getAbsolutePath());
       AspectManager.setClassPoolFactory(createFactory());
 
-      AspectManager.classLoaderValidator = createClassLoaderValidation();
+      configuration.setClassLoaderValidator(createClassLoaderValidation());
       // Add the tmp classes dir to our UCL classpath
 
       Deployment.searchClasspath = false; // turn off dynamic finding of DDs
@@ -251,7 +257,7 @@
       {
          attachTranslator();
       }
-      AspectManager.setClassLoaderScopingPolicy(integration.createAOPClassLoaderScopingPolicy());
+      configuration.setClassLoaderScopingPolicy(integration.createAOPClassLoaderScopingPolicy());
 
       deployBootstrapXml();
       deployBaseXml();
@@ -469,7 +475,7 @@
             list.add(tokenizer.nextToken().trim());
          }
       }
-      manager.setExclude(list);
+      configuration.setExclude(list);
    }
 
    public String getInclude()
@@ -489,7 +495,7 @@
             list.add(tokenizer.nextToken().trim());
          }
       }
-      manager.setInclude(list);
+      configuration.setInclude(list);
    }
 
    public String getIgnore()
@@ -509,7 +515,7 @@
             list.add(tokenizer.nextToken().trim());
          }
       }
-      manager.setIgnore(list);
+      configuration.setIgnore(list);
    }
    
    public String getIncludedInvisibleAnnotations()
@@ -525,7 +531,7 @@
          for(String inc : ia.split(","))
            iiaList.add(inc.trim());
       }
-      manager.setIncludedInvisibleAnnotations(iiaList);
+      configuration.setIncludedInvisibleAnnotations(iiaList);
    }
 
 
@@ -546,19 +552,19 @@
    }
 
    /**
-    * Set the verbosity of aop logging.  It doesn't use log4j
+    * Set the verbosity of aop logging.
     */
    public boolean getVerbose()
    {
-      return AspectManager.verbose;
+      return configuration.isVerbose();
    }
 
    /**
-    * Set the verbosity of aop logging.  It doesn't use log4j
+    * Set the verbosity of aop logging.
     */
    public void setVerbose(boolean verbose)
    {
-      AspectManager.verbose = verbose;
+      configuration.setVerbose(verbose);
    }
 
    /**
@@ -566,7 +572,7 @@
     */
    public boolean getOptimized()
    {
-      return AspectManager.optimize;
+      return configuration.isOptimize();
    }
 
    /**
@@ -574,7 +580,7 @@
     */
    public void setOptimized(boolean verbose)
    {
-      AspectManager.optimize = verbose;
+      configuration.setOptimize(verbose);
    }
 
    /**
@@ -793,7 +799,7 @@
 
    public void setInstrumentor(String instrumentor)
    {
-      InstrumentorFactory.initialise(instrumentor);
+      InstrumentorFactory.initialise(AOPSystem.getConfiguration().isVerbose(), instrumentor);
    }
 
    

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 11:49:30 UTC (rev 84504)
+++ projects/aop/branches/createspi/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/AOPClassLoaderInitializer.java	2009-02-20 11:50:52 UTC (rev 84505)
@@ -23,6 +23,7 @@
 
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.Domain;
+import org.jboss.aop.spi.AOPSystem;
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloading.spi.dependency.Module;
@@ -37,7 +38,7 @@
 {
    public static Domain initializeForUnit(DeploymentUnit unit)
    {
-      AOPClassLoaderScopingPolicyWithRegistry policy = (AOPClassLoaderScopingPolicyWithRegistry)AspectManager.getClassLoaderScopingPolicy();
+      AOPClassLoaderScopingPolicyWithRegistry policy = (AOPClassLoaderScopingPolicyWithRegistry)AOPSystem.getConfiguration().getClassLoaderScopingPolicy();
       registerLoaders(policy, unit);
       Domain domain = getDomain(policy.getRegistry(), unit);
       
@@ -46,7 +47,7 @@
 
    public static void unregisterLoaders(AspectManager manager, DeploymentUnit unit)
    {
-      AOPClassLoaderScopingPolicyWithRegistry policy = (AOPClassLoaderScopingPolicyWithRegistry)AspectManager.getClassLoaderScopingPolicy();
+      AOPClassLoaderScopingPolicyWithRegistry policy = (AOPClassLoaderScopingPolicyWithRegistry)AOPSystem.getConfiguration().getClassLoaderScopingPolicy();
       DomainRegistry registry = policy.getRegistry();
       if (unit.isTopLevel() || unit.getParent().getClassLoader() != unit.getClassLoader())
       {




More information about the jboss-cvs-commits mailing list