[jboss-cvs] JBossAS SVN: r72154 - in projects/ejb3/trunk/interceptors/src: test/java/org/jboss/ejb3/test/interceptors/proxyinstanceadvisor/unit and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Apr 14 05:14:37 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-04-14 05:14:36 -0400 (Mon, 14 Apr 2008)
New Revision: 72154

Added:
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ManagedObjectAdvisorInstanceInterceptor.java
Modified:
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/proxyinstanceadvisor/unit/ProxyInstanceAdvisorTestCase.java
   projects/ejb3/trunk/interceptors/src/test/resources/proxyinstanceadvisor/jboss-aop.xml
Log:
[EJBTHREE-1275]Set the InstanceAdvisorDelegate in the ManagedObjectAdvisor from the ManagedObjectAdvisorInstanceInterceptor


Added: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ManagedObjectAdvisorInstanceInterceptor.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ManagedObjectAdvisorInstanceInterceptor.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ManagedObjectAdvisorInstanceInterceptor.java	2008-04-14 09:14:36 UTC (rev 72154)
@@ -0,0 +1,89 @@
+/*
+* 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.ejb3.interceptors.aop;
+
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.jboss.aop.Advisor;
+import org.jboss.aop.InstanceAdvisor;
+import org.jboss.aop.InstanceAdvisorDelegate;
+import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.ejb3.interceptors.container.ManagedObjectAdvisor;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ManagedObjectAdvisorInstanceInterceptor implements Interceptor
+{
+   private Map<Object, InstanceAdvisorDelegate> instanceAdvisorDelegates;
+   
+   public String getName()
+   {
+      return this.getClass().getName();
+   }
+
+   public Object invoke(Invocation invocation) throws Throwable
+   {
+      @SuppressWarnings("unchecked")
+      ManagedObjectAdvisor advisor = (ManagedObjectAdvisor)invocation.getAdvisor();
+
+      InstanceAdvisorDelegate delegate = getInstanceAdvisorDelegate(invocation.getTargetObject(), advisor, advisor);
+      advisor.setInstanceAdvisorDelegate(delegate);
+      System.out.println("---> Using ia delegate " + delegate);
+
+      return invocation.invokeNext();
+   }
+   
+   private InstanceAdvisorDelegate getInstanceAdvisorDelegate(Object target, Advisor advisor, InstanceAdvisor instanceAdvisor)
+   {
+      if (instanceAdvisorDelegates == null)
+      {
+         instanceAdvisorDelegates = new WeakHashMap<Object, InstanceAdvisorDelegate>();
+      }
+      
+      if (target == null)
+      {
+         throw new RuntimeException("Attempt to get instance advisor without having an instance");
+      }
+      
+      InstanceAdvisorDelegate instanceAdvisorDelegate = instanceAdvisorDelegates.get(target);
+      
+      
+      if(instanceAdvisorDelegate != null)
+         return instanceAdvisorDelegate;
+
+      synchronized (this)
+      {
+         if(instanceAdvisorDelegate == null)
+         {
+            instanceAdvisorDelegate = new InstanceAdvisorDelegate(advisor, instanceAdvisor);
+            instanceAdvisorDelegate.initialize();
+            instanceAdvisorDelegates.put(target, instanceAdvisorDelegate);
+         }
+      }
+      return instanceAdvisorDelegate;
+   }
+}

Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/proxyinstanceadvisor/unit/ProxyInstanceAdvisorTestCase.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/proxyinstanceadvisor/unit/ProxyInstanceAdvisorTestCase.java	2008-04-14 08:59:53 UTC (rev 72153)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/proxyinstanceadvisor/unit/ProxyInstanceAdvisorTestCase.java	2008-04-14 09:14:36 UTC (rev 72154)
@@ -21,17 +21,13 @@
  */
 package org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.unit;
 
-import java.net.URL;
-
 import junit.framework.TestCase;
 
-import org.jboss.aop.AspectXmlLoader;
-import org.jboss.ejb3.interceptors.proxy.ProxyContainer;
+import org.jboss.ejb3.test.interceptors.common.AOPDeployer;
 import org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.MyInterface;
 import org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.PerInstanceInterceptor;
 import org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.PerJoinpointInterceptor;
 import org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.ProxiedBean;
-import org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.ProxiedInterceptor;
 import org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.ProxyContainerWithPool;
 import org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.SimplePoolInterceptor;
 import org.jboss.logging.Logger;
@@ -48,50 +44,59 @@
 
    public void test1() throws Throwable
    {
+      log.info("======= ProxyInstanceAdvisor.test1()");
       //AspectManager.verbose = true;
       
-      // Bootstrap AOP
-      URL url = Thread.currentThread().getContextClassLoader().getResource("proxyinstanceadvisor/jboss-aop.xml");
-      log.info("deploying AOP from " + url);
-      AspectXmlLoader.deployXML(url);
-
-      Thread.currentThread().setContextClassLoader(MyInterface.class.getClassLoader());
-      
-      ProxyContainerWithPool<ProxiedBean> container = new ProxyContainerWithPool<ProxiedBean>("ProxyTestCase", "InterceptorContainer", ProxiedBean.class);
-      
-      
-      Class<?> interfaces[] = { MyInterface.class };
-      MyInterface proxy = container.constructProxy(interfaces);
-      
-      reset(true);
-      String result = proxy.sayHi("Me");
-      assertEquals("Hi Me", result);
-      ProxiedBean bean1hi = ProxiedBean.instance;
-      PerInstanceInterceptor pi1hi = PerInstanceInterceptor.instance;
-      PerJoinpointInterceptor pj1hi = PerJoinpointInterceptor.instance;
-      
-      reset(false);
-      result = proxy.sayBye("Me");
-      assertEquals("Bye Me", result);
-      ProxiedBean bean1bye = ProxiedBean.instance;
-      PerInstanceInterceptor pi1bye = PerInstanceInterceptor.instance;
-      PerJoinpointInterceptor pj1bye = PerJoinpointInterceptor.instance;
-      
-      assertSame(bean1hi, bean1bye);
-      assertSame(pi1hi, pi1bye);
-      assertNotSame(pj1hi, pj1bye);
-
-      reset(true);
-      result = proxy.sayHi("Me");
-      assertEquals("Hi Me", result);
-      ProxiedBean bean2hi = ProxiedBean.instance;
-      PerInstanceInterceptor pi2hi = PerInstanceInterceptor.instance;
-      PerJoinpointInterceptor pj2hi = PerJoinpointInterceptor.instance;
-      assertNotSame(bean1hi, bean2hi);
-      
-      //FIXME - These must be enabled to start the test
-//      assertNotSame(pi2hi, pi1hi);
-//      assertNotSame(pj2hi, pj1hi);
+      AOPDeployer deployer = new AOPDeployer("proxyinstanceadvisor/jboss-aop.xml");
+      try
+      {
+         // Bootstrap AOP
+         log.info(deployer.deploy());
+   
+         Thread.currentThread().setContextClassLoader(MyInterface.class.getClassLoader());
+         
+         ProxyContainerWithPool<ProxiedBean> container = new ProxyContainerWithPool<ProxiedBean>("ProxyInstanceAdvisorTestCase", "InterceptorContainer", ProxiedBean.class);
+         
+         
+         Class<?> interfaces[] = { MyInterface.class };
+         MyInterface proxy = container.constructProxy(interfaces);
+         
+         
+         reset(true);
+         String result = proxy.sayHi("Me");
+         assertEquals("Hi Me", result);
+         ProxiedBean bean1hi = ProxiedBean.instance;
+         PerInstanceInterceptor pi1hi = PerInstanceInterceptor.instance;
+         PerJoinpointInterceptor pj1hi = PerJoinpointInterceptor.instance;
+         
+         reset(false);
+         result = proxy.sayBye("Me");
+         assertEquals("Bye Me", result);
+         ProxiedBean bean1bye = ProxiedBean.instance;
+         PerInstanceInterceptor pi1bye = PerInstanceInterceptor.instance;
+         PerJoinpointInterceptor pj1bye = PerJoinpointInterceptor.instance;
+         
+         assertSame(bean1hi, bean1bye);
+         assertSame(pi1hi, pi1bye);
+         assertNotSame(pj1hi, pj1bye);
+   
+         reset(true);
+         result = proxy.sayHi("Me");
+         assertEquals("Hi Me", result);
+         ProxiedBean bean2hi = ProxiedBean.instance;
+         PerInstanceInterceptor pi2hi = PerInstanceInterceptor.instance;
+         PerJoinpointInterceptor pj2hi = PerJoinpointInterceptor.instance;
+         assertNotSame(bean1hi, bean2hi);
+         
+         //FIXME - These must be enabled to start the test
+         assertNotSame(pi2hi, pi1hi);
+         assertNotSame(pj2hi, pj1hi);
+      }
+      finally
+      {
+         log.info(deployer.undeploy());
+      }
+      log.info("======= Done");
    }
    
    private void reset(boolean createNewInstance)

Modified: projects/ejb3/trunk/interceptors/src/test/resources/proxyinstanceadvisor/jboss-aop.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/proxyinstanceadvisor/jboss-aop.xml	2008-04-14 08:59:53 UTC (rev 72153)
+++ projects/ejb3/trunk/interceptors/src/test/resources/proxyinstanceadvisor/jboss-aop.xml	2008-04-14 09:14:36 UTC (rev 72154)
@@ -1,5 +1,7 @@
 <aop>
+
    <interceptor name="SimplePoolInterceptor" class="org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.SimplePoolInterceptor" scope="PER_VM"/>  
+   <interceptor name="ManagedObjectAdvisorInstanceInterceptor" class="org.jboss.ejb3.interceptors.aop.ManagedObjectAdvisorInstanceInterceptor" scope="PER_VM"/>  
    <interceptor name="PerInstanceInterceptor" class="org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.PerInstanceInterceptor" scope="PER_INSTANCE"/>  
    <interceptor name="PerJoinpointInterceptor" class="org.jboss.ejb3.test.interceptors.proxyinstanceadvisor.PerJoinpointInterceptor" scope="PER_JOINPOINT"/>  
 	
@@ -7,6 +9,7 @@
 	<domain name="InterceptorContainer">			
 		<bind pointcut="execution(* @org.jboss.ejb3.interceptors.ManagedObject->*(..))">
 		   <interceptor-ref name="SimplePoolInterceptor"/>
+		   <interceptor-ref name="ManagedObjectAdvisorInstanceInterceptor"/>
 		   <interceptor-ref name="PerInstanceInterceptor"/>
 		   <interceptor-ref name="PerJoinpointInterceptor"/>
 		</bind>




More information about the jboss-cvs-commits mailing list