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 2013/04/24 14:28:37 UTC
svn commit: r1471383 - in /tomee/tomee/trunk:
container/openejb-core/src/main/java/org/apache/openejb/
container/openejb-core/src/main/java/org/apache/openejb/cdi/
container/openejb-core/src/main/java/org/apache/openejb/config/
container/openejb-core/s...
Author: rmannibucau
Date: Wed Apr 24 12:28:36 2013
New Revision: 1471383
URL: http://svn.apache.org/r1471383
Log:
TOMEE-909 getting rid of CdiInterceptor
Removed:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiInterceptor.java
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java
tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/scan.xml
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulConstructorInjectionTest.java
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessConstructorInjectionTest.java
tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java Wed Apr 24 12:28:36 2013
@@ -49,8 +49,10 @@ import org.apache.webbeans.config.WebBea
import org.apache.webbeans.container.BeanManagerImpl;
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.inject.OWBInjector;
+import org.apache.webbeans.intercept.DecoratorHandler;
import org.apache.webbeans.intercept.InterceptorResolutionService;
import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
import org.apache.xbean.recipe.ConstructionException;
import javax.ejb.EJBHome;
@@ -63,8 +65,8 @@ import javax.ejb.MessageDrivenBean;
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import javax.enterprise.context.ConversationScoped;
-import javax.enterprise.context.Dependent;
import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.Decorator;
import javax.enterprise.inject.spi.Interceptor;
import javax.naming.Context;
import javax.naming.Name;
@@ -1412,27 +1414,32 @@ public class BeanContext extends Deploym
}
try {
- final Context ctx = this.getJndiEnc();
- final Class beanClass = this.getBeanClass();
+ final Context ctx = getJndiEnc();
+ final Class beanClass = getBeanClass();
final CurrentCreationalContext<Object> currentCreationalContext = get(CurrentCreationalContext.class);
CreationalContext<Object> creationalContext = (currentCreationalContext != null) ? currentCreationalContext.get() : null;
- final ConstructorInjectionBean<Object> beanDefinition = createConstructorInjectionBean(webBeansContext);
- if (creationalContext == null) {
- creationalContext = webBeansContext.getBeanManagerImpl().createCreationalContext(beanDefinition);
+ final CdiEjbBean cdiEjbBean = get(CdiEjbBean.class);
+
+ if (!CreationalContextImpl.class.isInstance(creationalContext)) {
+ if (creationalContext == null) {
+ creationalContext = webBeansContext.getCreationalContextFactory().getCreationalContext(cdiEjbBean);
+ } else {
+ creationalContext = webBeansContext.getCreationalContextFactory().wrappedCreationalContext(creationalContext, cdiEjbBean);
+ }
}
- final Object rootInstance;
- final CdiEjbBean cdiEjbBean = get(CdiEjbBean.class);
+ Object rootInstance;
if (cdiEjbBean != null && CdiEjbBean.EjbInjectionTargetImpl.class.isInstance(cdiEjbBean.getInjectionTarget())) {
rootInstance = CdiEjbBean.EjbInjectionTargetImpl.class.cast(cdiEjbBean.getInjectionTarget()).createNewPojo(creationalContext);
- } else {
- rootInstance = beanDefinition.create(creationalContext);
+ } else { // not a cdi bean
+ rootInstance = getManagedClass().newInstance();
}
// Create bean instance
- final Object beanInstance;
+ Object beanInstance;
+
final InjectionProcessor injectionProcessor;
if (!isDynamicallyImplemented()) {
injectionProcessor = new InjectionProcessor(rootInstance, getInjections(), InjectionProcessor.unwrap(ctx));
@@ -1443,7 +1450,7 @@ public class BeanContext extends Deploym
final List<Injection> newInjections = new ArrayList<Injection>();
for (final Injection injection : getInjections()) {
if (beanClass.equals(injection.getTarget())) {
- final Injection updated = new Injection(injection.getJndiName(), injection.getName(), beanDefinition.getBeanClass());
+ final Injection updated = new Injection(injection.getJndiName(), injection.getName(), proxyClass);
newInjections.add(updated);
} else {
newInjections.add(injection);
@@ -1452,7 +1459,7 @@ public class BeanContext extends Deploym
injections.clear();
injections.addAll(newInjections);
- injectionProcessor = new InjectionProcessor(beanDefinition.create(creationalContext), injections, InjectionProcessor.unwrap(ctx));
+ injectionProcessor = new InjectionProcessor(rootInstance, injections, InjectionProcessor.unwrap(ctx));
final InvocationHandler handler = (InvocationHandler) injectionProcessor.createInstance();
beanInstance = DynamicProxyImplFactory.newProxy(this, handler);
inject(handler, creationalContext);
@@ -1480,7 +1487,7 @@ public class BeanContext extends Deploym
final Object interceptorInstance = interceptorInjector.createInstance();
try {
OWBInjector.inject(webBeansContext.getBeanManagerImpl(), interceptorInstance, creationalContext);
- } catch (Throwable t) {
+ } catch (final Throwable t) {
// TODO handle this differently
// this is temporary till the injector can be rewritten
}
@@ -1525,6 +1532,29 @@ public class BeanContext extends Deploym
EjbTransactionUtil.afterInvoke(transactionPolicy, callContext);
}
+ // handle cdi decorators
+ if (cdiEjbBean != null) {
+ final Class<?> proxyClass = Class.class.cast(Reflections.get(cdiEjbBean.getInjectionTarget(), "proxyClass"));
+ if (proxyClass != null) { // means interception
+ final InterceptorResolutionService.BeanInterceptorInfo interceptorInfo = cdiEjbBean.getBeanContext().get(InterceptorResolutionService.BeanInterceptorInfo.class);
+ if (interceptorInfo.getDecorators() != null && !interceptorInfo.getDecorators().isEmpty()) {
+ final InterceptorDecoratorProxyFactory pf = webBeansContext.getInterceptorDecoratorProxyFactory();
+
+ // decorators
+ final Object instance = beanInstance;
+ final List<Decorator<?>> decorators = interceptorInfo.getDecorators();
+ final Map<Decorator<?>, Object> instances = new HashMap<Decorator<?>, Object>();
+ for (int i = decorators.size(); i > 0; i--) {
+ final Decorator<?> decorator = decorators.get(i - 1);
+ CreationalContextImpl.class.cast(creationalContext).putDelegate(beanInstance);
+ final Object decoratorInstance = decorator.create(CreationalContext.class.cast(creationalContext));
+ instances.put(decorator, decoratorInstance);
+ beanInstance = pf.createProxyInstance(proxyClass, instance, new DecoratorHandler(interceptorInfo, instances, i - 1, instance));
+ }
+ }
+ }
+ }
+
return new InstanceContext(this, beanInstance, interceptorInstances, creationalContext);
} finally {
ThreadContext.exit(oldContext);
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java Wed Apr 24 12:28:36 2013
@@ -345,7 +345,7 @@ public class CdiEjbBean<T> extends BaseE
}
public T createNewPojo(final CreationalContext<T> creationalContext) {
- return super.produce(creationalContext);
+ return super.newInstance(CreationalContextImpl.class.cast(creationalContext));
}
}
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java Wed Apr 24 12:28:36 2013
@@ -282,7 +282,6 @@ public class CdiPlugin extends AbstractO
bc.set(CdiEjbBean.class, bean);
bc.set(CurrentCreationalContext.class, new CurrentCreationalContext());
- bc.addSystemInterceptor(new CdiInterceptor<T>(bean));
validateDisposeMethods(bean);
validateScope(bean);
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java Wed Apr 24 12:28:36 2013
@@ -186,6 +186,14 @@ public class EjbModule extends Module im
this.webapp = webapp;
}
+ // just a helper method to activate cdi
+ public EjbModule withCdi() {
+ if (beans == null) {
+ beans = new Beans();
+ }
+ return this;
+ }
+
@Override
public String toString() {
return "EjbModule{" +
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java Wed Apr 24 12:28:36 2013
@@ -468,9 +468,12 @@ public class StatefulContainer implement
if (primKey == null)
throw new NullPointerException("primKey is null");
- final Class scope = beanContext.get(CdiEjbBean.class).getScope();
- if (callMethod.getDeclaringClass() != BeanContext.Removable.class && scope != Dependent.class) {
- throw new UnsupportedOperationException("Can not call EJB Stateful Bean Remove Method without scoped @Dependent. Found scope: @" + scope.getSimpleName());
+ final CdiEjbBean cdiEjbBean = beanContext.get(CdiEjbBean.class);
+ if (cdiEjbBean != null) {
+ final Class scope = cdiEjbBean.getScope();
+ if (callMethod.getDeclaringClass() != BeanContext.Removable.class && scope != Dependent.class) {
+ throw new UnsupportedOperationException("Can not call EJB Stateful Bean Remove Method without scoped @Dependent. Found scope: @" + scope.getSimpleName());
+ }
}
final boolean internalRemove = BeanContext.Removable.class == callMethod.getDeclaringClass();
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/DynamicProxyImplFactory.java Wed Apr 24 12:28:36 2013
@@ -38,9 +38,9 @@ public class DynamicProxyImplFactory {
}
public static Object newProxy(BeanContext context, java.lang.reflect.InvocationHandler invocationHandler) {
- if (invocationHandler instanceof QueryProxy) {
+ if (QueryProxy.class.isInstance(invocationHandler)) {
EntityManager em = null;
- for (Injection injection : context.getInjections()) {
+ for (final Injection injection : context.getInjections()) {
if (QueryProxy.class.equals(injection.getTarget())) {
try {
em = (EntityManager) context.getJndiEnc().lookup(injection.getJndiName());
@@ -52,7 +52,7 @@ public class DynamicProxyImplFactory {
if (em == null) {
throw new OpenEJBRuntimeException("can't find the entity manager to use for the dynamic bean " + context.getEjbName());
}
- ((QueryProxy) invocationHandler).setEntityManager(em);
+ QueryProxy.class.cast(invocationHandler).setEntityManager(em);
}
try {
Modified: tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/scan.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/scan.xml?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/scan.xml (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/scan.xml Wed Apr 24 12:28:36 2013
@@ -22,7 +22,6 @@
<class>org.apache.openejb.assembler.monitoring.JMXDeployer</class>
<class>org.apache.openejb.assembler.classic.cmd.ConfigurationInfoEjb</class>
<class>org.apache.openejb.bval.BeanValidationAppendixInterceptor</class>
- <class>org.apache.openejb.cdi.CdiInterceptor</class>
<class>org.apache.openejb.mgmt.MEJBBean</class>
<class>org.apache.openejb.monitoring.StatsInterceptor</class>
</classes>
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulConstructorInjectionTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulConstructorInjectionTest.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulConstructorInjectionTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulConstructorInjectionTest.java Wed Apr 24 12:28:36 2013
@@ -21,7 +21,9 @@ import org.apache.openejb.assembler.clas
import org.apache.openejb.assembler.classic.SecurityServiceInfo;
import org.apache.openejb.assembler.classic.TransactionServiceInfo;
import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.EjbModule;
import org.apache.openejb.core.ivm.naming.InitContextFactory;
+import org.apache.openejb.jee.Beans;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.EnvEntry;
import org.apache.openejb.jee.StatefulBean;
@@ -69,8 +71,10 @@ public class StatefulConstructorInjectio
StatefulBean bean = ejbJar.addEnterpriseBean(new StatefulBean(WidgetBean.class));
bean.getEnvEntry().add(new EnvEntry("count", Integer.class.getName(), "10"));
+ final EjbModule module = new EjbModule(ejbJar);
+ module.setBeans(new Beans());
- assembler.createApplication(config.configureApplication(ejbJar));
+ assembler.createApplication(config.configureApplication(module));
}
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessConstructorInjectionTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessConstructorInjectionTest.java?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessConstructorInjectionTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/stateless/StatelessConstructorInjectionTest.java Wed Apr 24 12:28:36 2013
@@ -28,6 +28,7 @@ import java.util.List;
import java.util.Arrays;
import java.util.Stack;
+import org.apache.openejb.config.EjbModule;
import org.apache.openejb.core.ivm.naming.InitContextFactory;
import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.assembler.classic.Assembler;
@@ -80,8 +81,7 @@ public class StatelessConstructorInjecti
StatelessBean bean = ejbJar.addEnterpriseBean(new StatelessBean(WidgetBean.class));
bean.getEnvEntry().add(new EnvEntry("count", Integer.class.getName(), "10"));
-
- assembler.createApplication(config.configureApplication(ejbJar));
+ assembler.createApplication(config.configureApplication(new EjbModule(ejbJar).withCdi()));
}
Modified: tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml?rev=1471383&r1=1471382&r2=1471383&view=diff
==============================================================================
--- tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml (original)
+++ tomee/tomee/trunk/tck/cdi-embedded/src/test/resources/failing.xml Wed Apr 24 12:28:36 2013
@@ -18,7 +18,7 @@
<suite name="CDI TCK" verbose="0">
<test name="CDI TCK">
<classes>
- <class name="org.jboss.jsr299.tck.tests.event.observer.enterprise.EnterpriseEventInheritenceTest"/>
+ <class name="org.jboss.jsr299.tck.tests.decorators.invocation.EJBDecoratorInvocationTest"/>
</classes>
</test>
</suite>