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 2012/03/06 09:18:07 UTC
svn commit: r1297376 - in
/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi:
CdiEjbBean.java OpenEJBLifecycle.java
Author: rmannibucau
Date: Tue Mar 6 08:18:06 2012
New Revision: 1297376
URL: http://svn.apache.org/viewvc?rev=1297376&view=rev
Log:
OPENEJB-1795 ability to inject synamlic EJB through @Inject
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java?rev=1297376&r1=1297375&r2=1297376&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java Tue Mar 6 08:18:06 2012
@@ -36,7 +36,7 @@ public class CdiEjbBean<T> extends BaseE
private final BeanContext beanContext;
public CdiEjbBean(BeanContext beanContext, WebBeansContext webBeansContext) {
- this(beanContext, webBeansContext, beanContext.getBeanClass());
+ this(beanContext, webBeansContext, beanContext.getManagedClass());
}
public CdiEjbBean(BeanContext beanContext, WebBeansContext webBeansContext, Class beanClass) {
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java?rev=1297376&r1=1297375&r2=1297376&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java Tue Mar 6 08:18:06 2012
@@ -21,32 +21,20 @@ import org.apache.openejb.BeanContext;
import org.apache.openejb.OpenEJBRuntimeException;
import org.apache.openejb.assembler.classic.Assembler;
import org.apache.webbeans.component.InjectionPointBean;
-import org.apache.webbeans.component.InjectionTargetWrapper;
import org.apache.webbeans.component.NewBean;
-import org.apache.webbeans.component.ProducerFieldBean;
-import org.apache.webbeans.component.ProducerMethodBean;
-import org.apache.webbeans.component.creation.BeanCreator;
import org.apache.webbeans.config.OWBLogConst;
import org.apache.webbeans.config.OpenWebBeansConfiguration;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.config.WebBeansFinder;
import org.apache.webbeans.container.BeanManagerImpl;
import org.apache.webbeans.container.InjectionResolver;
-import org.apache.webbeans.ejb.common.component.BaseEjbBean;
import org.apache.webbeans.ejb.common.component.EjbBeanCreatorImpl;
import org.apache.webbeans.ejb.common.util.EjbUtility;
-import org.apache.webbeans.event.ObserverMethodImpl;
-import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.intercept.InterceptorData;
import org.apache.webbeans.logger.WebBeansLogger;
-import org.apache.webbeans.portable.AnnotatedElementFactory;
import org.apache.webbeans.portable.events.ExtensionLoader;
import org.apache.webbeans.portable.events.ProcessAnnotatedTypeImpl;
-import org.apache.webbeans.portable.events.ProcessInjectionTargetImpl;
-import org.apache.webbeans.portable.events.ProcessProducerImpl;
-import org.apache.webbeans.portable.events.ProcessSessionBeanImpl;
import org.apache.webbeans.portable.events.discovery.BeforeShutdownImpl;
-import org.apache.webbeans.portable.events.generics.GProcessSessionBean;
import org.apache.webbeans.spi.ContainerLifecycle;
import org.apache.webbeans.spi.ContextsService;
import org.apache.webbeans.spi.JNDIService;
@@ -59,13 +47,8 @@ import org.apache.webbeans.xml.WebBeansX
import javax.el.ELResolver;
import javax.enterprise.inject.Specializes;
-import javax.enterprise.inject.spi.AnnotatedField;
-import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.ObserverMethod;
-import javax.enterprise.inject.spi.ProcessAnnotatedType;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.jsp.JspApplicationContext;
@@ -75,13 +58,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
import java.net.URL;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.Executors;
@@ -247,9 +227,9 @@ public class OpenEJBLifecycle implements
deployManagedBeans(scannerService.getBeanClasses(), stuff.getBeanContexts());
for (BeanContext beanContext : stuff.getBeanContexts()) {
- if (!beanContext.getComponentType().isCdiCompatible() || beanContext.isDynamicallyImplemented()) continue;
+ if (!beanContext.getComponentType().isCdiCompatible()) continue;
- final Class implClass = beanContext.getBeanClass();
+ final Class implClass = beanContext.getManagedClass();
//Define annotation type
AnnotatedType<?> annotatedType = webBeansContext.getAnnotatedElementFactory().newAnnotatedType(implClass);
@@ -269,8 +249,7 @@ public class OpenEJBLifecycle implements
beanContext.set(CurrentCreationalContext.class, new CurrentCreationalContext());
beanContext.addSystemInterceptor(new CdiInterceptor(bean, beanManager, cdiPlugin.getContexsServices()));
- // should be EjbUtility static method (from OWB 1.1.4)
- fireEvents((Class<Object>) implClass, bean, (ProcessAnnotatedTypeImpl<Object>) processAnnotatedEvent);
+ EjbUtility.fireEvents((Class<Object>) implClass, bean, (ProcessAnnotatedTypeImpl<Object>) processAnnotatedEvent);
webBeansContext.getWebBeansUtil().setInjectionTargetBeanEnableFlag(bean);
@@ -351,134 +330,6 @@ public class OpenEJBLifecycle implements
logger.info(OWBLogConst.INFO_0001, Long.toString(System.currentTimeMillis() - begin));
}
- public static <T> void fireEvents(Class<T> clazz, BaseEjbBean<T> ejbBean,ProcessAnnotatedType<T> event)
- {
- WebBeansContext webBeansContext = ejbBean.getWebBeansContext();
- BeanManagerImpl manager = webBeansContext.getBeanManagerImpl();
- AnnotatedElementFactory annotatedElementFactory = webBeansContext.getAnnotatedElementFactory();
-
- AnnotatedType<T> annotatedType = annotatedElementFactory.newAnnotatedType(clazz);
-
- //Fires ProcessAnnotatedType
- ProcessAnnotatedTypeImpl<T> processAnnotatedEvent = (ProcessAnnotatedTypeImpl<T>)event;
- EjbBeanCreatorImpl<T> ejbBeanCreator = new EjbBeanCreatorImpl<T>(ejbBean);
- ejbBeanCreator.checkCreateConditions();
-
- if(processAnnotatedEvent.isVeto())
- {
- return;
- }
-
- if(processAnnotatedEvent.isModifiedAnnotatedType())
- {
- ejbBeanCreator.setMetaDataProvider(BeanCreator.MetaDataProvider.THIRDPARTY);
- ejbBeanCreator.setAnnotatedType(annotatedType);
- }
-
- //Define meta-data
- ejbBeanCreator.defineSerializable();
- ejbBeanCreator.defineStereoTypes();
- ejbBeanCreator.defineApiType();
- ejbBeanCreator.defineScopeType("Session Bean implementation class : " + clazz.getName() + " stereotypes must declare same @ScopeType annotations", false);
- ejbBeanCreator.defineQualifier();
- ejbBeanCreator.defineName(WebBeansUtil.getManagedBeanDefaultName(clazz.getSimpleName()));
- Set<ProducerMethodBean<?>> producerMethodBeans = ejbBeanCreator.defineProducerMethods();
- for(ProducerMethodBean<?> producerMethodBean : producerMethodBeans)
- {
- Method producerMethod = producerMethodBean.getCreatorMethod();
- if(!Modifier.isStatic(producerMethod.getModifiers()))
- {
- if(!EjbUtility.isBusinessMethod(producerMethod, ejbBean))
- {
- throw new WebBeansConfigurationException("Producer Method Bean must be business method of session bean : " + ejbBean);
- }
- }
- }
- Set<ProducerFieldBean<?>> producerFieldBeans = ejbBeanCreator.defineProducerFields();
- ejbBeanCreator.defineInjectedFields();
- ejbBeanCreator.defineInjectedMethods();
- Set<ObserverMethod<?>> observerMethods = ejbBeanCreator.defineObserverMethods();
-
- //Fires ProcessInjectionTarget
- ProcessInjectionTargetImpl<T> processInjectionTargetEvent =
- webBeansContext.getWebBeansUtil().fireProcessInjectionTargetEvent(ejbBean);
- webBeansContext.getWebBeansUtil().inspectErrorStack(
- "There are errors that are added by ProcessInjectionTarget event observers. Look at logs for further details");
- //Put final InjectionTarget instance
- manager.putInjectionTargetWrapper(ejbBean, new InjectionTargetWrapper(processInjectionTargetEvent.getInjectionTarget()));
-
- Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods = new HashMap<ProducerMethodBean<?>, AnnotatedMethod<?>>();
- for(ProducerMethodBean<?> producerMethod : producerMethodBeans)
- {
- AnnotatedMethod<?> method = annotatedElementFactory.newAnnotatedMethod(producerMethod.getCreatorMethod(), annotatedType);
- ProcessProducerImpl<?, ?> producerEvent =
- webBeansContext.getWebBeansUtil().fireProcessProducerEventForMethod(producerMethod,
- method);
- webBeansContext.getWebBeansUtil().inspectErrorStack(
- "There are errors that are added by ProcessProducer event observers for ProducerMethods. Look at logs for further details");
-
- annotatedMethods.put(producerMethod, method);
- manager.putInjectionTargetWrapper(producerMethod, new InjectionTargetWrapper(producerEvent.getProducer()));
-
- producerEvent.setProducerSet(false);
- }
-
- Map<ProducerFieldBean<?>,AnnotatedField<?>> annotatedFields = new HashMap<ProducerFieldBean<?>, AnnotatedField<?>>();
- for(ProducerFieldBean<?> producerField : producerFieldBeans)
- {
- AnnotatedField<?> field = annotatedElementFactory.newAnnotatedField(producerField.getCreatorField(), annotatedType);
- ProcessProducerImpl<?, ?> producerEvent =
- webBeansContext.getWebBeansUtil().fireProcessProducerEventForField(producerField, field);
- webBeansContext.getWebBeansUtil().inspectErrorStack(
- "There are errors that are added by ProcessProducer event observers for ProducerFields. Look at logs for further details");
-
- annotatedFields.put(producerField, field);
- manager.putInjectionTargetWrapper(producerField, new InjectionTargetWrapper(producerEvent.getProducer()));
-
-
- producerEvent.setProducerSet(false);
- }
-
- Map<ObserverMethod<?>,AnnotatedMethod<?>> observerMethodsMap = new HashMap<ObserverMethod<?>, AnnotatedMethod<?>>();
- for(ObserverMethod<?> observerMethod : observerMethods)
- {
- ObserverMethodImpl<?> impl = (ObserverMethodImpl<?>)observerMethod;
- AnnotatedMethod<?> method = annotatedElementFactory.newAnnotatedMethod(impl.getObserverMethod(), annotatedType);
-
- observerMethodsMap.put(observerMethod, method);
- }
-
- //Fires ProcessManagedBean
- ProcessSessionBeanImpl<T> processBeanEvent = new GProcessSessionBean((Bean<Object>)ejbBean,annotatedType,ejbBean.getEjbName(),ejbBean.getEjbType());
- webBeansContext.getBeanManagerImpl().fireEvent(processBeanEvent, new Annotation[0]);
- webBeansContext.getWebBeansUtil().inspectErrorStack(
- "There are errors that are added by ProcessSessionBean event observers for managed beans. Look at logs for further details");
-
- //Fires ProcessProducerMethod
- webBeansContext.getWebBeansUtil().fireProcessProducerMethodBeanEvent(annotatedMethods,
- annotatedType);
- webBeansContext.getWebBeansUtil().inspectErrorStack(
- "There are errors that are added by ProcessProducerMethod event observers for producer method beans. Look at logs for further details");
-
- //Fires ProcessProducerField
- webBeansContext.getWebBeansUtil().fireProcessProducerFieldBeanEvent(annotatedFields);
- webBeansContext.getWebBeansUtil().inspectErrorStack(
- "There are errors that are added by ProcessProducerField event observers for producer field beans. Look at logs for further details");
-
- //Fire ObservableMethods
- webBeansContext.getWebBeansUtil().fireProcessObservableMethodBeanEvent(observerMethodsMap);
- webBeansContext.getWebBeansUtil().inspectErrorStack(
- "There are errors that are added by ProcessObserverMethod event observers for observer methods. Look at logs for further details");
-
- manager.addBean(ejbBean);
-
- // Let the plugin handle adding the new bean instance as it knows more about its EJB Bean
-
- manager.getBeans().addAll(producerMethodBeans);
- ejbBeanCreator.defineDisposalMethods();
- manager.getBeans().addAll(producerFieldBeans);
- }
-
public static class NewEjbBean<T> extends CdiEjbBean<T> implements NewBean<T> {
public NewEjbBean(BeanContext beanContext, WebBeansContext webBeansContext) {