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 2015/03/04 22:03:50 UTC
tomee git commit: few generic handling for ejbs
Repository: tomee
Updated Branches:
refs/heads/develop 073b05a62 -> a1ec5e3b0
few generic handling for ejbs
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/a1ec5e3b
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/a1ec5e3b
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/a1ec5e3b
Branch: refs/heads/develop
Commit: a1ec5e3b09099ff1dc0f938a94fa38df7142e58a
Parents: 073b05a
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Wed Mar 4 22:03:38 2015 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Wed Mar 4 22:03:38 2015 +0100
----------------------------------------------------------------------
.../java/org/apache/openejb/cdi/CdiEjbBean.java | 87 ++++++++++----------
.../java/org/apache/openejb/cdi/CdiPlugin.java | 3 +-
tck/cdi-embedded/pom.xml | 5 +-
tck/cdi-embedded/src/test/resources/failing.xml | 2 +-
4 files changed, 49 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/a1ec5e3b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
index 34cd0b3..b11d079 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
@@ -34,23 +34,8 @@ import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.ejb.common.component.BaseEjbBean;
import org.apache.webbeans.intercept.InterceptorResolutionService;
import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.util.GenericsUtil;
-import javax.decorator.Decorator;
-import javax.ejb.NoSuchEJBException;
-import javax.ejb.Remove;
-import javax.enterprise.context.Dependent;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.Typed;
-import javax.enterprise.inject.spi.AnnotatedMethod;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanAttributes;
-import javax.enterprise.inject.spi.DefinitionException;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.InjectionTarget;
-import javax.enterprise.inject.spi.SessionBeanType;
-import javax.interceptor.Interceptor;
-import javax.transaction.UserTransaction;
import java.io.Serializable;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
@@ -61,12 +46,29 @@ import java.rmi.NoSuchObjectException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
+import javax.decorator.Decorator;
+import javax.ejb.NoSuchEJBException;
+import javax.ejb.Remove;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.Typed;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanAttributes;
+import javax.enterprise.inject.spi.DefinitionException;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.enterprise.inject.spi.SessionBeanType;
+import javax.interceptor.Interceptor;
+import javax.transaction.UserTransaction;
public class CdiEjbBean<T> extends BaseEjbBean<T> implements InterceptedMarker, DeploymentValidationService.BeanInterceptorInfoProvider {
private final Map<Integer, Object> dependentSFSBToBeRemoved = new ConcurrentHashMap<Integer, Object>();
@@ -86,15 +88,16 @@ public class CdiEjbBean<T> extends BaseEjbBean<T> implements InterceptedMarker,
EjbInjectionTargetImpl.class.cast(getInjectionTarget()).setCdiEjbBean(this);
}
- public CdiEjbBean(final BeanContext beanContext, final WebBeansContext webBeansContext, final Class beanClass, final AnnotatedType<T> at,
+ public CdiEjbBean(final BeanContext bc, final WebBeansContext webBeansContext, final Class beanClass, final AnnotatedType<T> at,
final InjectionTargetFactoryImpl<T> factory, final BeanAttributes<T> attributes) {
- super(webBeansContext, toSessionType(beanContext.getComponentType()), at, new EJBBeanAttributesImpl<T>(beanContext,
- attributes, true), beanClass, factory);
- this.beanContext = beanContext;
- beanContext.set(Bean.class, this);
- passivatingId = beanContext.getDeploymentID() + getReturnType().getName();
-
- final boolean stateful = BeanType.STATEFUL.equals(beanContext.getComponentType());
+ super(webBeansContext, toSessionType(bc.getComponentType()), at,
+ new EJBBeanAttributesImpl<T>(bc, attributes),
+ beanClass, factory);
+ this.beanContext = bc;
+ bc.set(Bean.class, this);
+ passivatingId = bc.getDeploymentID() + getReturnType().getName();
+
+ final boolean stateful = BeanType.STATEFUL.equals(bc.getComponentType());
final boolean isDependent = getScope().equals(Dependent.class);
isDependentAndStateful = isDependent && stateful;
if (webBeansContext.getBeanManagerImpl().isPassivatingScope(getScope()) && stateful) {
@@ -321,16 +324,11 @@ public class CdiEjbBean<T> extends BaseEjbBean<T> implements InterceptedMarker,
private final BeanContext beanContext;
private final Set<Type> ejbTypes;
- public EJBBeanAttributesImpl(final BeanContext bc, final BeanAttributes<T> beanAttributes, final boolean withSerializable) {
+ public EJBBeanAttributesImpl(final BeanContext bc, final BeanAttributes<T> beanAttributes) {
super(beanAttributes, false);
this.beanContext = bc;
this.ejbTypes = new HashSet<Type>();
initTypes();
- if (withSerializable) {
- if (!ejbTypes.contains(Serializable.class)) {
- ejbTypes.add(Serializable.class);
- }
- }
}
@Override
@@ -349,8 +347,19 @@ public class CdiEjbBean<T> extends BaseEjbBean<T> implements InterceptedMarker,
final List<Class> cl = beanContext.getBusinessLocalInterfaces();
if (cl != null && !cl.isEmpty()) {
+ final Map<Class<?>, Type> apis = new HashMap<>(cl.size());
+ for (final Type t : beanContext.getManagedClass().getGenericInterfaces()) {
+ if (ParameterizedType.class.isInstance(t)) {
+ try {
+ apis.put(Class.class.cast(ParameterizedType.class.cast(t).getRawType()), t);
+ } catch (final Throwable th) {
+ // no-op
+ }
+ }
+ }
for (final Class<?> c : cl) {
- ejbTypes.addAll(parentInterfaces(c));
+ final Type type = apis.get(c);
+ ejbTypes.addAll(GenericsUtil.getTypeClosure(type != null ? type : c));
}
}
@@ -364,22 +373,14 @@ public class CdiEjbBean<T> extends BaseEjbBean<T> implements InterceptedMarker,
ejbTypes.add(Object.class);
}
- private static Collection<Class<?>> parentInterfaces(final Class<?> c) {
- final Collection<Class<?>> set = new HashSet<>();
- set.add(c);
- for (final Class<?> parent : c.getInterfaces()) {
- set.addAll(parentInterfaces(parent));
- }
- return set;
- }
-
private static void addApiTypes(final Collection<Type> clazzes, final Class<?> beanClass) {
final Typed typed = beanClass.getAnnotation(Typed.class);
if (typed == null || typed.value().length == 0) {
- Class<?> current = beanClass;
- while (current != null && !Object.class.equals(current)) {
+ Type current = beanClass;
+ while (current != null && Object.class != current) {
clazzes.add(current);
- current = current.getSuperclass();
+ // TODO: better loop
+ current = Class.class.isInstance(current) ? Class.class.cast(current).getGenericSuperclass() : null;
}
} else {
Collections.addAll(clazzes, typed.value());
http://git-wip-us.apache.org/repos/asf/tomee/blob/a1ec5e3b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
index f93645d..3c04eee 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
@@ -137,8 +137,7 @@ public class CdiPlugin extends AbstractOwbPlugin implements OpenWebBeansJavaEEPl
public <T> BeanAttributes<T> createBeanAttributes(final AnnotatedType<T> type) {
return new CdiEjbBean.EJBBeanAttributesImpl(
findBeanContext(webBeansContext, type.getJavaClass()),
- BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(type).build(),
- false);
+ BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(type).build());
}
public void configureDeployments(final List<BeanContext> ejbDeployments) {
http://git-wip-us.apache.org/repos/asf/tomee/blob/a1ec5e3b/tck/cdi-embedded/pom.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/pom.xml b/tck/cdi-embedded/pom.xml
index 784bdf6..dc0361b 100644
--- a/tck/cdi-embedded/pom.xml
+++ b/tck/cdi-embedded/pom.xml
@@ -171,7 +171,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
<configuration>
<reuseForks>true</reuseForks>
<forkCount>1</forkCount>
@@ -182,7 +182,7 @@
<suiteXmlFile>src/test/resources/passing.xml</suiteXmlFile>
</suiteXmlFiles>
<properties>
- <property> <!-- broken cause @RequestScoped beans are parameter and testng logs parameters -->
+ <property> <!-- broken cause @RequestScoped beans are parameters and testng logs parameters -->
<name>usedefaultlisteners</name>
<value>false</value>
</property>
@@ -203,6 +203,7 @@
<openejb.cdi.producer.interception>false</openejb.cdi.producer.interception>
<openejb.cdi.filter.classloader>false</openejb.cdi.filter.classloader>
+ <openejb.strict.interface.declaration>true</openejb.strict.interface.declaration>
<openejb.http.mock-request>true</openejb.http.mock-request>
<openejb.http.default-content-type>text/plain</openejb.http.default-content-type>
<openejb.embedded.try-jsp>true</openejb.embedded.try-jsp>
http://git-wip-us.apache.org/repos/asf/tomee/blob/a1ec5e3b/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 2e50751..09755fc 100644
--- a/tck/cdi-embedded/src/test/resources/failing.xml
+++ b/tck/cdi-embedded/src/test/resources/failing.xml
@@ -31,7 +31,7 @@
-Dopenejb.embedded.try-jsp=true
-->
<classes>
- <class name="org.jboss.cdi.tck.tests.context.conversation.filter.ConversationFilterTest" />
+ <class name="org.jboss.cdi.tck.tests.definition.bean.types.enterprise.SessionBeanTypesTest" />
</classes>
</test>
</suite>