[jboss-cvs] JBossAS SVN: r61493 - in projects/microcontainer/trunk/aop-mc-int/src: main/org/jboss/aop/microcontainer/integration and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Mar 20 10:45:51 EDT 2007


Author: kabir.khan at jboss.com
Date: 2007-03-20 10:45:51 -0400 (Tue, 20 Mar 2007)
New Revision: 61493

Added:
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/AspectManagerFactory.java
Modified:
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/integration/AOPConstructorJoinpoint.java
   projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/integration/AOPDependencyBuilder.java
   projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/test/ScopingAopTestCase.xml
   projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/test/ScopingAopTestCase.java
Log:
Add necessary stuff to get scoped prototype working with aop

Added: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/AspectManagerFactory.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/AspectManagerFactory.java	                        (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/beans/AspectManagerFactory.java	2007-03-20 14:45:51 UTC (rev 61493)
@@ -0,0 +1,93 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.aop.microcontainer.beans;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
+import org.jboss.metadata.plugins.scope.ApplicationScope;
+import org.jboss.metadata.plugins.scope.DeploymentScope;
+import org.jboss.metadata.spi.MetaData;
+import org.jboss.metadata.spi.stack.MetaDataStack;
+import org.jboss.util.JBossStringBuilder;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AspectManagerFactory
+{
+   public static AspectManager getAspectManager()
+   {
+      return getAspectManager(MetaDataStack.peek());
+   }
+   
+   public static AspectManager getAspectManager(MetaData md)
+   {
+      AspectManager manager = AspectManager.instance();
+      if (md != null)
+      {
+         ApplicationScope app = md.getMetaData(ApplicationScope.class);
+         DeploymentScope dep = md.getMetaData(DeploymentScope.class);
+         if (app != null && dep != null)
+         {
+            JBossStringBuilder fqn = new JBossStringBuilder("/");
+            AspectManager sub = null;
+            if (app != null)
+            {
+               String name="APPLICATION=" + app.value();
+               fqn.append(name);
+               fqn.append("/");
+               sub = manager.findManagerByName(fqn.toString());
+               if (sub == null)
+               {
+                  sub = createNewDomain(manager, name);
+               }
+            }
+            
+            if (dep != null)
+            {
+               String name="DEPLOYMENT=" + dep.value();
+               fqn.append(name);
+               fqn.append("/");
+               AspectManager parent = sub;
+               sub = manager.findManagerByName(fqn.toString());
+               if (sub == null)
+               {
+                  sub = createNewDomain(parent, name);
+               }
+            }
+            return sub;
+         }
+      }
+      return manager;
+   }
+   
+   private static AspectManager createNewDomain(AspectManager parent, String name)
+   {
+      Domain domain = new Domain(parent, name, true);
+      domain.setInheritsBindings(true);
+      domain.setInheritsDeclarations(true);
+      return domain;
+   }
+}
+

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/integration/AOPConstructorJoinpoint.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/integration/AOPConstructorJoinpoint.java	2007-03-20 14:41:05 UTC (rev 61492)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/integration/AOPConstructorJoinpoint.java	2007-03-20 14:45:51 UTC (rev 61493)
@@ -29,6 +29,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.advice.Interceptor;
 import org.jboss.aop.joinpoint.ConstructorInvocation;
+import org.jboss.aop.microcontainer.beans.AspectManagerFactory;
 import org.jboss.aop.proxy.container.AOPProxyFactory;
 import org.jboss.aop.proxy.container.AOPProxyFactoryParameters;
 import org.jboss.aop.proxy.container.ContainerCache;
@@ -90,9 +91,9 @@
    public Object dispatch() throws Throwable
    {
       Class clazz = constructorInfo.getDeclaringClass().getType();
-      AspectManager manager = AspectManager.instance();
+      MetaData metaData = MetaDataStack.peek();
+      AspectManager manager = AspectManagerFactory.getAspectManager(metaData);
 
-      MetaData metaData = MetaDataStack.peek();
       MetaDataStack.mask();
       try
       {

Modified: projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/integration/AOPDependencyBuilder.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/integration/AOPDependencyBuilder.java	2007-03-20 14:41:05 UTC (rev 61492)
+++ projects/microcontainer/trunk/aop-mc-int/src/main/org/jboss/aop/microcontainer/integration/AOPDependencyBuilder.java	2007-03-20 14:45:51 UTC (rev 61493)
@@ -34,8 +34,8 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.ReflectiveAspectBinder;
 import org.jboss.aop.advice.AspectDefinition;
+import org.jboss.aop.microcontainer.beans.AspectManagerFactory;
 import org.jboss.aop.microcontainer.beans.ManagedAspectDefinition;
-import org.jboss.aop.microcontainer.lifecycle.LifecycleCallbackBinding;
 import org.jboss.aop.microcontainer.lifecycle.LifecycleCallbackDefinition;
 import org.jboss.aop.proxy.container.ContainerCache;
 import org.jboss.aop.util.Advisable;
@@ -43,7 +43,6 @@
 import org.jboss.classadapter.plugins.dependency.AbstractDependencyBuilder;
 import org.jboss.classadapter.spi.ClassAdapter;
 import org.jboss.classadapter.spi.Dependency;
-import org.jboss.classadapter.spi.DependencyBuilderListItem;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.metadata.spi.MetaData;
 import org.jboss.metadata.spi.signature.MethodSignature;
@@ -75,7 +74,7 @@
 
    public List<Object> getDependencies(ClassAdapter classAdapter, MetaData metaData)
    {
-      AspectManager manager = AspectManager.instance();
+      AspectManager manager = AspectManagerFactory.getAspectManager(metaData);
       try
       {
          ClassInfo classInfo = classAdapter.getClassInfo();
@@ -95,7 +94,6 @@
                ContainerCache cache = ContainerCache.initialise(manager, clazz, metaData, true);
                advisor = cache.getAdvisor();
             }
-
             ReflectiveAspectBinder binder = new ReflectiveAspectBinder(clazz, advisor);
             Set aspects = binder.getAspects();
 

Modified: projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/test/ScopingAopTestCase.xml
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/test/ScopingAopTestCase.xml	2007-03-20 14:41:05 UTC (rev 61492)
+++ projects/microcontainer/trunk/aop-mc-int/src/resources/tests/org/jboss/test/microcontainer/test/ScopingAopTestCase.xml	2007-03-20 14:45:51 UTC (rev 61493)
@@ -1,20 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <deployment xmlns="urn:jboss:bean-deployer:2.0">
+	<beanfactory name="InterceptedAdvice" class="org.jboss.test.microcontainer.support.CalledInterceptor"/>
 
-<beanfactory name="InterceptedAdvice" class="org.jboss.test.microcontainer.support.CalledInterceptor"/>
-
-   <bean name="AspectManager" class="org.jboss.aop.AspectManager">
+	<bean name="AspectManager" class="org.jboss.aop.AspectManager">
+      <constructor factoryClass="org.jboss.aop.microcontainer.beans.AspectManagerFactory" factoryMethod="getAspectManager"/>		
+	</bean>
+	<bean name="AspectManagerDeployment1" class="org.jboss.aop.AspectManager">
       <annotation>@org.jboss.metadata.plugins.scope.ApplicationScope("testApp")</annotation>
       <annotation>@org.jboss.metadata.plugins.scope.DeploymentScope("deployment1")</annotation>
-      <constructor factoryClass="org.jboss.aop.AspectManager" factoryMethod="instance"/>
-   </bean>
+      <constructor factoryClass="org.jboss.aop.microcontainer.beans.AspectManagerFactory" factoryMethod="getAspectManager"/>		
+	</bean>
 
    <bean name="InterceptedAspect" class="org.jboss.aop.microcontainer.beans.Aspect">
       <annotation>@org.jboss.metadata.plugins.scope.ApplicationScope("testApp")</annotation>
       <annotation>@org.jboss.metadata.plugins.scope.DeploymentScope("deployment1")</annotation>
       <property name="advice"><inject bean="InterceptedAdvice"/></property>
-      <property name="manager"><inject bean="AspectManager"/></property>
+      <property name="manager"><inject bean="AspectManagerDeployment1"/></property>
    </bean>
 
    <bean name="InterceptedBinding" class="org.jboss.aop.microcontainer.beans.AspectBinding">
@@ -22,7 +24,7 @@
       <annotation>@org.jboss.metadata.plugins.scope.DeploymentScope("deployment1")</annotation>
       <property name="pointcut">execution(* $instanceof{org.jboss.test.microcontainer.support.SimpleBeanImpl}->*(..))</property>
       <property name="aspect"><inject bean="InterceptedAspect" property="definition"/></property>
-      <property name="manager"><inject bean="AspectManager"/></property>
+      <property name="manager"><inject bean="AspectManagerDeployment1"/></property>
    </bean>
 
    <bean name="simple1" class="org.jboss.test.microcontainer.support.SimpleBeanImpl">

Modified: projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/test/ScopingAopTestCase.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/test/ScopingAopTestCase.java	2007-03-20 14:41:05 UTC (rev 61492)
+++ projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/microcontainer/test/ScopingAopTestCase.java	2007-03-20 14:45:51 UTC (rev 61493)
@@ -26,6 +26,7 @@
 import org.jboss.aop.microcontainer.junit.AOPMicrocontainerTestDelegate;
 import org.jboss.aop.microcontainer.junit.ScopingAOPMicrocontainerTestDelegate;
 import org.jboss.test.AbstractTestDelegate;
+import org.jboss.test.microcontainer.support.CalledInterceptor;
 import org.jboss.test.microcontainer.support.SimpleBean;
 
 /**
@@ -65,8 +66,15 @@
    {
       SimpleBean simple1 = (SimpleBean)getBean("simple1");
       assertNotNull(simple1);
+      CalledInterceptor.intercepted = false;
+      simple1.someMethod();
+      assertTrue(CalledInterceptor.intercepted);
+      
       SimpleBean simple2 = (SimpleBean)getBean("simple2");
       assertNotNull(simple2);
+      CalledInterceptor.intercepted = false;
+      simple2.someMethod();
+      assertFalse(CalledInterceptor.intercepted);
    }
 
 }




More information about the jboss-cvs-commits mailing list