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>