You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ga...@apache.org on 2010/08/18 19:31:17 UTC

svn commit: r986808 - in /openejb/trunk/openejb3/container/openejb-core/src: main/java/org/apache/openejb/config/LegacyProcessor.java test/java/org/apache/openejb/core/stateful/StatefulSessionSynchronizationTest.java

Author: gawor
Date: Wed Aug 18 17:31:17 2010
New Revision: 986808

URL: http://svn.apache.org/viewvc?rev=986808&view=rev
Log:
OPENEJB-1329: Get right class for methods of SessionSynchronization interface. Patch from Ivan.

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/LegacyProcessor.java
    openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulSessionSynchronizationTest.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/LegacyProcessor.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/LegacyProcessor.java?rev=986808&r1=986807&r2=986808&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/LegacyProcessor.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/LegacyProcessor.java Wed Aug 18 17:31:17 2010
@@ -61,9 +61,13 @@ public class LegacyProcessor implements 
             SessionBean sessionBean = (SessionBean) bean;
 
             if (sessionBean.getSessionType() == STATEFUL && SessionSynchronization.class.isAssignableFrom(clazz)) {
-                sessionBean.getAfterBegin().add(new LifecycleCallback(clazz.getName(), "afterBegin"));
-                sessionBean.getBeforeCompletion().add(new LifecycleCallback(clazz.getName(), "beforeCompletion"));
-                sessionBean.getAfterCompletion().add(new LifecycleCallback(clazz.getName(), "afterCompletion"));
+                try {
+                    sessionBean.getAfterBegin().add(new LifecycleCallback(clazz.getMethod("afterBegin")));
+                    sessionBean.getBeforeCompletion().add(new LifecycleCallback(clazz.getMethod("beforeCompletion")));
+                    sessionBean.getAfterCompletion().add(new LifecycleCallback(clazz.getMethod("afterCompletion", boolean.class)));
+                } catch (NoSuchMethodException e) {
+                    //Ignore, should never happen
+                }
             }
 
             if (javax.ejb.SessionBean.class.isAssignableFrom(clazz)) {
@@ -91,4 +95,5 @@ public class LegacyProcessor implements 
             }
         }
     }
+
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulSessionSynchronizationTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulSessionSynchronizationTest.java?rev=986808&r1=986807&r2=986808&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulSessionSynchronizationTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulSessionSynchronizationTest.java Wed Aug 18 17:31:17 2010
@@ -31,6 +31,8 @@ import javax.ejb.SessionSynchronization;
 import javax.ejb.Stateful;
 import javax.ejb.TransactionAttribute;
 import javax.ejb.TransactionAttributeType;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptors;
 import javax.interceptor.InvocationContext;
 import javax.naming.InitialContext;
 
@@ -43,6 +45,7 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.TransactionServiceInfo;
 import org.apache.openejb.client.LocalInitialContextFactory;
 import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.core.stateful.StatefulInterceptorTest.Call;
 import org.apache.openejb.jee.AssemblyDescriptor;
 import org.apache.openejb.jee.EjbJar;
 import org.apache.openejb.jee.Interceptor;
@@ -113,12 +116,18 @@ public class StatefulSessionSynchronizat
         ejbJar.addEnterpriseBean(subBeanG);
         assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(subBeanG, interceptor));
 
+        //Test SessionSynchronization interface but methods are in the parent class
+        //Interceptor is declared on the bean method
+        StatefulBean subBeanH = new StatefulBean(SubBeanH.class);
+        ejbJar.addEnterpriseBean(subBeanH);
+
         EjbJarInfo ejbJarInfo = config.configureApplication(ejbJar);
         assembler.createApplication(ejbJarInfo);
         InitialContext context = new InitialContext();
 
-        List<Call> expectedResult = Arrays.asList(Call.INTERCEPTOR_AFTER_BEGIN, Call.BEAN_AFTER_BEGIN, Call.INTERCEPTOR_BEFORE_COMPLETION, Call.BEAN_BEFORE_COMPLETION,
-                Call.INTERCEPTOR_AFTER_COMPLETION, Call.BEAN_AFTER_COMPLETION);
+        List<Call> expectedResult = Arrays.asList(Call.INTERCEPTOR_AFTER_BEGIN, Call.BEAN_AFTER_BEGIN, Call.INTERCEPTOR_AROUND_INVOKE_BEGIN, Call.BEAN_AROUND_INVOKE_BEGIN, Call.BEAN_METHOD,
+                Call.BEAN_AROUND_INVOKE_AFTER, Call.INTERCEPTOR_AROUND_INVOKE_AFTER, Call.INTERCEPTOR_BEFORE_COMPLETION, Call.BEAN_BEFORE_COMPLETION, Call.INTERCEPTOR_AFTER_COMPLETION,
+                Call.BEAN_AFTER_COMPLETION);
 
         {
             BeanInterface beanA = (BeanInterface) context.lookup("SubBeanALocal");
@@ -151,21 +160,32 @@ public class StatefulSessionSynchronizat
         {
             BeanInterface beanE = (BeanInterface) context.lookup("SubBeanELocal");
             beanE.simpleMethod();
-            assertEquals(Arrays.asList(Call.INTERCEPTOR_AFTER_BEGIN, Call.BEAN_AFTER_BEGIN, Call.INTERCEPTOR_BEFORE_COMPLETION, Call.INTERCEPTOR_AFTER_COMPLETION), result);
+            assertEquals(Arrays.asList(Call.INTERCEPTOR_AFTER_BEGIN, Call.BEAN_AFTER_BEGIN, Call.INTERCEPTOR_AROUND_INVOKE_BEGIN, Call.BEAN_AROUND_INVOKE_BEGIN, Call.BEAN_METHOD,
+                    Call.BEAN_AROUND_INVOKE_AFTER, Call.INTERCEPTOR_AROUND_INVOKE_AFTER, Call.INTERCEPTOR_BEFORE_COMPLETION, Call.INTERCEPTOR_AFTER_COMPLETION), result);
             result.clear();
         }
 
         {
             BeanInterface beanF = (BeanInterface) context.lookup("SubBeanFLocal");
             beanF.simpleMethod();
-            assertEquals(Arrays.asList(Call.INTERCEPTOR_AFTER_BEGIN, Call.INTERCEPTOR_BEFORE_COMPLETION, Call.INTERCEPTOR_AFTER_COMPLETION, Call.BEAN_AFTER_COMPLETION), result);
+            assertEquals(Arrays.asList(Call.INTERCEPTOR_AFTER_BEGIN, Call.INTERCEPTOR_AROUND_INVOKE_BEGIN, Call.BEAN_AROUND_INVOKE_BEGIN, Call.BEAN_METHOD, Call.BEAN_AROUND_INVOKE_AFTER,
+                    Call.INTERCEPTOR_AROUND_INVOKE_AFTER, Call.INTERCEPTOR_BEFORE_COMPLETION, Call.INTERCEPTOR_AFTER_COMPLETION, Call.BEAN_AFTER_COMPLETION), result);
             result.clear();
         }
 
         {
             BeanInterface beanG = (BeanInterface) context.lookup("SubBeanGLocal");
             beanG.simpleMethod();
-            assertEquals(Arrays.asList(Call.INTERCEPTOR_AFTER_BEGIN, Call.INTERCEPTOR_BEFORE_COMPLETION, Call.BEAN_BEFORE_COMPLETION, Call.INTERCEPTOR_AFTER_COMPLETION), result);
+            assertEquals(Arrays.asList(Call.INTERCEPTOR_AFTER_BEGIN, Call.INTERCEPTOR_AROUND_INVOKE_BEGIN, Call.BEAN_AROUND_INVOKE_BEGIN, Call.BEAN_METHOD, Call.BEAN_AROUND_INVOKE_AFTER,
+                    Call.INTERCEPTOR_AROUND_INVOKE_AFTER, Call.INTERCEPTOR_BEFORE_COMPLETION, Call.BEAN_BEFORE_COMPLETION, Call.INTERCEPTOR_AFTER_COMPLETION), result);
+            result.clear();
+        }
+
+        {
+            BeanInterface beanG = (BeanInterface) context.lookup("SubBeanHLocal");
+            beanG.simpleMethod();
+            assertEquals(Arrays.asList(Call.BEAN_AFTER_BEGIN, Call.INTERCEPTOR_AROUND_INVOKE_BEGIN, Call.BEAN_AROUND_INVOKE_BEGIN, Call.BEAN_METHOD, Call.BEAN_AROUND_INVOKE_AFTER,
+                    Call.INTERCEPTOR_AROUND_INVOKE_AFTER, Call.BEAN_BEFORE_COMPLETION, Call.BEAN_AFTER_COMPLETION), result);
             result.clear();
         }
     }
@@ -179,7 +199,15 @@ public class StatefulSessionSynchronizat
 
         @TransactionAttribute(TransactionAttributeType.REQUIRED)
         public void simpleMethod() {
+            result.add(Call.BEAN_METHOD);
+        }
 
+        @AroundInvoke
+        public Object invoke(InvocationContext context) throws Exception {
+            result.add(Call.BEAN_AROUND_INVOKE_BEGIN);
+            Object o = context.proceed();
+            result.add(Call.BEAN_AROUND_INVOKE_AFTER);
+            return o;
         }
 
     }
@@ -324,9 +352,52 @@ public class StatefulSessionSynchronizat
             result.add(Call.INTERCEPTOR_AFTER_COMPLETION);
             invocationContext.proceed();
         }
+
+        @AroundInvoke
+        public Object invoke(InvocationContext context) throws Exception {
+            result.add(Call.INTERCEPTOR_AROUND_INVOKE_BEGIN);
+            Object o = context.proceed();
+            result.add(Call.INTERCEPTOR_AROUND_INVOKE_AFTER);
+            return o;
+        }
+    }
+
+    public static class BaseBeanB implements BeanInterface {
+
+        @TransactionAttribute(TransactionAttributeType.REQUIRED)
+        @Interceptors(SimpleInterceptor.class)
+        public void simpleMethod() {
+            result.add(Call.BEAN_METHOD);
+        }
+
+        public void afterBegin() {
+            result.add(Call.BEAN_AFTER_BEGIN);
+        }
+
+        public void afterCompletion(boolean arg0) {
+            result.add(Call.BEAN_AFTER_COMPLETION);
+        }
+
+        public void beforeCompletion() {
+            result.add(Call.BEAN_BEFORE_COMPLETION);
+        }
+
+        @AroundInvoke
+        public Object aroundInvoke(InvocationContext context) throws Exception {
+            result.add(Call.BEAN_AROUND_INVOKE_BEGIN);
+            Object o = context.proceed();
+            result.add(Call.BEAN_AROUND_INVOKE_AFTER);
+            return o;
+        }
+
+    }
+
+    @Stateful
+    @Local(BeanInterface.class)
+    public static class SubBeanH extends BaseBeanB implements SessionSynchronization {
     }
 
     public static enum Call {
-        BEAN_AFTER_BEGIN, BEAN_BEFORE_COMPLETION, BEAN_AFTER_COMPLETION, BAD_VALUE, INTERCEPTOR_AFTER_BEGIN, INTERCEPTOR_BEFORE_COMPLETION, INTERCEPTOR_AFTER_COMPLETION
+        BEAN_METHOD, BEAN_AROUND_INVOKE_BEGIN, BEAN_AROUND_INVOKE_AFTER, INTERCEPTOR_AROUND_INVOKE_BEGIN, INTERCEPTOR_AROUND_INVOKE_AFTER, BEAN_AFTER_BEGIN, BEAN_BEFORE_COMPLETION, BEAN_AFTER_COMPLETION, BAD_VALUE, INTERCEPTOR_AFTER_BEGIN, INTERCEPTOR_BEFORE_COMPLETION, INTERCEPTOR_AFTER_COMPLETION
     }
 }