You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/12/23 21:15:46 UTC

[2/2] tomee git commit: validation of EJB impl classes - asked on the cdi list if this test makes any sense

validation of EJB impl classes - asked on the cdi list if this test makes any sense


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/e7fd305a
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/e7fd305a
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/e7fd305a

Branch: refs/heads/develop
Commit: e7fd305a8acb598cf3a333d25c9bff6cfa85a397
Parents: 1d1b3fe
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Tue Dec 23 21:15:30 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Tue Dec 23 21:15:30 2014 +0100

----------------------------------------------------------------------
 .../java/org/apache/openejb/BeanContext.java    | 37 ++++++++++++++++++++
 tck/cdi-embedded/src/test/resources/failing.xml |  2 +-
 2 files changed, 38 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/e7fd305a/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java b/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
index 7d45925..9ba9c73 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
@@ -70,13 +70,16 @@ import javax.ejb.Timer;
 import javax.enterprise.context.ConversationScoped;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Decorator;
+import javax.enterprise.inject.spi.DeploymentException;
 import javax.enterprise.inject.spi.Interceptor;
 import javax.naming.Context;
 import javax.persistence.EntityManagerFactory;
+import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -119,6 +122,7 @@ public class BeanContext extends DeploymentContext {
             return;
         }
 
+        boolean hasInterceptor = false;
         for (final Map.Entry<Method, InterceptorResolutionService.BusinessMethodInterceptorInfo> entry : info.getBusinessMethodsInfo().entrySet()) {
             final Interceptor<?>[] interceptors = entry.getValue().getCdiInterceptors();
             if (interceptors == null) {
@@ -128,10 +132,43 @@ public class BeanContext extends DeploymentContext {
             for (final Interceptor<?> i : interceptors) {
                 addCdiMethodInterceptor(entry.getKey(), InterceptorData.scan(i.getBeanClass()));
             }
+            hasInterceptor = hasInterceptor || interceptors.length > 0;
             entry.getValue().setEjbInterceptors(new ArrayList<Interceptor<?>>());
             entry.getValue().setCdiInterceptors(new ArrayList<Interceptor<?>>());
         }
 
+        if (hasInterceptor) { // 100% for TCKs, doesn't make any sense
+            for (final Method m : getManagedClass().getDeclaredMethods()) {
+                boolean inApi = false;
+                final Set<Type> types = cdiEjbBean.getTypes();
+                for (final Type t : types) {
+                    if (t == Object.class || t == Serializable.class) {
+                        continue;
+                    }
+                    if (m.getDeclaringClass() == t) {
+                        inApi = true;
+                        break;
+                    }
+                    if (Class.class.isInstance(t)) {
+                        try {
+                            Class.class.cast(t).getMethod(m.getName(), m.getParameterTypes());
+                            inApi = true;
+                            break;
+                        } catch (final NoSuchMethodException e) {
+                            // no-op
+                        }
+                    }
+                }
+                if (inApi) {
+                    continue;
+                }
+                final int modifiers = m.getModifiers();
+                if (Modifier.isFinal(modifiers) && !Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers)) {
+                    throw new DeploymentException("We need to proxy " + getManagedClass() + " but " + m + " is final");
+                }
+            }
+        }
+
         if (info.getSelfInterceptorBean() != null) { // handled by openejb
             try {
                 final Field field = InterceptorResolutionService.BeanInterceptorInfo.class.getDeclaredField("selfInterceptorBean");

http://git-wip-us.apache.org/repos/asf/tomee/blob/e7fd305a/tck/cdi-embedded/src/test/resources/failing.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/src/test/resources/failing.xml b/tck/cdi-embedded/src/test/resources/failing.xml
index 86ff055..d9a8ded 100644
--- a/tck/cdi-embedded/src/test/resources/failing.xml
+++ b/tck/cdi-embedded/src/test/resources/failing.xml
@@ -19,7 +19,7 @@
   <test name="CDI TCK">
     <!-- -Dopenejb.cdi.filter.classloader=false -Dorg.apache.openejb.assembler.classic.WebAppBuilder=org.apache.openejb.web.LightweightWebAppBuilder -Dopenejb.cdi.debug=true -Dopenejb.http.mock-request=true  -->
     <classes>
-      <class name="org.jboss.cdi.tck.tests.context.session.event.SessionScopeEventTest" />
+      <class name="org.jboss.cdi.tck.tests.interceptors.definition.broken.finalClassInterceptor.FinalMethodClassLevelInterceptorTest" />
     </classes>
   </test>
 </suite>