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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 23 06:01:03 EST 2008


Author: wolfc
Date: 2008-01-23 06:01:02 -0500 (Wed, 23 Jan 2008)
New Revision: 69232

Modified:
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/LifecycleCallbackBeanMethodInterceptor.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/LifecycleCallbackInterceptorMethodInterceptor.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/DirectBean.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/unit/DirectTestCase.java
Log:
Fixed bean life cycle callback


Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java	2008-01-23 09:07:42 UTC (rev 69231)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java	2008-01-23 11:01:02 UTC (rev 69232)
@@ -70,7 +70,7 @@
    @SuppressWarnings("unchecked")
    private static final Class<? extends Annotation> lifeCycleAnnotationClasses[] = (Class<? extends Annotation>[]) new Class<?>[] { PostActivate.class, PostConstruct.class, PreDestroy.class, PrePassivate.class };
    
-   private List<? extends Interceptor> createInterceptors(Advisor advisor, InterceptorFactory interceptorFactory, Class<?>[] interceptorClasses, List<BusinessMethodInterceptorMethodInterceptor> interceptors, Map<Class<?>, Object> existingInterceptors, Map<Class<? extends Annotation>, List<LifecycleCallbackInterceptorMethodInterceptor>> lifeCycleInterceptors) throws InstantiationException, IllegalAccessException
+   private List<? extends Interceptor> createInterceptors(Advisor advisor, InterceptorFactory interceptorFactory, Class<?>[] interceptorClasses, List<BusinessMethodInterceptorMethodInterceptor> interceptors, Map<Class<?>, Object> existingInterceptors, Map<Class<? extends Annotation>, List<Interceptor>> lifeCycleInterceptors) throws InstantiationException, IllegalAccessException
    {
       if(interceptorClasses != null)
       {
@@ -128,10 +128,10 @@
          
          Map<Class<?>, Object> interceptors = new HashMap<Class<?>, Object>();
          
-         Map<Class<? extends Annotation>, List<LifecycleCallbackInterceptorMethodInterceptor>> lifeCycleInterceptors = new HashMap<Class<? extends Annotation>, List<LifecycleCallbackInterceptorMethodInterceptor>>();
+         Map<Class<? extends Annotation>, List<Interceptor>> lifeCycleInterceptors = new HashMap<Class<? extends Annotation>, List<Interceptor>>();
          for(Class<? extends Annotation> lifeCycleAnnotationClass : lifeCycleAnnotationClasses)
          {
-            List<LifecycleCallbackInterceptorMethodInterceptor> list = new ArrayList<LifecycleCallbackInterceptorMethodInterceptor>();
+            List<Interceptor> list = new ArrayList<Interceptor>();
             lifeCycleInterceptors.put(lifeCycleAnnotationClass, list);
          }
          
@@ -194,6 +194,13 @@
             {
                beanInterceptors.add(new BusinessMethodBeanMethodInterceptor(beanMethod));
             }
+            for(Class<? extends Annotation> lifeCycleAnnotationClass : lifeCycleAnnotationClasses)
+            {
+               if(advisor.hasAnnotation(beanMethod, lifeCycleAnnotationClass))
+               {
+                  lifeCycleInterceptors.get(lifeCycleAnnotationClass).add(new LifecycleCallbackBeanMethodInterceptor(beanMethod));
+               }
+            }
          }
          log.debug("Found bean interceptors " + beanInterceptors);
          instanceAdvisor.getMetaData().addMetaData(InterceptorsFactory.class, "beanInterceptors", beanInterceptors);
@@ -261,12 +268,12 @@
    }
    
    @SuppressWarnings("unchecked")
-   private static Map<Class<? extends Annotation>, List<LifecycleCallbackInterceptorMethodInterceptor>> getLifeCycleInterceptors(InstanceAdvisor instanceAdvisor)
+   private static Map<Class<? extends Annotation>, List<Interceptor>> getLifeCycleInterceptors(InstanceAdvisor instanceAdvisor)
    {
-      return (Map<Class<? extends Annotation>, List<LifecycleCallbackInterceptorMethodInterceptor>>) instanceAdvisor.getMetaData().getMetaData(InterceptorsFactory.class, "lifeCycleInterceptors");
+      return (Map<Class<? extends Annotation>, List<Interceptor>>) instanceAdvisor.getMetaData().getMetaData(InterceptorsFactory.class, "lifeCycleInterceptors");
    }
    
-   public static List<? extends Interceptor> getLifeCycleInterceptors(InstanceAdvisor instanceAdvisor, Class<? extends Annotation> lifeCycleAnnotationClass)
+   public static List<Interceptor> getLifeCycleInterceptors(InstanceAdvisor instanceAdvisor, Class<? extends Annotation> lifeCycleAnnotationClass)
    {
       return getLifeCycleInterceptors(instanceAdvisor).get(lifeCycleAnnotationClass);
    }
@@ -277,7 +284,7 @@
     * @return
     */
    @Deprecated
-   public static List<? extends Interceptor> getPreDestroys(InstanceAdvisor instanceAdvisor)
+   public static List<Interceptor> getPreDestroys(InstanceAdvisor instanceAdvisor)
    {
       return getLifeCycleInterceptors(instanceAdvisor, PreDestroy.class);
    }

Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/LifecycleCallbackBeanMethodInterceptor.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/LifecycleCallbackBeanMethodInterceptor.java	2008-01-23 09:07:42 UTC (rev 69231)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/LifecycleCallbackBeanMethodInterceptor.java	2008-01-23 11:01:02 UTC (rev 69232)
@@ -34,45 +34,50 @@
  * void <METHOD>()
  *
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @version $Revision: $
+ * @version $Revision$
  */
 public class LifecycleCallbackBeanMethodInterceptor implements Interceptor
 {
-   private Object interceptor;
    private Method method;
    
    /**
     * 
-    * @param interceptor                an spec interceptor
-    * @param lifecycleCallbackMethod    a lifecycle callback on the spec interceptor
+    * @param lifecycleCallbackMethod    a lifecycle callback on the bean
     */
-   public LifecycleCallbackBeanMethodInterceptor(Object interceptor, Method lifecycleCallbackMethod)
+   public LifecycleCallbackBeanMethodInterceptor(Method lifecycleCallbackMethod)
    {
-      assert interceptor != null : "interceptor is null";
       assert lifecycleCallbackMethod != null : "lifecycleCallbackMethod is null";
       assert lifecycleCallbackMethod.getReturnType() == Void.TYPE : "return type must be void";
       assert lifecycleCallbackMethod.getParameterTypes().length == 0 : "wrong parameter signature";
       
-      this.interceptor = interceptor;
       this.method = lifecycleCallbackMethod;
    }
    
    public String getName()
    {
-      return "LifecycleCallbackBeanMethodInterceptor";
+      return getClass().getName();
    }
 
    public Object invoke(final Invocation invocation) throws Throwable
    {
       try
       {
-         method.invoke(interceptor);
-         // TODO: return null or invokeTarget?
-         return invocation.invokeNext();
+         boolean accessible = method.isAccessible();
+         method.setAccessible(true);
+         try
+         {
+            method.invoke(invocation.getTargetObject());
+         }
+         finally
+         {
+            method.setAccessible(accessible);
+         }
+         return null;
       }
       catch(InvocationTargetException e)
       {
          throw e.getCause();
       }
    }
+   
 }

Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/LifecycleCallbackInterceptorMethodInterceptor.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/LifecycleCallbackInterceptorMethodInterceptor.java	2008-01-23 09:07:42 UTC (rev 69231)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/LifecycleCallbackInterceptorMethodInterceptor.java	2008-01-23 11:01:02 UTC (rev 69232)
@@ -37,7 +37,7 @@
  * void <METHOD> (InvocationContext)
  *
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @version $Revision: $
+ * @version $Revision$
  */
 public class LifecycleCallbackInterceptorMethodInterceptor implements Interceptor
 {
@@ -83,8 +83,7 @@
          {
             method.setAccessible(accessible);
          }
-         // TODO: return null or invokeTarget?
-         return invocation.invokeNext();
+         return null;
       }
       catch(InvocationTargetException e)
       {

Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/DirectBean.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/DirectBean.java	2008-01-23 09:07:42 UTC (rev 69231)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/DirectBean.java	2008-01-23 11:01:02 UTC (rev 69232)
@@ -21,6 +21,7 @@
  */
 package org.jboss.ejb3.test.interceptors.direct;
 
+import javax.annotation.PostConstruct;
 import javax.interceptor.AroundInvoke;
 import javax.interceptor.Interceptors;
 import javax.interceptor.InvocationContext;
@@ -35,14 +36,14 @@
  * And it has bean method interceptors: aroundInvoke
  *
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @version $Revision: $
+ * @version $Revision$
  */
 @Interceptors(DirectInterceptor.class)
 public class DirectBean
 {
    private static final Logger log = Logger.getLogger(DirectBean.class);
    
-   public static int constructors = 0, aroundInvokes = 0;
+   public static int constructors = 0, aroundInvokes = 0, postConstructs = 0;
    
    public DirectBean()
    {
@@ -73,4 +74,10 @@
    {
       log.debug("intercept");
    }
+   
+   @PostConstruct
+   public void postConstruct()
+   {
+      postConstructs++;
+   }
 }

Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/unit/DirectTestCase.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/unit/DirectTestCase.java	2008-01-23 09:07:42 UTC (rev 69231)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/unit/DirectTestCase.java	2008-01-23 11:01:02 UTC (rev 69232)
@@ -42,7 +42,7 @@
  * are routed through the direct container.
  * 
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @version $Revision: $
+ * @version $Revision$
  */
 public class DirectTestCase extends TestCase
 {
@@ -83,6 +83,7 @@
       DirectBean bean = container.construct();
       
       assertEquals("DirectInterceptor postConstruct must have been called once", 1, DirectInterceptor.postConstructs);
+      assertEquals("DirectBean postConstruct must have been called once", 1, DirectBean.postConstructs);
       
       System.out.println(bean.getClass() + " " + bean.getClass().getClassLoader());
       System.out.println("  " + Arrays.toString(bean.getClass().getInterfaces()));




More information about the jboss-cvs-commits mailing list