Author: covener
Date: Mon Sep  6 22:07:27 2010
New Revision: 993163

URL: http://svn.apache.org/viewvc?rev=993163&view=rev
Log:
[OWB-446] defined-in-class (no-arg) EJB lifecycle callbacks were not
being properly run in the overall interceptor stack (they should be
suppressable by not calling our ic.proceed in a 299 interceptor,
and they should run in the same stack as the 299-defined interceptors)


Modified:
    
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java

Modified: 
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java?rev=993163&r1=993162&r2=993163&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
 (original)
+++ 
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
 Mon Sep  6 22:07:27 2010
@@ -231,14 +231,13 @@ public class OpenWebBeansEjbInterceptor 
                 {
                     InvocationContextImpl impl = new 
InvocationContextImpl(null, context.getTarget(), null, null, 
                             
InterceptorUtil.getInterceptorMethods(injectionTarget.getInterceptorStack(), 
InterceptorType.POST_CONSTRUCT), InterceptorType.POST_CONSTRUCT);
+                    impl.setEJBInvocationContext(context);
                     
impl.setCreationalContext(threadLocalCreationalContext.get());
 
-                    // run OWB interceptors
+                    // Call 299 interceptors, and if they all call proceed on 
OWB's invocationContext, 
+                    // do the same on the EJB containers context.
                     impl.proceed();
                 }
-
-                // run EJB interceptors
-                context.proceed();
             }
             catch (Exception e)
             {
@@ -283,13 +282,13 @@ public class OpenWebBeansEjbInterceptor 
                 {
                     InvocationContextImpl impl = new 
InvocationContextImpl(null, context.getTarget(), null, null, 
                             
InterceptorUtil.getInterceptorMethods(injectionTarget.getInterceptorStack(),InterceptorType.PRE_DESTROY),
 InterceptorType.PRE_DESTROY);
+                    impl.setEJBInvocationContext(context);
                     
impl.setCreationalContext(threadLocalCreationalContext.get());
 
-                    // Call OWB interceptors
+                    // Call 299 interceptors, and if they all call proceed on 
OWB's invocationContext, 
+                    // do the same on the EJB containers context.
                     impl.proceed();
                 }
-                // Call EJB interceptors
-                context.proceed();
             }
             catch (Exception e)
             {
@@ -648,10 +647,13 @@ public class OpenWebBeansEjbInterceptor 
                 
                 InvocationContextImpl impl = new InvocationContextImpl(null, 
instance, null, null, 
                         
InterceptorUtil.getInterceptorMethods(interceptorStack, interceptorType), 
interceptorType);
+                impl.setEJBInvocationContext(ejbContext);
                 impl.setCreationalContext(localcc);
                 
                 try
                 {
+                    // Call 299 interceptors, and if they all call proceed on 
OWB's invocationContext, 
+                    // do the same on the EJB containers context.
                     impl.proceed();
                 }
                 catch (Exception e)
@@ -663,9 +665,6 @@ public class OpenWebBeansEjbInterceptor 
             { 
                 logger.debug("No lifecycle interceptors for [{0}]", instance);
             }
-    
-            //Call next interceptor
-            ejbContext.proceed();
         }
         catch (Exception e) 
         { 

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java?rev=993163&r1=993162&r2=993163&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java
 Mon Sep  6 22:07:27 2010
@@ -321,7 +321,16 @@ public class InvocationContextImpl imple
             }
 
         }
-
+        else 
+        {
+            /* For EJB's, we do not call the "in bean class" interceptors 
--the container does, and only if
+             * our last 299 interceptor called proceed (which takes us here).
+             */
+            if ((this.owbBean instanceof EnterpriseBeanMarker) && 
(this.ejbInvocationContext != null))
+            {
+                result = ejbInvocationContext.proceed();
+            }
+        }
         return result;
     }
 


Reply via email to