[jboss-cvs] JBossAS SVN: r57778 - in projects/aop/trunk/aop: . src/main/org/jboss/aop src/main/org/jboss/aop/instrument src/main/org/jboss/aop/proxy/container src/resources/test src/resources/test/nameddomain src/test/org/jboss/test/aop src/test/org/jboss/test/aop/nameddomain src/test/org/jboss/test/aop/proxy

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Oct 23 15:29:06 EDT 2006


Author: kabir.khan at jboss.com
Date: 2006-10-23 15:28:54 -0400 (Mon, 23 Oct 2006)
New Revision: 57778

Added:
   projects/aop/trunk/aop/src/resources/test/nameddomain/
   projects/aop/trunk/aop/src/resources/test/nameddomain/jboss-aop.xml
   projects/aop/trunk/aop/src/resources/test/nameddomain/manual-aop.xml
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/InstanceInterceptor.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/NamedDomainTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/POJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/Proxied.java
Modified:
   projects/aop/trunk/aop/build-tests-jdk14.xml
   projects/aop/trunk/aop/build-tests-jdk50.xml
   projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/Domain.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/DomainDefinition.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedAdvisorDomain.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/InstanceDomain.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ClassProxyContainer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerCache.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/GeneratedAOPProxyFactory.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/InstanceProxyContainer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ProxyAdvisorDomain.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/proxy/ProxyTestCase.java
Log:
Add an internal hierarchy of domains referencable by name so that the domains can always be found.

Modified: projects/aop/trunk/aop/build-tests-jdk14.xml
===================================================================
--- projects/aop/trunk/aop/build-tests-jdk14.xml	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/build-tests-jdk14.xml	2006-10-23 19:28:54 UTC (rev 57778)
@@ -341,18 +341,23 @@
          <arg value="${build.bootclasspath}"/>
       </java>
 
+      <!-- Tests only applicable for this weaving mode -->
+      <antcall target="_run-bootclasspath-test" inheritRefs="true">
+         <param name="test" value="override"/>
+         <param name="caller" value="bootclasspath-genadvisor-tests"/>
+         <param name="exclude" value="**/OverrideTestCase.class"/>
+      </antcall>
+      <antcall target="_run-bootclasspath-test" inheritRefs="true">
+         <param name="test" value="nameddomain"/>
+         <param name="caller" value="bootclasspath-genadvisor-tests"/>
+      </antcall>
+
 	   <!-- Add tests in _base-tests unless they should only be run in this weaving mode -->
       <antcall target="_base-tests" inheritRefs="true">
          <param name="caller" value="bootclasspath-genadvisor-tests"/>
          <param name="test-target" value="_run-bootclasspath-test"/>
       </antcall>
 
-      <!-- Tests only applicable for this weaving mode -->
-      <antcall target="_run-bootclasspath-test" inheritRefs="true">
-         <param name="test" value="override"/>
-         <param name="caller" value="bootclasspath-genadvisor-tests"/>
-         <param name="exclude" value="**/OverrideTestCase.class"/>
-      </antcall>
    </target>
 
    <target name="loadtime-test" depends="init">
@@ -476,18 +481,23 @@
 
    <target name="non-optimized-precompiled-tests" depends="retroweave">
 
+      <!-- Tests only applicable for this weaving mode -->
+      <antcall target="_run-precompiled-test" inheritRefs="true">
+         <param name="test" value="override"/>
+         <param name="caller" value="non-optimized-precompiled-tests"/>
+         <param name="exclude" value="**/GenAdvisorOverrideTestCase.class"/>
+      </antcall>
+      <antcall target="_run-precompiled-test" inheritRefs="true">
+         <param name="test" value="nameddomain"/>
+         <param name="caller" value="non-optimized-precompiled-tests"/>
+      </antcall>
+
       <!-- Add tests in _base-precompiled-tests unless they should only be run in this weaving mode -->
       <antcall target="_base-tests" inheritRefs="true">
          <param name="caller" value="non-optimized-precompiled-tests"/>
          <param name="test-target" value="_run-precompiled-test"/>
       </antcall>
 
-      <!-- Tests only applicable for this weaving mode -->
-      <antcall target="_run-precompiled-test" inheritRefs="true">
-         <param name="test" value="override"/>
-         <param name="caller" value="non-optimized-precompiled-tests"/>
-         <param name="exclude" value="**/GenAdvisorOverrideTestCase.class"/>
-      </antcall>
    </target>
 
    <!-- ==================================================================================== -->

Modified: projects/aop/trunk/aop/build-tests-jdk50.xml
===================================================================
--- projects/aop/trunk/aop/build-tests-jdk50.xml	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/build-tests-jdk50.xml	2006-10-23 19:28:54 UTC (rev 57778)
@@ -306,13 +306,6 @@
    <!-- JAVAAGENT TESTS (JDK 5.0)                                                        -->
    <!-- ==================================================================================== -->
    <target name="javaagent-tests" depends="compile-test-classes">
-
-   	<!-- Add tests in _base-tests unless they should only be run in this weaving mode -->
-      <antcall target="_base-jdk50-tests" inheritRefs="true">
-         <param name="caller" value="javaagent-tests"/>
-         <param name="test-target" value="_run-javaagent-test"/>
-      </antcall>
-
       <!-- Tests only applicable for this weaving mode -->
       <antcall target="_run-javaagent-test" inheritRefs="true">
          <param name="test" value="override"/>
@@ -320,6 +313,11 @@
          <param name="exclude" value="**/GenAdvisorOverrideTestCase.class"/>
       </antcall>
 
+   	<!-- Add tests in _base-tests unless they should only be run in this weaving mode -->
+      <antcall target="_base-jdk50-tests" inheritRefs="true">
+         <param name="caller" value="javaagent-tests"/>
+         <param name="test-target" value="_run-javaagent-test"/>
+      </antcall>
    </target>
 
    <target name="loadtime-test" depends="init">
@@ -334,19 +332,22 @@
    <!-- GENERATED ADVISOR JAVAGENT TESTS (JDK 5.0)                                           -->
    <!-- ==================================================================================== -->
    <target name="javaagent-genadvisor-tests" depends="compile-test-classes">
+      <!-- Tests only applicable for this weaving mode -->
+      <antcall target="_run-javaagent-test" inheritRefs="true">
+         <param name="test" value="override"/>
+         <param name="caller" value="javaagent-genadvisor-tests"/>
+         <param name="exclude" value="**/OverrideTestCase.class"/>
+      </antcall>
+      <antcall target="_run-javaagent-test" inheritRefs="true">
+         <param name="test" value="nameddomain"/>
+         <param name="caller" value="javaagent-genadvisor-tests"/>
+      </antcall>
 
 	   <!-- Add tests in _base-tests unless they should only be run in this weaving mode -->
       <antcall target="_base-jdk50-tests" inheritRefs="true">
          <param name="caller" value="javaagent-genadvisor-tests"/>
          <param name="test-target" value="_run-javaagent-test"/>
       </antcall>
-
-      <!-- Tests only applicable for this weaving mode -->
-      <antcall target="_run-javaagent-test" inheritRefs="true">
-         <param name="test" value="override"/>
-         <param name="caller" value="javaagent-genadvisor-tests"/>
-         <param name="exclude" value="**/OverrideTestCase.class"/>
-      </antcall>
    </target>
 
    <target name="loadtime-ga-test" depends="init">
@@ -446,12 +447,10 @@
       </antcall>
 
    	<!-- Tests only applicable for this weaving mode -->
-
       <antcall target="_run-precompiled-test" inheritRefs="true">
          <param name="test" value="args"/>
          <param name="caller" value="precompiled-tests"/>
       </antcall>
-
 	   <antcall target="_run-precompiled-test" inheritRefs="true">
          <param name="test" value="override"/>
          <param name="caller" value="precompiled-tests"/>
@@ -497,12 +496,6 @@
          <path refid="jboss.aop.classpath"/>
       </path>
 
-      <!-- Add tests in _base-precompiled-tests unless they should only be run in this weaving mode -->
-      <antcall target="_base-jdk50-tests" inheritRefs="true">
-         <param name="caller" value="precompiled-genadvisor-tests"/>
-         <param name="test-target" value="_run-precompiled-test"/>
-      </antcall>
-
       <!-- Tests only applicable for this weaving mode -->
       <antcall target="_run-precompiled-test" inheritRefs="true">
          <param name="test" value="args"/>
@@ -521,6 +514,16 @@
          <param name="caller" value="precompiled-genadvisor-tests"/>
          <param name="exclude" value="**/OverrideTestCase.class"/>
       </antcall>
+      <antcall target="_run-javaagent-test" inheritRefs="true">
+         <param name="test" value="nameddomain"/>
+         <param name="caller" value="javaagent-genadvisor-tests"/>
+      </antcall>
+
+      <!-- Add tests in _base-precompiled-tests unless they should only be run in this weaving mode -->
+      <antcall target="_base-jdk50-tests" inheritRefs="true">
+         <param name="caller" value="precompiled-genadvisor-tests"/>
+         <param name="test-target" value="_run-precompiled-test"/>
+      </antcall>
    </target>
 
    <target name="precompiled-test" depends="init">

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/AspectManager.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -70,6 +70,7 @@
 import org.jboss.aop.pointcut.PointcutStats;
 import org.jboss.aop.pointcut.Typedef;
 import org.jboss.aop.pointcut.ast.ClassExpression;
+import org.jboss.util.collection.WeakValueHashMap;
 import org.jboss.util.loading.Translatable;
 import org.jboss.util.loading.Translator;
 import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
@@ -103,6 +104,9 @@
 
    /** A map of domains by class, maintaned by the top level AspectManager */
    protected final WeakHashMap subDomainsPerClass = new WeakHashMap();
+   
+   /** A map of domains by name */
+   protected final WeakValueHashMap subDomainsByName = new WeakValueHashMap();
 
    /** Each domain may have sub domains interested in changes happening in this manager/domain */
    protected final WeakHashMap subscribedSubDomains = new WeakHashMap();
@@ -532,6 +536,52 @@
          return (Advisor) ref.get();
       }
    }
+   
+   /**
+    * Takes a string of the form /sub1/sub2/sub3 of subdomains by name, where the leading "/" is the main AspectManager.
+    * The main user of the naming of domains is (un)serialization of advisors/containers
+    * 
+    * @param The FQN of the domain
+    * @return the domain referenced by the FQN or null if it does not exist
+    */
+   public AspectManager findManagerByName(String fqn)
+   {
+      String[] nameparts = fqn.split("/");
+      return findManagerByName(nameparts);
+   }
+   
+   private AspectManager findManagerByName(String[] nameparts)
+   {
+      AspectManager found = this;
+      for (int i = 0 ; i < nameparts.length ; i++)
+      {
+         if (nameparts[i].trim().length() == 0)
+         {
+            continue;
+         }
+         found = found.findManagerByNameInternal(nameparts[i]);
+         if (found == null)
+         {
+            break;
+         }
+      }
+      return found;
+   }
+   
+   private AspectManager findManagerByNameInternal(String name)
+   {
+      return (Domain)subDomainsByName.get(name);
+   }
+   
+   protected void addSubDomainByName(Domain domain)
+   {
+      subDomainsByName.put(domain.getDomainName(), domain);
+   }
+   
+   public String getManagerFQN()
+   {
+      return "/";
+   }
 
    public ClassAdvisor getAdvisorIfAdvised(Class clazz)
    {

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/Domain.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/Domain.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/Domain.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -21,6 +21,8 @@
   */
 package org.jboss.aop;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -37,6 +39,7 @@
 import org.jboss.aop.pointcut.PointcutStats;
 import org.jboss.aop.pointcut.Typedef;
 import org.jboss.aop.pointcut.ast.ClassExpression;
+import org.jboss.util.id.GUID;
 
 /**
  * Comment
@@ -46,19 +49,54 @@
  */
 public class Domain extends AspectManager
 {
+   String name;
    protected AspectManager parent;
    protected boolean parentFirst;
    protected boolean inheritsDeclarations = true;
    protected boolean inheritsBindings = false;
 
 
-   public Domain(AspectManager manager, boolean parentFirst)
+   public Domain(AspectManager manager, String name, boolean parentFirst)
    {
       this.parent = manager;
       this.parentFirst = parentFirst;
+      this.name = name;
+      manager.addSubDomainByName(this);
    }
 
+   public String getDomainName()
+   {
+      return name;
+   }
 
+   public String getManagerFQN()
+   {
+      return parent.getManagerFQN() + name + "/";
+   }
+
+   public static String getDomainName(final Class clazz, final boolean forInstance)
+   {
+      String name = (String)AccessController.doPrivileged(new PrivilegedAction() {
+
+         public Object run()
+         {
+            StringBuffer sb = new StringBuffer();
+            sb.append(clazz.getName());
+            sb.append("_");
+            sb.append(System.identityHashCode(clazz.getClassLoader()));
+            
+            if (forInstance)
+            {
+               GUID guid = new GUID();//Are these guys expensive to create?
+               sb.append("_");
+               sb.append(guid.toString());
+            }
+            return sb.toString();
+         }
+      });
+      return name;
+   }
+   
    /**
     * Inherits interceptor, aspect, advice stack definitions
     *

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/DomainDefinition.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/DomainDefinition.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/DomainDefinition.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -36,7 +36,7 @@
    public DomainDefinition(String name, AspectManager parent, boolean parentFirst, boolean inheritDefs, boolean inheritBindings)
    {
       this.name = name;
-      Domain domain = new Domain(parent, parentFirst);
+      Domain domain = new Domain(parent, name, parentFirst);
       domain.setInheritsBindings(inheritBindings);
       domain.setInheritsDeclarations(inheritDefs);
       manager = domain;

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedAdvisorDomain.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedAdvisorDomain.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedAdvisorDomain.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -28,14 +28,14 @@
 public class GeneratedAdvisorDomain extends Domain
 {
 
-   public GeneratedAdvisorDomain(AspectManager manager, Class clazz, boolean parentFirst)
+   public GeneratedAdvisorDomain(AspectManager manager, String name, Class clazz)
    {
-      this(manager, clazz, parentFirst, false);
+      this(manager, name, clazz, false);
    }
    
-   public GeneratedAdvisorDomain(AspectManager manager, Class clazz, boolean parentFirst, boolean instanceDomain)
+   public GeneratedAdvisorDomain(AspectManager manager, String name, Class clazz, boolean instanceDomain)
    {
-      super(manager, parentFirst);
+      super(manager, name, false);
       
       if (!instanceDomain)
       {

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/InstanceDomain.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/InstanceDomain.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/InstanceDomain.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -33,9 +33,9 @@
 {
    protected Advisor advisor;
 
-   public InstanceDomain(AspectManager manager, boolean parentFirst)
+   public InstanceDomain(AspectManager manager, String name, boolean parentFirst)
    {
-      super(manager, parentFirst);
+      super(manager, name, parentFirst);
       setInheritsBindings(true);
    }
 

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -384,7 +384,8 @@
    {
       String initBody =
          "{" +
-         "   " + DOMAIN + "= new org.jboss.aop.GeneratedAdvisorDomain($1, " + DECLARING_CLASS + ", false); " +
+         "   String domainName = org.jboss.aop.Domain.getDomainName(" + DECLARING_CLASS + ", $2);" + 
+         "   " + DOMAIN + "= new org.jboss.aop.GeneratedAdvisorDomain($1, domainName, " + DECLARING_CLASS + ", false); " +
          "   ((org.jboss.aop.Domain)" + DOMAIN + ").setInheritsBindings(true); " +
          "   " + INITIALISE_METHODS + "();" +
          "   " + INITIALISE_CONSTRUCTORS + "();" +
@@ -399,7 +400,7 @@
             Modifier.PROTECTED,
             CtClass.voidType,
             "initialise",
-            new CtClass[]{forName("org.jboss.aop.AspectManager")},
+            new CtClass[]{forName("org.jboss.aop.AspectManager"), CtClass.booleanType},
             EMPTY_EXCEPTIONS,
             initBody,
             genadvisor);
@@ -411,7 +412,7 @@
       ctor.setBody(
             "{" +
             "   super(\"" + clazz.getName() + "\"); " +
-            "   initialise(org.jboss.aop.AspectManager.instance(this.getClass().getClassLoader()));" + //Use the CL of the class, since we may be in a scoped loader
+            "   initialise(org.jboss.aop.AspectManager.instance(this.getClass().getClassLoader()), false);" + //Use the CL of the class, since we may be in a scoped loader
             "}");
       genadvisor.addConstructor(ctor);
 
@@ -420,7 +421,7 @@
          "{" +
          "   super(\"" + clazz.getName() + "\"); " +
          "   super.setParentAdvisor($1);" +
-         "   initialise($1.getDomain());" +
+         "   initialise($1.getDomain(), true);" +
          "}";
       CtConstructor ctorWithParentAdvisor = CtNewConstructor.make(new CtClass[]{genadvisor}, EMPTY_EXCEPTIONS, instanceBody, genadvisor);
       genadvisor.addConstructor(ctorWithParentAdvisor);

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ClassProxyContainer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ClassProxyContainer.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ClassProxyContainer.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -154,25 +154,17 @@
       }
    }
    
-   public InstanceProxyContainer createInstanceProxyContainer(InterfaceIntroduction introduction, /*MetaDataContext*/ Object metaDataContext)
+   public InstanceProxyContainer createInstanceProxyContainer()
    {
-      ProxyAdvisorDomain domain = new ProxyAdvisorDomain(manager, clazz, false);
+      //This seems to get thrown away with every invocation
+      ProxyAdvisorDomain domain = new ProxyAdvisorDomain(manager, null, clazz, false);
       domain.setInheritsBindings(true);
       domain.setInheritsDeclarations(true);
-      if (introduction != null)
-      {
-         domain.addInterfaceIntroduction(introduction);
-      }
 
-      InstanceProxyContainer ia = new InstanceProxyContainer(super.getName(), domain, this, metaDataContext);
+      InstanceProxyContainer ia = new InstanceProxyContainer(super.getName(), domain, this, null);
       
       return ia;
    }
-   
-   public InstanceProxyContainer createInstanceProxyContainer()
-   {
-      return createInstanceProxyContainer(null, null);
-   }
 
    public void initialise(Class proxiedClass)
    {

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerCache.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerCache.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerCache.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -26,6 +26,7 @@
 import org.jboss.aop.Advised;
 import org.jboss.aop.Advisor;
 import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
 import org.jboss.aop.introduction.InterfaceIntroduction;
 import org.jboss.aop.metadata.SimpleMetaData;
 //import org.jboss.repository.spi.MetaDataContext;
@@ -162,7 +163,8 @@
    
    private ClassProxyContainer createContainer()
    {
-      ProxyAdvisorDomain domain = new ProxyAdvisorDomain(manager, key.getClazz(), false);
+      String name = Domain.getDomainName(key.getClazz(), false);
+      ProxyAdvisorDomain domain = new ProxyAdvisorDomain(manager, name, key.getClazz(), false);
       String classname = (key.getClazz() != null) ? key.getClazz().getName() : "AOP$Hollow";
       ClassProxyContainer container = new ClassProxyContainer(classname /*+ " ClassProxy" + (counter++)*/, domain);
       domain.setAdvisor(container);

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/GeneratedAOPProxyFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/GeneratedAOPProxyFactory.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/GeneratedAOPProxyFactory.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -21,8 +21,6 @@
 */ 
 package org.jboss.aop.proxy.container;
 
-import java.util.Arrays;
-
 import org.jboss.aop.Advised;
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.instrument.Untransformable;

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/InstanceProxyContainer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/InstanceProxyContainer.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/InstanceProxyContainer.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -58,7 +58,8 @@
 
    public static InstanceProxyContainer createInstanceProxyContainer(Advisor classAdvisor, InterfaceIntroduction introduction, /*MetaDataContext*/ Object metaDataContext)
    {
-      ProxyAdvisorDomain domain = new ProxyAdvisorDomain(classAdvisor.getManager(), classAdvisor.getClazz(), false, true);
+      String name = Domain.getDomainName(classAdvisor.getClazz(), true);
+      ProxyAdvisorDomain domain = new ProxyAdvisorDomain(classAdvisor.getManager(), name, classAdvisor.getClazz(), true);
       if (introduction != null)
       {
          domain.addInterfaceIntroduction(introduction);

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ProxyAdvisorDomain.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ProxyAdvisorDomain.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ProxyAdvisorDomain.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -37,15 +37,15 @@
 {
    protected WeakReference advisor;
 
-   public ProxyAdvisorDomain(AspectManager manager, Class clazz, boolean parentFirst)
+   public ProxyAdvisorDomain(AspectManager manager, String name, Class clazz)
    {
-      this(manager, clazz, parentFirst, false);
+      this(manager, name, clazz, false);
    }
    
-   public ProxyAdvisorDomain(AspectManager manager, Class clazz, boolean parentFirst, boolean instanceDomain)
+   public ProxyAdvisorDomain(AspectManager manager, String name, Class clazz, boolean instanceDomain)
    {
       // FIXME ProxyAdvisorDomain constructor
-      super(manager, clazz, parentFirst, instanceDomain);
+      super(manager, name, clazz, instanceDomain);
       super.setInheritsBindings(true);
       super.setInheritsDeclarations(true);
 

Added: projects/aop/trunk/aop/src/resources/test/nameddomain/jboss-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/nameddomain/jboss-aop.xml	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/resources/test/nameddomain/jboss-aop.xml	2006-10-23 19:28:54 UTC (rev 57778)
@@ -0,0 +1,6 @@
+<aop>
+   <interceptor class="org.jboss.test.aop.nameddomain.InstanceInterceptor" scope="PER_INSTANCE"/>
+   <bind pointcut="execution(* org.jboss.test.aop.nameddomain.POJO->someMethod())">
+      <interceptor-ref name="org.jboss.test.aop.nameddomain.InstanceInterceptor"/>
+   </bind>
+</aop>

Added: projects/aop/trunk/aop/src/resources/test/nameddomain/manual-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/nameddomain/manual-aop.xml	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/resources/test/nameddomain/manual-aop.xml	2006-10-23 19:28:54 UTC (rev 57778)
@@ -0,0 +1,6 @@
+<aop>
+   <interceptor class="org.jboss.test.aop.nameddomain.InstanceInterceptor" scope="PER_INSTANCE"/>
+   <bind pointcut="execution(* org.jboss.test.aop.nameddomain.Proxied->someMethod())">
+      <interceptor-ref name="org.jboss.test.aop.nameddomain.InstanceInterceptor"/>
+   </bind>
+</aop>

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/InstanceInterceptor.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/InstanceInterceptor.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/InstanceInterceptor.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -0,0 +1,45 @@
+/*
+* 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.nameddomain;
+
+import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.Invocation;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class InstanceInterceptor implements Interceptor
+{
+   public static InstanceInterceptor icptr;
+   public String getName()
+   {
+      return this.getClass().getName();
+   }
+
+   public Object invoke(Invocation invocation) throws Throwable
+   {
+      return invocation.invokeNext();
+   }
+   
+}

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/NamedDomainTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/NamedDomainTestCase.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/NamedDomainTestCase.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -0,0 +1,130 @@
+/*
+* 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.nameddomain;
+
+import java.net.URL;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+import org.jboss.aop.Advised;
+import org.jboss.aop.Advisor;
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.AspectXmlLoader;
+import org.jboss.aop.Domain;
+import org.jboss.aop.InstanceAdvisor;
+import org.jboss.aop.proxy.ClassProxyFactory;
+import org.jboss.aop.proxy.container.AOPProxyFactoryParameters;
+import org.jboss.aop.proxy.container.AspectManaged;
+import org.jboss.aop.proxy.container.ContainerProxyFactory;
+import org.jboss.aop.proxy.container.GeneratedAOPProxyFactory;
+import org.jboss.test.aop.AOPTestWithSetup;
+
+/**
+ * This is only relevant for generated advisors
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class NamedDomainTestCase extends AOPTestWithSetup
+{
+   public static void main(String[] args)
+   {
+      TestRunner.run(suite());
+   }
+
+   public static Test suite()
+   {
+      TestSuite suite = new TestSuite("NamedDomainTestCase");
+      suite.addTestSuite(NamedDomainTestCase.class);
+      return suite;
+   }
+
+   public NamedDomainTestCase(String name)
+   {
+      super(name);
+   }
+
+   public void testWovenNamedDomains()
+   {
+      AspectManager manager = AspectManager.instance();;
+      POJO pojo = new POJO();
+      pojo.someMethod();
+      
+      Advisor advisor = ((Advised)pojo)._getAdvisor();
+      AspectManager domain = advisor.getManager();
+      String fqn = domain.getManagerFQN();
+      
+      System.out.println("fqn: " + fqn);
+      
+      AspectManager foundDomain = manager.findManagerByName(fqn);
+      assertSame(domain, foundDomain);
+      
+      InstanceAdvisor ia = ((Advised)pojo)._getInstanceAdvisor();
+      assertNotNull(ia);
+      AspectManager instanceDomain = ((Advisor)ia).getManager();
+      fqn = instanceDomain.getManagerFQN();
+      System.out.println("fqn: " + fqn);
+      
+      AspectManager foundInstanceDomain = manager.findManagerByName(fqn);
+      assertSame(instanceDomain, foundInstanceDomain);
+   }
+   
+   public void testProxiedNamedDomains() throws Exception
+   {
+      Proxied tgt = new Proxied();//Load the class before we deploy the xml that will cause weaving
+      
+      URL url = this.getClass().getProtectionDomain().getCodeSource().getLocation();
+      System.out.println("class url: " + url);
+      String location = url.toString();
+      int index = location.indexOf("/output/");
+      location = location.substring(0, index);
+      
+      location = location + "/src/resources/test/nameddomain/manual-aop.xml";
+      url = new URL(location);
+      System.out.println("xml url:   " + url);
+      AspectXmlLoader.deployXML(url);
+      
+      AOPProxyFactoryParameters params = new AOPProxyFactoryParameters();
+      params.setTarget(tgt);
+      GeneratedAOPProxyFactory factory = new GeneratedAOPProxyFactory();
+      Proxied proxied = (Proxied)factory.createAdvisedProxy(params);
+      
+      proxied.someMethod();
+      
+      Advisor advisor = ((AspectManaged)proxied).getAdvisor();
+      assertNotNull(advisor);
+      AspectManager domain = advisor.getManager();
+      String fqn = domain.getManagerFQN();
+      AspectManager foundDomain = AspectManager.instance().findManagerByName(fqn);
+      assertSame(domain, foundDomain);
+      
+      InstanceAdvisor instanceAdvisor = ((AspectManaged)proxied).getInstanceAdvisor();
+      assertNotNull(instanceAdvisor);
+      AspectManager instanceDomain = advisor.getManager();
+      fqn = instanceDomain.getManagerFQN();
+      AspectManager foundInstanceDomain = AspectManager.instance().findManagerByName(fqn);
+      assertSame(instanceDomain, foundInstanceDomain);
+   }
+
+}

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/POJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/POJO.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/POJO.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -0,0 +1,35 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.aop.nameddomain;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class POJO
+{
+   public void someMethod()
+   {
+      
+   }
+}

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/Proxied.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/Proxied.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/nameddomain/Proxied.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -0,0 +1,35 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.aop.nameddomain;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class Proxied
+{
+   public void someMethod()
+   {
+      
+   }
+}

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/proxy/ProxyTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/proxy/ProxyTestCase.java	2006-10-23 18:07:08 UTC (rev 57777)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/proxy/ProxyTestCase.java	2006-10-23 19:28:54 UTC (rev 57778)
@@ -153,7 +153,7 @@
    
    public void testContainerProxy() throws Exception
    {
-      InstanceDomain domain = new InstanceDomain(AspectManager.instance(), false);
+      InstanceDomain domain = new InstanceDomain(AspectManager.instance(), "blah", false);
 
       
       InterfaceIntroduction intro = new InterfaceIntroduction("intro", "*", null);




More information about the jboss-cvs-commits mailing list