[jboss-cvs] JBossAS SVN: r87799 - in projects/aop/trunk: aop/src/main/java/org/jboss/aop/classpool and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Apr 24 09:53:02 EDT 2009


Author: kabir.khan at jboss.com
Date: 2009-04-24 09:53:02 -0400 (Fri, 24 Apr 2009)
New Revision: 87799

Added:
   projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/POJOForContainerProxy.java
Modified:
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/Advisor.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectManager.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassContainer.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ClassProxyContainer.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ContainerProxyFactory.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ProxyAdvisorDomain.java
   projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/FoundInvoker.java
   projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/NotFoundInvoker.java
   projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/test/WeavingTest.java
   projects/aop/trunk/asintegration-mc/src/test/resources/org/jboss/test/aop/classpool/jbosscl/weaving/test/WeavingTestCase-aop.xml
Log:
[JBAOP-707] Test ContainerProxies and fix how the ProxyAdvisorDomains are cleaned up on undeploy of the classloader

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/Advisor.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/Advisor.java	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/Advisor.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -220,7 +220,7 @@
     */
    protected static Object NULL_ASPECT = new Object();
    
-   private static final AOPLogger logger = AOPLogger.getLogger(Advisor.class);
+   protected final AOPLogger logger = AOPLogger.getLogger(this.getClass());
    
    //When resolving annotations from the annotation repository we don't want to hit the annotation repository with the metadata from base-aspects.xml (@security, @transaction etc.)
    //EJB 3 uses a custom metadata loader that tries to load up all these classes by name, and that will cause errors when loading up the annotations

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectManager.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectManager.java	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectManager.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -128,6 +128,10 @@
 
    /** A queue for adding new subscribed subdomains to */
    protected volatile WeakHashMap<Domain, Object> subscribedSubDomainsQueue = UnmodifiableEmptyCollections.EMPTY_WEAK_HASHMAP;
+
+   /** The proxy advisor domains in subscribedSubDomains(Queue) */
+   protected volatile WeakHashMap<ClassLoader, Set<Domain>> proxyAdvisorDomains = UnmodifiableEmptyCollections.EMPTY_WEAK_HASHMAP;
+   
    protected int subscribedDomainQueueRef;
 
    protected volatile LinkedHashMap<String, InterfaceIntroduction> interfaceIntroductions = UnmodifiableEmptyCollections.EMPTY_LINKED_HASHMAP;
@@ -576,20 +580,41 @@
             }
          }
       }
+      Domain subDomain = null;
       synchronized (subDomainsPerClass)
       {
          WeakReference<Domain> subDomainRef = subDomainsPerClass.remove(clazz);
          if (subDomainRef != null)
          {
-            Domain subDomain = subDomainRef.get();
+            subDomain = subDomainRef.get();
             if (subDomain != null)
             {
                subDomain.cleanAdvisor(clazz);
-               unsubscribeSubDomain(subDomain);
             }
          }
       }
+      
+      if (subDomain != null)
+      {
+         unsubscribeSubDomain(subDomain);
+      }
    }
+   
+   public void cleanProxyAdvisorDomains(ClassLoader loader)
+   {
+      Set<Domain> domains = null;
+      synchronized (proxyAdvisorDomains)
+      {
+         domains = proxyAdvisorDomains.remove(loader);
+      }
+      if (domains != null)
+      {
+         for (Domain domain : domains)
+         {
+            unsubscribeSubDomain(domain);
+         }
+      }
+   }
 
    /**
     * Returns the binding map.
@@ -2315,6 +2340,21 @@
       return subscribedSubDomains;
    }
 
+   public void subscribeProxyAdvisorDomain(ClassLoader loader, Domain domain)
+   {
+      initProxyAdvisorDomainsMap();
+      synchronized (proxyAdvisorDomains)
+      {
+         Set<Domain> domains = proxyAdvisorDomains.get(loader);
+         if (domains == null)
+         {
+            domains = new HashSet<Domain>();
+            proxyAdvisorDomains.put(loader, domains);
+         }
+         domains.add(domain);
+      }
+   }
+   
    private Advisor getAdvisorFromAdvisorsKeySetIterator(Iterator<Class<?>> it)
    {
       Class<?> clazz = it.next();
@@ -2473,6 +2513,20 @@
       }
    }
 
+   protected void initProxyAdvisorDomainsMap()
+   {
+      if (proxyAdvisorDomains == UnmodifiableEmptyCollections.EMPTY_WEAK_HASHMAP)
+      {
+         synchronized(lazyCollectionLock)
+         {
+            if (proxyAdvisorDomains == UnmodifiableEmptyCollections.EMPTY_WEAK_HASHMAP)
+            {
+               proxyAdvisorDomains = new WeakHashMap<ClassLoader, Set<Domain>>();
+            }
+         }
+      }
+   }
+   
    protected void initInterfaceIntroductionsMap()
    {
       if (interfaceIntroductions == UnmodifiableEmptyCollections.EMPTY_LINKED_HASHMAP)

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassContainer.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassContainer.java	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassContainer.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -42,7 +42,6 @@
 import org.jboss.aop.util.ConstructorComparator;
 import org.jboss.aop.util.FieldComparator;
 import org.jboss.aop.util.MethodHashing;
-import org.jboss.aop.util.logging.AOPLogger;
 
 /**
  * Comment
@@ -52,7 +51,7 @@
  */
 public class ClassContainer extends Advisor
 {
-   private static final AOPLogger logger = AOPLogger.getLogger(ClassContainer.class);
+   //private static final AOPLogger logger = AOPLogger.getLogger(ClassContainer.class);
    
    private boolean chainOverridingForInheritedMethods;
    

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/classpool/AOPClassPoolRepository.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -216,6 +216,8 @@
                }
             }
          }
+         
+         manager.cleanProxyAdvisorDomains(cl);
       }
    }
 

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ClassProxyContainer.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ClassProxyContainer.java	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ClassProxyContainer.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -21,19 +21,19 @@
   */
 package org.jboss.aop.proxy.container;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
 
 import javassist.runtime.Inner;
 
 import org.jboss.aop.Advisor;
-import org.jboss.aop.ClassContainer;
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.ClassAdvisor;
+import org.jboss.aop.ClassContainer;
 import org.jboss.aop.MethodInfo;
 import org.jboss.aop.advice.AspectDefinition;
 import org.jboss.aop.introduction.InterfaceIntroduction;
@@ -161,7 +161,16 @@
       }
       for (int j = 0; intf != null && j < intf.length; ++j)
       {
-         Class<?> iface = cl.loadClass(intf[j]);
+         Class<?> iface = null;
+         try
+         {
+            iface = cl.loadClass(intf[j]);
+         }
+         catch(ClassNotFoundException e)
+         {
+            logger.warn("Could not load interface " + intf[j] + " for proxy " + clazz.getName() + " for class " + clazz.getSuperclass().getName() + " using loader " + getClassLoader() + " - not adding interface methods");
+            continue;
+         }
          Method[] ifaceMethods = iface.getMethods();
          for (int k = 0; k < ifaceMethods.length; k++)
          {

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ContainerProxyFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ContainerProxyFactory.java	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ContainerProxyFactory.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -62,6 +62,7 @@
 import org.jboss.aop.introduction.InterfaceIntroduction;
 import org.jboss.aop.proxy.ClassProxyFactory;
 import org.jboss.aop.util.JavassistMethodHashing;
+import org.jboss.aop.util.logging.AOPLogger;
 
 
 /**
@@ -70,6 +71,8 @@
  */
 public class ContainerProxyFactory
 {
+   final static AOPLogger logger = AOPLogger.getLogger(ContainerProxyFactory.class);
+   
    final static String DELEGATE = Delegate.class.getName();
    final static String ASPECT_MANAGED = AspectManaged.class.getName();
    
@@ -1021,11 +1024,11 @@
        * 
        * @param intro The InterfaceIntroduction
        * @param intfs receives the interfaces from plain interface introductions
-       * @param mixinInterfaces receives the interfaces from mixins
+       * @param mi   xinInterfaces receives the interfaces from mixins
        * @param mixes receives the actual InterfaceIntroduction.Mixin objects
        * @@param the index interface introduction this data comes from 
        */
-      private void getIntroductionInterfaces(InterfaceIntroduction intro, 
+      private boolean getIntroductionInterfaces(InterfaceIntroduction intro, 
             HashMap<String, Integer> intfs, 
             HashMap<String, Integer> mixinInterfaces, 
             ArrayList<MixinInfo> mixes, 
@@ -1033,9 +1036,18 @@
       {
          for (InterfaceIntroduction.Mixin mixin : intro.getMixins())
          {
-            mixes.add(new MixinInfo(mixin));
+            if (canLoadCtClass(mixin.getClassName()) == false)
+            {
+               logger.warn("Could not load mixin class " + mixin.getClassName() + " for proxy " + clazz.getName() + " for class " + clazz.getSuperclass().getName() + " using classpool " + pool + " - not adding mixin");
+               continue;
+            }
             for (int i = 0; i < mixin.getInterfaces().length; i++)
             {
+               if (canLoadCtClass(mixin.getInterfaces()[i]) == false)
+               {
+                  logger.warn("Could not load interface " + mixin.getInterfaces()[i] + " for mixin " + mixin.getClassName() + " for proxy " + clazz.getName() + " for class " + clazz.getSuperclass().getName() + " using classpool " + pool + " - not adding mixin");
+                  break;
+               }
                if (intfs.containsKey(mixin.getInterfaces()[i]))
                {
                   intfs.remove(mixin.getInterfaces()[i]);
@@ -1047,11 +1059,17 @@
                }
                mixinInterfaces.put(mixin.getInterfaces()[i], new Integer(idx));
             }
+            mixes.add(new MixinInfo(mixin));
          }
          if (intro.getInterfaces() != null)
          {
             for (int i = 0; i < intro.getInterfaces().length; i++)
             {
+               if (canLoadCtClass(intro.getInterfaces()[i]) == false)
+               {
+                  logger.warn("Could not load introduced interface " + intro.getInterfaces()[i] + " for proxy " + clazz.getName() + " for class " + clazz.getSuperclass().getName() + " using classpool " + pool + " - not adding mixin");
+                  continue;
+               }
                if (intfs.containsKey(intro.getInterfaces()[i]) || mixinInterfaces.containsKey(intro.getInterfaces()[i])) 
                {
                   //Do nothing
@@ -1062,9 +1080,23 @@
                }
             }
          }
+         return true;
       }
    }
    
+   private boolean canLoadCtClass(String name)
+   {
+      try
+      {
+         pool.get(name);
+         return true;
+      }
+      catch(NotFoundException e)
+      {
+         return false;
+      }
+   }
+   
    private class UnmarshalledInRemoteJVMProxyStrategy implements ProxyStrategy
    {
       MarshalledContainerProxy outOfVmProxy;

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ProxyAdvisorDomain.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ProxyAdvisorDomain.java	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/ProxyAdvisorDomain.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -47,7 +47,7 @@
       super(manager, name, clazz, instanceDomain);
       super.setInheritsBindings(true);
       super.setInheritsDeclarations(true);
-
+      manager.subscribeProxyAdvisorDomain(SecurityActions.getClassLoader(clazz), this);
    }
 
    public Advisor getAdvisor()
@@ -70,5 +70,4 @@
    {
       advisors.remove(advisor.getClazz());
    }
-   
 }

Modified: projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/FoundInvoker.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/FoundInvoker.java	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/FoundInvoker.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -29,6 +29,9 @@
 import org.jboss.aop.Advised;
 import org.jboss.aop.Advisor;
 import org.jboss.aop.annotation.AnnotationRepository;
+import org.jboss.aop.proxy.container.AOPProxyFactory;
+import org.jboss.aop.proxy.container.AOPProxyFactoryParameters;
+import org.jboss.aop.proxy.container.GeneratedAOPProxyFactory;
 import org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.IntroducedAnnotation;
 import org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.MarkerInterface;
 import org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.MixinImpl;
@@ -192,4 +195,31 @@
             "{ilbcj}{ilbc}{elav}{elaj}{elai}{elacj}{elac}{ilav}{ilaj}{ilai}" +
             "{ilacj}{ilac}{elfv}{elfj}{elfi}{elfcj}{elfc}{ilfv}{ilfj}{ilfi}{ilfcj}{ilfc}");
    }
+   
+   public static void invokeContainerProxy()
+   {
+      POJOForContainerProxy pojo = new POJOForContainerProxy();
+      Assert.assertFalse(pojo instanceof Advised);
+      
+      AOPProxyFactory factory = new GeneratedAOPProxyFactory();
+      AOPProxyFactoryParameters params = new AOPProxyFactoryParameters();
+      params.setTarget(pojo);
+      POJOForContainerProxy proxy = (POJOForContainerProxy)factory.createAdvisedProxy(params);
+      
+      Assert.assertTrue(proxy instanceof MarkerInterface);
+      Assert.assertTrue(proxy instanceof MixinInterface);
+      Assert.assertFalse(MixinImpl.invoked);
+      ((MixinInterface)proxy).method();
+      Assert.assertTrue(MixinImpl.invoked);
+      
+      Interceptions.clear();
+      proxy.method("XXX");
+      
+      Interceptions.assertEquals("(eiv)(eij)(eii)(eicj)(eic)(iiv)(iij)(iii)(iicj)(iic)" +
+      		"(eav)(eaj)(eai)(eacj)(eac)(iav)(iaj)(iai)(iacj)(iac)" +
+      		"(efav)(efacj)(efai)(efaj)(efac)(ifav)(ifacj)(ifai)(ifaj)(ifac)" +
+      		"XXX{ifac}{ifaj}{ifai}{ifacj}{ifav}{efac}{efaj}{efai}{efacj}{efav}" +
+      		"{iac}{iacj}{iai}{iaj}{iav}{eac}{eacj}{eai}{eaj}{eav}" +
+      		"{iic}{iicj}{iii}{iij}{iiv}{eic}{eicj}{eii}{eij}{eiv}");
+   }
 }

Modified: projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/NotFoundInvoker.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/NotFoundInvoker.java	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/NotFoundInvoker.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -29,6 +29,12 @@
 import org.jboss.aop.Advised;
 import org.jboss.aop.Advisor;
 import org.jboss.aop.annotation.AnnotationRepository;
+import org.jboss.aop.proxy.container.AOPProxyFactory;
+import org.jboss.aop.proxy.container.AOPProxyFactoryParameters;
+import org.jboss.aop.proxy.container.GeneratedAOPProxyFactory;
+import org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.MarkerInterface;
+import org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.MixinImpl;
+import org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.MixinInterface;
 import org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.interceptions.Interceptions;
 
 
@@ -215,4 +221,38 @@
             "{ilbcj}{ilbc}{ilav}{ilaj}{ilai}" +
             "{ilacj}{ilac}{ilfv}{ilfj}{ilfi}{ilfcj}{ilfc}");
    }
+   
+   public static void invokeContainerProxy()
+   {
+      POJOForContainerProxy pojo = new POJOForContainerProxy();
+      Assert.assertFalse(pojo instanceof Advised);
+      
+      AOPProxyFactory factory = new GeneratedAOPProxyFactory();
+      AOPProxyFactoryParameters params = new AOPProxyFactoryParameters();
+      params.setTarget(pojo);
+      POJOForContainerProxy proxy = (POJOForContainerProxy)factory.createAdvisedProxy(params);
+      
+      for (Class<?> iface : pojo.getClass().getInterfaces())
+      {
+         if (iface.getName().contains("MarkerInterface"))
+         {
+            Assert.fail("Should not have found MarkerInterface");
+         }
+         else if (iface.getName().contains("MixinInterface"))
+         {
+            Assert.fail("Should not have found MixinInterface");
+         }
+      }
+
+      Interceptions.clear();
+      proxy.method("XXX");
+      
+      Interceptions.assertEquals("(iiv)(iij)(iii)(iicj)(iic)" +
+            "(iav)(iaj)(iai)(iacj)(iac)" +
+            "(ifav)(ifacj)(ifai)(ifaj)(ifac)" +
+            "XXX{ifac}{ifaj}{ifai}{ifacj}{ifav}" +
+            "{iac}{iacj}{iai}{iaj}{iav}" +
+            "{iic}{iicj}{iii}{iij}{iiv}");
+   }
+
 }

Added: projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/POJOForContainerProxy.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/POJOForContainerProxy.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/support/excluded/target/POJOForContainerProxy.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -0,0 +1,37 @@
+/*
+* 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.test.aop.classpool.jbosscl.weaving.support.excluded.target;
+
+import org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.interceptions.Interceptions;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class POJOForContainerProxy
+{
+   public void method(String arg)
+   {
+      Interceptions.append(arg);
+   }
+}

Modified: projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/test/WeavingTest.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/test/WeavingTest.java	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/weaving/test/WeavingTest.java	2009-04-24 13:53:02 UTC (rev 87799)
@@ -55,7 +55,6 @@
    
    public final static String AOP_XML = "org/jboss/test/aop/classpool/jbosscl/weaving/test/WeavingTestCase-aop.xml"; 
 
-   
    public WeavingTest(String name)
    {
       super(name);
@@ -63,129 +62,46 @@
    
    protected abstract boolean invokeLightWeightAspects();
    
-   public void testImportAllAspects() throws Exception
+   public void testImportAllWovenAspects() throws Exception
    {
-      runTest(
-            CLASS_FOUND_INVOKER, 
-            new ClassLoaderSetup()
-            {
-      
-               public ClassPool setupTargetPool() throws Exception
-               {
-                  return createChildDomainParentLastClassPool("TARGET", DOMAIN, true, JAR_TARGET);
-               }
-            
-               public ClassPool setupAspectsPool() throws Exception
-               {
-                  return createChildDomainParentLastClassPool("ASPECTS", DOMAIN, true, JAR_ASPECTS);
-               }
-
-               public ClassPool setupInterceptionsPool() throws Exception
-               {
-                  return createChildDomainParentLastClassPool("INTERCEPTIONS", DOMAIN, true, JAR_INTERCEPTIONS);
-               }
-            });
+      runTest(CLASS_FOUND_INVOKER, new ImportAllSetup(), new WovenInvokerSetup());
    }
    
    public void testNotImportAllAspectsNotIncluded() throws Exception
    {
-      runTest(
-            CLASS_NOT_FOUND_INVOKER,
-            new ClassLoaderSetup()
-            {
-            
-               public ClassPool setupTargetPool() throws Exception
-               {
-                  BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().createModule("Target").createRequireModule("INTERCEPTIONS");
-                  return createChildDomainParentLastClassPool("TARGET", DOMAIN, builder, JAR_TARGET);
-               }
-            
-               public ClassPool setupAspectsPool() throws Exception
-               {
-                  BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().createModule("Aspects").createRequireModule("INTERCEPTIONS");
-                  return createChildDomainParentLastClassPool("ASPECTS", DOMAIN, builder, JAR_ASPECTS);
-               }
-
-               public ClassPool setupInterceptionsPool() throws Exception
-               {
-                  BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
-                     createModule("INTERCEPTIONS").
-                     createPackage(PACKAGE_INTERCEPTIONS);
-                  return createChildDomainParentLastClassPool("INTERCEPTIONS", DOMAIN, builder, JAR_INTERCEPTIONS);
-               }
-            });
+      runTest(CLASS_NOT_FOUND_INVOKER, new NotImportAllSetup(), new WovenInvokerSetup());
    }
    
    public void testNotImportAllAspectsIncludedByPackage() throws Exception
    {
-      runTest(
-            CLASS_FOUND_INVOKER, 
-            new ClassLoaderSetup()
-            {
-               public ClassPool setupTargetPool() throws Exception
-               {
-                  BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
-                     createModule("TARGET").
-                     createRequirePackage(PACKAGE_ASPECTS).
-                     createRequirePackage(PACKAGE_INTERCEPTIONS);
-                  return createChildDomainParentLastClassPool("TARGET", DOMAIN, builder, JAR_TARGET);
-               }
-            
-               public ClassPool setupAspectsPool() throws Exception
-               {
-                  BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
-                     createModule("ASPECTS").
-                     createPackage(PACKAGE_ASPECTS).
-                     createRequirePackage(PACKAGE_INTERCEPTIONS);
-                  return createChildDomainParentLastClassPool("ASPECTS", DOMAIN, builder, JAR_ASPECTS);
-               }
-
-
-               public ClassPool setupInterceptionsPool() throws Exception
-               {
-                  BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
-                     createModule("INTERCEPTIONS").
-                     createPackage(PACKAGE_INTERCEPTIONS);
-                  return createChildDomainParentLastClassPool("INTERCEPTIONS", DOMAIN, builder, JAR_INTERCEPTIONS);
-               }
-            });
+      runTest(CLASS_FOUND_INVOKER, new ImportPackageSetup(), new WovenInvokerSetup());
    }
    
    public void testNotImportAllAspectsIncludedByModule() throws Exception
    {
-      runTest(
-            CLASS_FOUND_INVOKER, 
-            new ClassLoaderSetup()
-            {
-               public ClassPool setupTargetPool() throws Exception
-               {
-                  BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
-                     createModule("TARGET").
-                     createRequireModule("ASPECTS").
-                     createRequireModule("INTERCEPTIONS");
-                  return createChildDomainParentLastClassPool("TARGET", DOMAIN, builder, JAR_TARGET);
-               }
-            
-               public ClassPool setupAspectsPool() throws Exception
-               {
-                  BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
-                     createModule("ASPECTS").
-                     createPackage(PACKAGE_ASPECTS).
-                     createRequireModule("INTERCEPTIONS");
-                  return createChildDomainParentLastClassPool("ASPECTS", DOMAIN, builder, JAR_ASPECTS);
-               }
-
-
-               public ClassPool setupInterceptionsPool() throws Exception
-               {
-                  BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
-                     createModule("INTERCEPTIONS").
-                     createPackage(PACKAGE_INTERCEPTIONS);
-                  return createChildDomainParentLastClassPool("INTERCEPTIONS", DOMAIN, builder, JAR_INTERCEPTIONS);
-               }
-            });
+      runTest(CLASS_FOUND_INVOKER, new ImportModuleSetup(), new WovenInvokerSetup()); 
    }
    
+   public void testImportAllContainerProxy() throws Exception
+   {
+      runTest(CLASS_FOUND_INVOKER, new ImportAllSetup(), new ContainerProxyInvokerSetup());
+   }
+   
+   public void testNotImportAllContainerProxy() throws Exception
+   {
+      runTest(CLASS_NOT_FOUND_INVOKER, new NotImportAllSetup(), new ContainerProxyInvokerSetup());
+   }
+   
+   public void testNotImportAllContainerProxyIncludedByPackage() throws Exception
+   {
+      runTest(CLASS_FOUND_INVOKER, new ImportPackageSetup(), new ContainerProxyInvokerSetup());
+   }
+   
+   public void testNotImportAllContainerProxyIncludedByModule() throws Exception
+   {
+      runTest(CLASS_FOUND_INVOKER, new ImportModuleSetup(), new ContainerProxyInvokerSetup()); 
+   }
+   
    private void deployAopXml(ClassLoader cl) throws Exception
    {
       URL aopUrl = this.getClass().getClassLoader().getResource(AOP_XML);
@@ -198,17 +114,20 @@
       AspectXmlLoader.undeployXML(aopUrl, AspectManager.instance());
    }
    
-   public void runTest(String invokerName, ClassLoaderSetup setup) throws Exception
+   public void runTest(String invokerName, ClassLoaderSetup classLoaderSetup, InvokerSetup invokerSetup) throws Exception
    {
-      getSystem().setTranslator(new TestTranslator());
+      if (invokerSetup.useWeaving())
+      {
+         getSystem().setTranslator(new TestTranslator());
+      }
       ClassPool interceptionsPool = null;
       ClassPool targetPool = null;
       ClassPool aspectsPool = null;
       try
       {
-         interceptionsPool = setup.setupInterceptionsPool();
-         aspectsPool = setup.setupAspectsPool();
-         targetPool = setup.setupTargetPool();
+         interceptionsPool = classLoaderSetup.setupInterceptionsPool();
+         aspectsPool = classLoaderSetup.setupAspectsPool();
+         targetPool = classLoaderSetup.setupTargetPool();
          
          System.out.println("Target loader: " + targetPool.getClassLoader() + "; Aspect loader: " + aspectsPool.getClassLoader());
 
@@ -217,9 +136,7 @@
          try
          {
             Thread.currentThread().setContextClassLoader(targetPool.getClassLoader());
-            Class<?> invoker = targetPool.getClassLoader().loadClass(invokerName);
-            Method m = invoker.getMethod("invoke", Boolean.TYPE);
-            m.invoke(null, invokeLightWeightAspects());
+            invokerSetup.invoke(targetPool, invokerName);
          }
          finally
          {
@@ -229,7 +146,10 @@
       }
       finally
       {
-         getSystem().setTranslator(null);
+         if (invokerSetup.useWeaving())
+         {
+            getSystem().setTranslator(null);
+         }
          unregisterClassPool(targetPool);
          unregisterClassPool(aspectsPool);
          unregisterClassPool(interceptionsPool);
@@ -237,10 +157,149 @@
       }
    }
    
-   private interface ClassLoaderSetup
+   interface ClassLoaderSetup
    {
       ClassPool setupInterceptionsPool() throws Exception;
       ClassPool setupTargetPool() throws Exception;
       ClassPool setupAspectsPool() throws Exception;
    }
+   
+   class ImportAllSetup implements ClassLoaderSetup
+   {
+      
+      public ClassPool setupTargetPool() throws Exception
+      {
+         return createChildDomainParentLastClassPool("TARGET", DOMAIN, true, JAR_TARGET);
+      }
+   
+      public ClassPool setupAspectsPool() throws Exception
+      {
+         return createChildDomainParentLastClassPool("ASPECTS", DOMAIN, true, JAR_ASPECTS);
+      }
+
+      public ClassPool setupInterceptionsPool() throws Exception
+      {
+         return createChildDomainParentLastClassPool("INTERCEPTIONS", DOMAIN, true, JAR_INTERCEPTIONS);
+      }
+   } 
+   
+   class NotImportAllSetup implements ClassLoaderSetup
+   {
+      
+      public ClassPool setupTargetPool() throws Exception
+      {
+         BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().createModule("Target").createRequireModule("INTERCEPTIONS");
+         return createChildDomainParentLastClassPool("TARGET", DOMAIN, builder, JAR_TARGET);
+      }
+   
+      public ClassPool setupAspectsPool() throws Exception
+      {
+         BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().createModule("Aspects").createRequireModule("INTERCEPTIONS");
+         return createChildDomainParentLastClassPool("ASPECTS", DOMAIN, builder, JAR_ASPECTS);
+      }
+
+      public ClassPool setupInterceptionsPool() throws Exception
+      {
+         BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
+            createModule("INTERCEPTIONS").
+            createPackage(PACKAGE_INTERCEPTIONS);
+         return createChildDomainParentLastClassPool("INTERCEPTIONS", DOMAIN, builder, JAR_INTERCEPTIONS);
+      }
+   } 
+   
+   class ImportPackageSetup implements ClassLoaderSetup
+   {
+      public ClassPool setupTargetPool() throws Exception
+      {
+         BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
+            createModule("TARGET").
+            createRequirePackage(PACKAGE_ASPECTS).
+            createRequirePackage(PACKAGE_INTERCEPTIONS);
+         return createChildDomainParentLastClassPool("TARGET", DOMAIN, builder, JAR_TARGET);
+      }
+   
+      public ClassPool setupAspectsPool() throws Exception
+      {
+         BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
+            createModule("ASPECTS").
+            createPackage(PACKAGE_ASPECTS).
+            createRequirePackage(PACKAGE_INTERCEPTIONS);
+         return createChildDomainParentLastClassPool("ASPECTS", DOMAIN, builder, JAR_ASPECTS);
+      }
+
+
+      public ClassPool setupInterceptionsPool() throws Exception
+      {
+         BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
+            createModule("INTERCEPTIONS").
+            createPackage(PACKAGE_INTERCEPTIONS);
+         return createChildDomainParentLastClassPool("INTERCEPTIONS", DOMAIN, builder, JAR_INTERCEPTIONS);
+      }
+   }
+   
+   class ImportModuleSetup implements ClassLoaderSetup
+   {
+      public ClassPool setupTargetPool() throws Exception
+      {
+         BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
+            createModule("TARGET").
+            createRequireModule("ASPECTS").
+            createRequireModule("INTERCEPTIONS");
+         return createChildDomainParentLastClassPool("TARGET", DOMAIN, builder, JAR_TARGET);
+      }
+   
+      public ClassPool setupAspectsPool() throws Exception
+      {
+         BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
+            createModule("ASPECTS").
+            createPackage(PACKAGE_ASPECTS).
+            createRequireModule("INTERCEPTIONS");
+         return createChildDomainParentLastClassPool("ASPECTS", DOMAIN, builder, JAR_ASPECTS);
+      }
+
+
+      public ClassPool setupInterceptionsPool() throws Exception
+      {
+         BundleInfoBuilder builder = BundleInfoBuilder.getBuilder().
+            createModule("INTERCEPTIONS").
+            createPackage(PACKAGE_INTERCEPTIONS);
+         return createChildDomainParentLastClassPool("INTERCEPTIONS", DOMAIN, builder, JAR_INTERCEPTIONS);
+      }
+   }
+
+   interface InvokerSetup
+   {
+      boolean useWeaving();
+      void invoke(ClassPool targetPool, String invokerName) throws Exception;
+   }
+   
+   class WovenInvokerSetup implements InvokerSetup
+   {
+      public boolean useWeaving()
+      {
+         return true;
+      }
+      
+      public void invoke(ClassPool targetPool, String invokerName) throws Exception
+      {
+         Class<?> invoker = targetPool.getClassLoader().loadClass(invokerName);
+         Method m = invoker.getMethod("invoke", Boolean.TYPE);
+         m.invoke(null, invokeLightWeightAspects());
+      }
+   }
+   
+   class ContainerProxyInvokerSetup implements InvokerSetup
+   {
+      public boolean useWeaving()
+      {
+         return false;
+      }
+      
+      public void invoke(ClassPool targetPool, String invokerName) throws Exception
+      {
+         Class<?> invoker = targetPool.getClassLoader().loadClass(invokerName);
+         Method m = invoker.getMethod("invokeContainerProxy");
+         m.invoke(null);
+      }
+   }
 }

Modified: projects/aop/trunk/asintegration-mc/src/test/resources/org/jboss/test/aop/classpool/jbosscl/weaving/test/WeavingTestCase-aop.xml
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/resources/org/jboss/test/aop/classpool/jbosscl/weaving/test/WeavingTestCase-aop.xml	2009-04-24 13:46:38 UTC (rev 87798)
+++ projects/aop/trunk/asintegration-mc/src/test/resources/org/jboss/test/aop/classpool/jbosscl/weaving/test/WeavingTestCase-aop.xml	2009-04-24 13:53:02 UTC (rev 87799)
@@ -114,7 +114,6 @@
       <advice name="advice" aspect="internalFactoryPerClass"/>
    </bind>
    
-   
    <bind pointcut="execution(* org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.POJOWithLightweightAspect->method(java.lang.String)) OR execution(org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.POJOWithLightweightAspect->new()) OR field(* org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.POJOWithLightweightAspect->field)">
       <before name="before" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalLightweightAspectPerVm"/>
       <after name="after" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalLightweightAspectPerVm"/>
@@ -158,4 +157,52 @@
 
    </bind>
    
+   <bind pointcut="execution(* $instanceof{org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.POJOForContainerProxy}->method(java.lang.String))">
+      <interceptor-ref name="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalInterceptorPerVm"/>
+      <interceptor-ref name="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalInterceptorPerJoinpoint"/>
+      <interceptor-ref name="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalInterceptorPerInstance"/>
+      <interceptor-ref name="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalInterceptorPerClassJoinpoint"/>
+      <interceptor-ref name="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalInterceptorPerClass"/>
+      <interceptor-ref name="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.InternalInterceptorPerVm"/>
+      <interceptor-ref name="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.InternalInterceptorPerJoinpoint"/>
+      <interceptor-ref name="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.InternalInterceptorPerInstance"/>
+      <interceptor-ref name="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.InternalInterceptorPerClassJoinpoint"/>
+      <interceptor-ref name="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.InternalInterceptorPerClass"/>
+      <advice name="invoke" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalAspectPerVm"/>
+      <advice name="invoke" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalAspectPerJoinpoint"/>
+      <advice name="invoke" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalAspectPerInstance"/>
+      <advice name="invoke" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalAspectPerClassJoinpoint"/>
+      <advice name="invoke" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.ExternalAspectPerClass"/>
+      <advice name="invoke" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.InternalAspectPerVm"/>
+      <advice name="invoke" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.InternalAspectPerJoinpoint"/>
+      <advice name="invoke" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.InternalAspectPerInstance"/>
+      <advice name="invoke" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.InternalAspectPerClassJoinpoint"/>
+      <advice name="invoke" aspect="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.InternalAspectPerClass"/>
+      <advice name="advice" aspect="externalFactoryPerVm"/>
+      <advice name="advice" aspect="externalFactoryPerJoinpoint"/>
+      <advice name="advice" aspect="externalFactoryPerInstance"/>
+      <advice name="advice" aspect="externalFactoryPerClassJoinpoint"/>
+      <advice name="advice" aspect="externalFactoryPerClass"/>
+      <advice name="advice" aspect="internalFactoryPerVm"/>
+      <advice name="advice" aspect="internalFactoryPerJoinpoint"/>
+      <advice name="advice" aspect="internalFactoryPerInstance"/>
+      <advice name="advice" aspect="internalFactoryPerClassJoinpoint"/>
+      <advice name="advice" aspect="internalFactoryPerClass"/>
+   </bind>
+    
+   <introduction class="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.POJOForContainerProxy">
+      <interfaces>
+            org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.MarkerInterface
+      </interfaces>
+   </introduction>
+
+   <introduction class="org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.target.POJOForContainerProxy">
+      <mixin>
+         <interfaces>
+            org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.MixinInterface
+         </interfaces>
+         <class>org.jboss.test.aop.classpool.jbosscl.weaving.support.excluded.aspects.MixinImpl</class>
+      </mixin>
+   </introduction>
+   
 </aop>
\ No newline at end of file




More information about the jboss-cvs-commits mailing list