[jboss-cvs] jboss-aop/src/main/org/jboss/aop ...

Kabir Khan kkhan at jboss.com
Thu Jul 13 14:31:09 EDT 2006


  User: kkhan   
  Date: 06/07/13 14:31:09

  Modified:    src/main/org/jboss/aop         ClassicWeavingStrategy.java
                        AspectManager.java Domain.java
                        SuperClassesFirstWeavingStrategy.java
  Removed:     src/main/org/jboss/aop        
                        AOPScopedClassLoaderHelper.java AOPClassPool.java
                        ClassPoolFactory.java AOPClassPoolFactory.java
  Log:
  Refactor to wrap arouind ScopedClassPoolRepository and ScopedClassPool which has been moved to javassist
  
  Revision  Changes    Path
  1.6       +2 -1      jboss-aop/src/main/org/jboss/aop/ClassicWeavingStrategy.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ClassicWeavingStrategy.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-aop/src/main/org/jboss/aop/ClassicWeavingStrategy.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -b -r1.5 -r1.6
  --- ClassicWeavingStrategy.java	10 Jul 2006 19:09:29 -0000	1.5
  +++ ClassicWeavingStrategy.java	13 Jul 2006 18:31:08 -0000	1.6
  @@ -21,6 +21,7 @@
   */
   package org.jboss.aop;
   
  +import org.jboss.aop.classpool.AOPClassPool;
   import org.jboss.aop.instrument.Instrumentor;
   import org.jboss.aop.instrument.InstrumentorFactory;
   
  @@ -113,7 +114,7 @@
                }
   
                byte[] rtn = clazz.toBytecode();
  -             if (AspectManager.prune) clazz.prune();
  +             if (AspectManager.getPrune()) clazz.prune();
                return rtn;
             }
             else
  
  
  
  1.165     +51 -159   jboss-aop/src/main/org/jboss/aop/AspectManager.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: AspectManager.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-aop/src/main/org/jboss/aop/AspectManager.java,v
  retrieving revision 1.164
  retrieving revision 1.165
  diff -u -b -r1.164 -r1.165
  --- AspectManager.java	12 Jul 2006 09:57:18 -0000	1.164
  +++ AspectManager.java	13 Jul 2006 18:31:08 -0000	1.165
  @@ -25,8 +25,6 @@
   import java.lang.reflect.Field;
   import java.security.AccessController;
   import java.security.PrivilegedAction;
  -import java.security.PrivilegedActionException;
  -import java.security.PrivilegedExceptionAction;
   import java.security.ProtectionDomain;
   import java.util.ArrayList;
   import java.util.Collection;
  @@ -50,6 +48,9 @@
   import org.jboss.aop.advice.PrecedenceDefEntry;
   import org.jboss.aop.advice.PrecedenceSorter;
   import org.jboss.aop.advice.Scope;
  +import org.jboss.aop.classpool.AOPClassPool;
  +import org.jboss.aop.classpool.AOPClassPoolRepository;
  +import org.jboss.aop.classpool.AOPScopedClassLoaderHelper;
   import org.jboss.aop.instrument.GeneratedAdvisorInstrumentor;
   import org.jboss.aop.instrument.Instrumentor;
   import org.jboss.aop.instrument.InstrumentorFactory;
  @@ -73,7 +74,8 @@
   import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
   import javassist.ClassPool;
   import javassist.CtClass;
  -import javassist.LoaderClassPath;
  +import javassist.scopedpool.ScopedClassPoolFactory;
  +import javassist.scopedpool.ScopedClassPoolRepositoryImpl;
   
   /**
    * This singleton class manages all pointcuts and metadata.
  @@ -87,15 +89,14 @@
    * to do that.
    *
    * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
  - * @version $Revision: 1.164 $
  + * @version $Revision: 1.165 $
    */
   public class AspectManager
           implements Translator
   {
   
      // Attributes ---------------------------------------------------
  -   protected final WeakHashMap registeredCLs = new WeakHashMap();
  -   protected final HashMap ucl2classes = new HashMap();
  +   //protected static AOPClassPoolRepository classpoolRepository = new AOPClassPoolRepository(ScopedClassPoolRepositoryImpl.getInstance());
   
      protected final WeakHashMap advisors = new WeakHashMap();
      /** A map of domains by classloader, maintaned by the top level AspectManager */
  @@ -110,7 +111,7 @@
      /** A queue for adding new subscribed subdomains to */
      protected final WeakHashMap subscribedSubDomainsQueue = new WeakHashMap();
      protected int subscribedDomainQueueRef;
  -   protected ClassPool classpool;
  +//   protected ClassPool classpool;
      protected final LinkedHashMap interfaceIntroductions = new LinkedHashMap();
      protected final LinkedHashMap annotationIntroductions = new LinkedHashMap();
      protected final LinkedHashMap annotationOverrides = new LinkedHashMap();
  @@ -225,7 +226,6 @@
   
      protected static AspectManager manager;
      public static boolean optimize = true;
  -   public static boolean prune = true;
      public static boolean debugClasses;//If true, the generated advisor instrumentor will output the generated classes
      public static ClassLoaderValidation classLoaderValidator;
   
  @@ -233,7 +233,6 @@
       * logging switch.  We don't use log4j to avoid another heavy library
       */
      public static boolean verbose = false;
  -   public static ClassPoolFactory classPoolFactory = new AOPClassPoolFactory();
   
      public static synchronized AspectManager getTopLevelAspectManager()
      {
  @@ -268,7 +267,7 @@
                  String pruneit = System.getProperty("jboss.aop.prune", null);
                  if (pruneit != null)
                  {
  -                  prune = (new Boolean(pruneit)).booleanValue();
  +                  AOPClassPoolRepository.getInstance().setPrune((new Boolean(pruneit)).booleanValue());
                  }
                  manager = new AspectManager();
      
  @@ -341,7 +340,7 @@
            if (scopedClassLoader != null)
            {
               Domain scopedManager = null;
  -            synchronized (manager.registeredCLs)
  +            synchronized (AOPClassPoolRepository.getInstance().getRegisteredCLs())
               {
                  scopedManager = (Domain)manager.scopedClassLoaderDomains.get(scopedClassLoader);
                  if (scopedManager == null)
  @@ -432,14 +431,20 @@
      public static boolean suppressReferenceErrors = true;
   
      // Constructors -------------------------------------------------
  -   public AspectManager()
  +   private AspectManager(AOPClassPoolRepository repository)
      {
  -      classpool = ClassPool.getDefault();
  -      ClassLoader cl = Thread.currentThread().getContextClassLoader();
  -      classpool.insertClassPath(new LoaderClassPath(cl));
  +      //This is the top-lvel aspect manager
  +      AOPClassPoolRepository.getInstance().setAspectManager(this);
      }
   
      /**
  +    * Called by subclasses
  +    */
  +   public AspectManager()
  +   {
  +      
  +   }
  +   /**
       * Every &lt;class-metadata&gt; tag corresponds to
       * a ClassMetaDataLoader.  The ClassMetaDataLoader knows how to take
       * arbitrary XML and apply it to SimpleMetaData.
  @@ -608,41 +613,17 @@
   
      // Public -------------------------------------------------------
   
  -   public Map getRegisteredCLs()
  +   public static Map getRegisteredCLs()
      {
  -      clearUnregisteredClassLoaders();
  -      return registeredCLs;
  +      return AOPClassPoolRepository.getInstance().getRegisteredCLs();
      }
   
  -   private Map getRegisteredCLsNoClear()
  -   {
  -      return registeredCLs;
  -   }
      /**
       * This method will check to see if a register classloader has been undeployed (as in JBoss)
       */
  -   public void clearUnregisteredClassLoaders()
  -   {
  -      ArrayList toUnregister = null;
  -      synchronized (getRegisteredCLsNoClear())
  -      {
  -         Iterator it = getRegisteredCLsNoClear().values().iterator();
  -         while (it.hasNext())
  -         {
  -            AOPClassPool pool = (AOPClassPool) it.next();
  -            if (pool.isUnloadedClassLoader())
  -            {
  -               it.remove();
  -            }
  -         }
  -         if (toUnregister != null)
  -         {
  -            for (int i = 0; i < toUnregister.size(); i++)
  +   public static void clearUnregisteredClassLoaders()
               {
  -               unregisterClassLoader((ClassLoader) toUnregister.get(i));
  -            }
  -         }
  -      }
  +      AOPClassPoolRepository.getInstance().clearUnregisteredClassLoaders();
      }
   
      /**
  @@ -687,36 +668,12 @@
      
      public ClassPool registerClassLoader(ClassLoader ucl)
      {
  -      synchronized (getRegisteredCLs())
  -      {
  -         // FIXME: Probably want to take this method out later
  -         // so that AOP framework can be independent of JMX
  -         // This is in here so that we can remove a UCL from the ClassPool as a
  -         // ClassPool.classpath
  -         if (getRegisteredCLs().containsKey(ucl))
  -         {
  -            return (ClassPool) getRegisteredCLs().get(ucl);
  -         }
  -         AOPClassPool pool = AOPClassPool.createAOPClassPool(ucl, classpool, this);
  -         getRegisteredCLs().put(ucl, pool);
  -         return pool;
  -      }
  -   }
  -
  -   protected Map getUcl2Classes()
  -   {
  -      return ucl2classes;
  +      return AOPClassPoolRepository.getInstance().registerClassLoader(ucl);
      }
      
      protected void registerClass(Class clazz)
      {
  -      HashSet classes = (HashSet) getUcl2Classes().get(clazz.getClassLoader());
  -      if (classes == null)
  -      {
  -         classes = new HashSet();
  -         getUcl2Classes().put(clazz.getClassLoader(), classes);
  -      }
  -      classes.add(clazz);
  +      AOPClassPoolRepository.getInstance().registerClass(clazz);
      }
   
      protected Map getScopedClassLoaderDomains()
  @@ -726,55 +683,10 @@
      
      public void unregisterClassLoader(ClassLoader cl)
      {
  -      if (System.getSecurityManager() == null)
  -      {
  -         UnregisterClassLoaderAction.NON_PRIVILEGED.unregister(this, cl);
  -      }
  -      else
  -      {
  -         UnregisterClassLoaderAction.PRIVILEGED.unregister(this, cl);
  -      }
  -   }
  -   
  -   private void doUnregisterClassLoader(ClassLoader cl)
  -   {
  -      synchronized (getRegisteredCLs())
  -      {
  -         AOPClassPool pool = (AOPClassPool) getRegisteredCLs().remove(cl);
  -         if (pool != null) pool.close();
  -         HashSet classes = (HashSet) getUcl2Classes().remove(cl);
  -         if (classes != null)
  -         {
  -            Iterator it = classes.iterator();
  -            while (it.hasNext())
  -            {
  -               Object clazz = it.next();
  -               synchronized (advisors)
  -               {
  -                  advisors.remove(clazz);
  -                  Class advisedClass = (Class)clazz;
  -                  try
  -                  {
  -                     //The static advisor field should be the only remaining hard reference to the advisor
  -                     Field f = advisedClass.getDeclaredField(Instrumentor.HELPER_FIELD_NAME);
  -                     f.setAccessible(true);
  -                     f.set(null, null);
  -                  }
  -                  catch(NoSuchFieldException e)
  -                  {
  -                     System.out.println("[warn] Error unsetting advisor for " + advisedClass.getName() + " " + e);
  -                  }
  -                  catch(IllegalAccessException e)
  -                  {
  -                     System.out.println("[warn] Error unsetting advisor for " + advisedClass.getName() + " " + e);
  -                  }
  -               }
  -            }
  -         }
  -         
  +      AOPClassPoolRepository.getInstance().unregisterClassLoader(cl);
  +      //top-level only
            getScopedClassLoaderDomains().remove(cl);
         }
  -   }
   
      public ArrayList getExclude()
      {
  @@ -855,6 +767,26 @@
         return false;
      }
   
  +   public static boolean getPrune()
  +   {
  +      return AOPClassPoolRepository.getInstance().isPrune();
  +   }
  +   
  +   public static void setPrune(boolean prune)
  +   {
  +      AOPClassPoolRepository.getInstance().setPrune(prune);
  +   }
  +   
  +   public static void setClassPoolFactory(ScopedClassPoolFactory factory)
  +   {
  +      AOPClassPoolRepository.getInstance().setClassPoolFactory(factory);
  +   }
  +   
  +   public static ScopedClassPoolFactory getClassPoolFactory()
  +   {
  +      return AOPClassPoolRepository.getInstance().getClassPoolFactory();
  +   }
  +   
      public boolean isNonAdvisableClassName(String classname)
      {
         if (ignoreClass(classname)) return true;
  @@ -1970,46 +1902,6 @@
         return copied;
      }   
      
  -   interface UnregisterClassLoaderAction
  -   {
  -      void unregister(AspectManager manager, ClassLoader loader);
  -      
  -      UnregisterClassLoaderAction PRIVILEGED = new UnregisterClassLoaderAction()
  -      {
  -         public void unregister(final AspectManager manager, final ClassLoader loader)
  -         {
  -            try
  -            {
  -               AccessController.doPrivileged(new PrivilegedExceptionAction()
  -               {
  -                  public Object run()
  -                  {
  -                     manager.doUnregisterClassLoader(loader);
  -                     return null;
  -                  }
  -               });
  -            }
  -            catch (PrivilegedActionException e)
  -            {
  -               Exception ex = e.getException();
  -               if (ex instanceof RuntimeException) 
  -               { 
  -                  throw (RuntimeException)ex;
  -               }
  -               throw new RuntimeException(ex);
  -            }
  -         }
  -      };
  -
  -      UnregisterClassLoaderAction NON_PRIVILEGED = new UnregisterClassLoaderAction()
  -      {
  -         public void unregister(AspectManager manager, ClassLoader loader)
  -         {
  -            manager.doUnregisterClassLoader(loader);
  -         }
  -      };
  -   }
  -   
   /*
      public void dumpSubDomainsAndAdvisors(int indent)
      {
  
  
  
  1.14      +1 -14     jboss-aop/src/main/org/jboss/aop/Domain.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Domain.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-aop/src/main/org/jboss/aop/Domain.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -b -r1.13 -r1.14
  --- Domain.java	14 May 2006 13:04:24 -0000	1.13
  +++ Domain.java	13 Jul 2006 18:31:08 -0000	1.14
  @@ -46,7 +46,7 @@
    * Comment
    *
    * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
  - * @version $Revision: 1.13 $
  + * @version $Revision: 1.14 $
    */
   public class Domain extends AspectManager
   {
  @@ -678,19 +678,6 @@
      //Methods that should delegate to the top AspectManager
      
      /** Managed by the top-level aspect manager */
  -   public Map getRegisteredCLs()
  -   {
  -      //ClassLoaders etc. are only managed by the top-level AspectManager
  -      return parent.getRegisteredCLs();
  -   }
  -   
  -   /** Managed by the top-level aspect manager */
  -   protected Map getUcl2Classes()
  -   {
  -      return parent.getUcl2Classes();
  -   }
  -
  -   /** Managed by the top-level aspect manager */
      protected Map getScopedClassLoaderDomains()
      {
         return parent.getScopedClassLoaderDomains();
  
  
  
  1.7       +30 -20    jboss-aop/src/main/org/jboss/aop/SuperClassesFirstWeavingStrategy.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: SuperClassesFirstWeavingStrategy.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-aop/src/main/org/jboss/aop/SuperClassesFirstWeavingStrategy.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -b -r1.6 -r1.7
  --- SuperClassesFirstWeavingStrategy.java	10 Jul 2006 19:09:29 -0000	1.6
  +++ SuperClassesFirstWeavingStrategy.java	13 Jul 2006 18:31:08 -0000	1.7
  @@ -23,6 +23,7 @@
   
   import java.util.Map;
   
  +import org.jboss.aop.classpool.AOPClassPool;
   import org.jboss.aop.instrument.Instrumentor;
   import org.jboss.aop.instrument.InstrumentorFactory;
   
  @@ -58,6 +59,7 @@
   			{
   				return null;
   			}
  +         
   			AOPClassPool pool = (AOPClassPool) manager.registerClassLoader(loader);
   
   			CtClassTransformationInfo info = obtainCtClassInfo(pool, className, classfileBuffer);
  @@ -70,7 +72,7 @@
                  info.getClazz().debugWriteFile();
               }
   				byte[] rtn = info.getClazz().toBytecode();
  -				if (AspectManager.prune) info.getClazz().prune();
  +				if (AspectManager.getPrune()) info.getClazz().prune();
   				return rtn;
   			}
   			else
  @@ -120,6 +122,10 @@
   			pool.insertClassPath(cp);
   			return new CtClassTransformationInfo(pool.getLocally(className), className);
   		}
  +      catch(Error e)
  +      {
  +         return null;
  +      }
   	}
   
   	private CtClass instrumentClass(AspectManager manager, ClassLoader loader, AOPClassPool pool, CtClassTransformationInfo info, boolean isLoadedClass) throws NotFoundException, Exception
  @@ -180,6 +186,9 @@
   					//info.getClazz().defrost();
   				}
   
  +            boolean transformed = info.getClazz().isModified(); 
  +            if (!transformed)
  +            {
   				ClassAdvisor advisor =
                      AdvisorFactory.getClassAdvisor(info.getClazz(), manager);
   				Instrumentor instrumentor = InstrumentorFactory.getInstrumentor(
  @@ -198,7 +207,8 @@
   
               manager.attachMetaData(advisor, info.getClazz(), true);
               manager.applyInterfaceIntroductions(advisor, info.getClazz());
  -				boolean transformed = instrumentor.transform(info.getClazz(), advisor);
  +   				transformed = instrumentor.transform(info.getClazz(), advisor);
  +            }
   				if (transformed)
   				{
   					if (!isLoadedClass )
  
  
  



More information about the jboss-cvs-commits mailing list