You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2011/03/04 01:02:13 UTC
svn commit: r1076897 - in /openwebbeans/trunk:
samples/ejb-sample/src/main/java/org/apache/webbeans/sample/bean/
webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/
webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/ webbea...
Author: struberg
Date: Fri Mar 4 00:02:13 2011
New Revision: 1076897
URL: http://svn.apache.org/viewvc?rev=1076897&view=rev
Log:
OWB-538 allow lazy initialisation of default scoped beans
work in progress. All tests pass, but a few TCK tests are broken atm
Modified:
openwebbeans/trunk/samples/ejb-sample/src/main/java/org/apache/webbeans/sample/bean/EchoManaged.java
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanCreatorImpl.java
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanCreator.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
Modified: openwebbeans/trunk/samples/ejb-sample/src/main/java/org/apache/webbeans/sample/bean/EchoManaged.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/samples/ejb-sample/src/main/java/org/apache/webbeans/sample/bean/EchoManaged.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/samples/ejb-sample/src/main/java/org/apache/webbeans/sample/bean/EchoManaged.java (original)
+++ openwebbeans/trunk/samples/ejb-sample/src/main/java/org/apache/webbeans/sample/bean/EchoManaged.java Fri Mar 4 00:02:13 2011
@@ -21,6 +21,7 @@ package org.apache.webbeans.sample.bean;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Default;
+import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Inject;
import javax.inject.Named;
import javax.enterprise.inject.Produces;
@@ -28,8 +29,6 @@ import javax.enterprise.inject.spi.Bean;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
-import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.container.BeanManagerImpl;
import org.apache.webbeans.sample.ejb.Echo;
import org.apache.webbeans.sample.injection.InjectionTargetBean;
@@ -39,6 +38,8 @@ import org.apache.webbeans.sample.inject
public class EchoManaged
{
private @Inject @Default Echo echo;
+
+ private @Inject BeanManager manager;
private @EJB(name="EchoBean/org.apache.webbeans.sample.ejb.Echo") Echo nonContextual;
@@ -60,7 +61,6 @@ public class EchoManaged
public String echo()
{
- BeanManagerImpl manager = WebBeansContext.getInstance().getBeanManagerImpl();
Bean<?> b = manager.getBeans("injected").iterator().next();
InjectionTargetBean bean = (InjectionTargetBean)manager.getReference(b, InjectionTargetBean.class, manager.createCreationalContext(b));
Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanCreatorImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanCreatorImpl.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanCreatorImpl.java (original)
+++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanCreatorImpl.java Fri Mar 4 00:02:13 2011
@@ -56,11 +56,11 @@ public class EjbBeanCreatorImpl<T> exten
* {@inheritDoc}
*/
@Override
- public void defineScopeType(String errorMessage) throws WebBeansPassivationException
+ public void defineScopeType(String errorMessage, boolean allowLazyInit) throws WebBeansPassivationException
{
try
{
- super.defineScopeType(errorMessage);
+ super.defineScopeType(errorMessage, allowLazyInit);
}
catch(WebBeansPassivationException e)
{
Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java (original)
+++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java Fri Mar 4 00:02:13 2011
@@ -88,7 +88,7 @@ public final class EjbUtility
ejbBeanCreator.defineSerializable();
ejbBeanCreator.defineStereoTypes();
ejbBeanCreator.defineApiType();
- ejbBeanCreator.defineScopeType("Session Bean implementation class : " + clazz.getName() + " stereotypes must declare same @ScopeType annotations");
+ 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();
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java Fri Mar 4 00:02:13 2011
@@ -20,13 +20,16 @@ package org.apache.webbeans.component;
import java.io.Serializable;
import java.lang.reflect.Constructor;
+import java.lang.annotation.Annotation;
import javassist.util.proxy.ProxyObject;
import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Default;
import javax.enterprise.inject.spi.Decorator;
-import org.apache.webbeans.component.creation.AnnotatedTypeBeanCreatorImpl;
+import org.apache.webbeans.component.creation.ManagedBeanCreatorImpl;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.decorator.AbstractDecoratorMethodHandler;
import org.apache.webbeans.inject.InjectableConstructor;
@@ -83,10 +86,10 @@ public class ManagedBean<T> extends Abst
{
if (!fullInit)
{
- AnnotatedTypeBeanCreatorImpl<T> managedBeanCreator = new AnnotatedTypeBeanCreatorImpl<T>(this);
+ ManagedBeanCreatorImpl<T> managedBeanCreator = new ManagedBeanCreatorImpl<T>(this);
managedBeanCreator.setAnnotatedType(getAnnotatedType());
- getWebBeansContext().getWebBeansUtil().initializeManagedBean(getBeanClass(), this, managedBeanCreator);
+ getWebBeansContext().getWebBeansUtil().lazyInitializeManagedBean(getBeanClass(), this, managedBeanCreator);
fullInit = true;
}
@@ -115,6 +118,17 @@ public class ManagedBean<T> extends Abst
this.fullInit = fullInit;
}
+ @Override
+ public void addQualifier(Annotation qualifier)
+ {
+ if (!(qualifier instanceof Default || qualifier instanceof Any))
+ {
+ // if a bean defines other qualifiers than Default or Any, we need to fully initialize it
+ fullInit = true;
+ }
+ super.addQualifier(qualifier);
+ }
+
/**
* Get constructor.
*
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java Fri Mar 4 00:02:13 2011
@@ -130,15 +130,15 @@ public class AbstractBeanCreator<T> impl
* {@inheritDoc}
*/
@Override
- public void defineScopeType(String errorMessage)
+ public void defineScopeType(String errorMessage, boolean allowLazyInit)
{
if(isDefaultMetaDataProvider())
{
- DefinitionUtil.defineScopeType(this.bean, this.beanAnnotations, errorMessage);
+ DefinitionUtil.defineScopeType(this.bean, this.beanAnnotations, errorMessage, allowLazyInit);
}
else
{
- DefinitionUtil.defineScopeType(this.bean, AnnotationUtil.getAnnotationsFromSet(this.annotatedType.getAnnotations()), errorMessage);
+ DefinitionUtil.defineScopeType(this.bean, AnnotationUtil.getAnnotationsFromSet(this.annotatedType.getAnnotations()), errorMessage, false);
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanCreator.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanCreator.java Fri Mar 4 00:02:13 2011
@@ -86,7 +86,7 @@ public interface BeanCreator<T>
* Check passivation related controls.
* </p>
*/
- public void defineScopeType(String errorMessage);
+ public void defineScopeType(String errorMessage, boolean allowLazyInit);
/**
* Defines qualifier.
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java Fri Mar 4 00:02:13 2011
@@ -856,7 +856,7 @@ public class BeansDeployer
logger.debug("Found Managed Bean with class name : [{0}]", annotatedType.getJavaClass().getName());
}
webBeansContext.getWebBeansUtil().defineManagedBean(managedBeanCreator,
- processInjectionTargetEvent);
+ processInjectionTargetEvent, true);
}
return true;
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java Fri Mar 4 00:02:13 2011
@@ -32,6 +32,8 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
import javax.enterprise.context.Dependent;
import javax.enterprise.context.NormalScope;
import javax.enterprise.event.Observes;
@@ -315,7 +317,8 @@ public final class DefinitionUtil
* @param component configuring web beans component
* @param annotations annotations
*/
- public static <T> void defineScopeType(AbstractOwbBean<T> component, Annotation[] annotations, String exceptionMessage)
+ public static <T> void defineScopeType(AbstractOwbBean<T> component, Annotation[] annotations,
+ String exceptionMessage, boolean allowLazyInit)
{
boolean found = false;
@@ -388,7 +391,7 @@ public final class DefinitionUtil
if (!found)
{
- defineDefaultScopeType(component, exceptionMessage);
+ defineDefaultScopeType(component, exceptionMessage, allowLazyInit);
}
}
@@ -438,7 +441,7 @@ public final class DefinitionUtil
}
- public static void defineDefaultScopeType(OwbBean<?> component, String exceptionMessage)
+ public static void defineDefaultScopeType(OwbBean<?> component, String exceptionMessage, boolean allowLazyInit)
{
// Frist look for inherited scope
IBeanInheritedMetaData metaData = null;
@@ -463,6 +466,13 @@ public final class DefinitionUtil
if (stereos.size() == 0)
{
component.setImplScopeType(new DependentScopeLiteral());
+
+ if (allowLazyInit && component instanceof ManagedBean && isPurePojoBean(component.getBeanClass()))
+ {
+ // take the bean as Dependent but we could lazily initialize it
+ // because the bean doesn't contains any CDI feature
+ ((ManagedBean) component).setFullInit(false);
+ }
}
else
{
@@ -506,12 +516,12 @@ public final class DefinitionUtil
}
else
{
- // take the bean as Dependent if
- // the bean contains at least one CDI feature
component.setImplScopeType(new DependentScopeLiteral());
- if (component instanceof ManagedBean && isPurePojoBean(component.getBeanClass()))
+ if (allowLazyInit && component instanceof ManagedBean && isPurePojoBean(component.getBeanClass()))
{
+ // take the bean as Dependent but we could lazily initialize it
+ // because the bean doesn't contains any CDI feature
((ManagedBean) component).setFullInit(false);
}
}
@@ -570,10 +580,26 @@ public final class DefinitionUtil
anns = method.getAnnotations();
for (Annotation ann : anns)
{
- if (ann instanceof Produces)
+ if (ann instanceof Produces ||
+ ann instanceof Inject ||
+ ann instanceof PostConstruct ||
+ ann instanceof PreDestroy )
{
return false;
}
+
+ }
+
+ Annotation[][] paramsAnns = method.getParameterAnnotations();
+ for (Annotation[] paramAnns: paramsAnns)
+ {
+ for (Annotation ann: paramAnns)
+ {
+ if (ann instanceof Observes)
+ {
+ return false;
+ }
+ }
}
}
@@ -733,7 +759,8 @@ public final class DefinitionUtil
}
- public static <T> ProducerMethodBean<T> createProducerComponent(Class<T> returnType, Method method, InjectionTargetBean<?> parent, boolean isSpecializes)
+ public static <T> ProducerMethodBean<T> createProducerComponent(Class<T> returnType, Method method, InjectionTargetBean<?> parent,
+ boolean isSpecializes)
{
ProducerMethodBean<T> component = new ProducerMethodBean<T>(parent, returnType);
component.setCreatorMethod(method);
@@ -758,7 +785,7 @@ public final class DefinitionUtil
DefinitionUtil.defineProducerMethodApiTypes(component, method.getGenericReturnType(), methodAnns);
DefinitionUtil.defineScopeType(component, methodAnns, "WebBeans producer method : " + method.getName() + " in class " + parent.getReturnType().getName()
- + " must declare default @Scope annotation");
+ + " must declare default @Scope annotation", false);
webBeansContext.getWebBeansUtil().checkUnproxiableApiType(component, component.getScope());
WebBeansUtil.checkProducerGenericType(component,method);
DefinitionUtil.defineQualifiers(component, methodAnns);
@@ -815,7 +842,7 @@ public final class DefinitionUtil
DefinitionUtil.defineProducerMethodApiTypes(component, field.getGenericType(), fieldAnns);
DefinitionUtil.defineScopeType(component, fieldAnns, "WebBeans producer method : " + field.getName() + " in class " + parent.getReturnType().getName()
- + " must declare default @Scope annotation");
+ + " must declare default @Scope annotation", false);
webBeansContext.getWebBeansUtil().checkUnproxiableApiType(component, component.getScope());
WebBeansUtil.checkProducerGenericType(component,field);
DefinitionUtil.defineQualifiers(component, fieldAnns);
@@ -1321,7 +1348,7 @@ public final class DefinitionUtil
DefinitionUtil.defineProducerMethodApiTypes(bean, method.getBaseType(), anns);
DefinitionUtil.defineScopeType(bean, anns, "Bean producer method : " + method.getJavaMember().getName() + " in class "
- + parent.getReturnType().getName() + " must declare default @Scope annotation");
+ + parent.getReturnType().getName() + " must declare default @Scope annotation", false);
WebBeansUtil.checkProducerGenericType(bean,method.getJavaMember());
DefinitionUtil.defineQualifiers(bean, anns);
DefinitionUtil.defineName(bean, anns, WebBeansUtil.getProducerDefaultName(method.getJavaMember().getName()));
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java Fri Mar 4 00:02:13 2011
@@ -142,7 +142,7 @@ public final class ManagedBeanConfigurat
DefinitionUtil.defineApiTypes(component, clazz);
DefinitionUtil.defineScopeType(component, clazzAnns, "Simple WebBean Component implementation class : " + clazz.getName()
- + " stereotypes must declare same @Scope annotations");
+ + " stereotypes must declare same @Scope annotations", false);
// we fully initialize the bean in this case.
component.setFullInit(true);
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansAnnotatedTypeUtil.java Fri Mar 4 00:02:13 2011
@@ -453,7 +453,7 @@ public final class WebBeansAnnotatedType
anns);
Set<Type> types = annotatedField.getTypeClosure();
producerFieldBean.getTypes().addAll(types);
- DefinitionUtil.defineScopeType(producerFieldBean, anns, "Annotated producer field: " + annotatedField + "must declare default @Scope annotation");
+ DefinitionUtil.defineScopeType(producerFieldBean, anns, "Annotated producer field: " + annotatedField + "must declare default @Scope annotation", false);
webBeansContext.getWebBeansUtil().checkUnproxiableApiType(producerFieldBean,
producerFieldBean.getScope());
WebBeansUtil.checkProducerGenericType(producerFieldBean,annotatedField.getJavaMember());
@@ -516,7 +516,8 @@ public final class WebBeansAnnotatedType
producerMethodBean.getTypes().addAll(types);
DefinitionUtil.defineScopeType(producerMethodBean,
AnnotationUtil.getAnnotationsFromSet(annotatedMethod.getAnnotations()),
- "Annotated producer method : " + annotatedMethod + "must declare default @Scope annotation");
+ "Annotated producer method : " + annotatedMethod + "must declare default @Scope annotation",
+ false);
webBeansContext.getWebBeansUtil().checkUnproxiableApiType(producerMethodBean,
producerMethodBean.getScope());
WebBeansUtil.checkProducerGenericType(producerMethodBean,annotatedMethod.getJavaMember());
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=1076897&r1=1076896&r2=1076897&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Fri Mar 4 00:02:13 2011
@@ -2126,7 +2126,7 @@ public final class WebBeansUtil
ManagedBean<T> component = null;
webBeansContext.getInterceptorUtil().checkInterceptorConditions(clazz);
- component = defineManagedBean(managedBeanCreator, injectionTargetEvent);
+ component = defineManagedBean(managedBeanCreator, injectionTargetEvent, false);
if (component != null)
{
@@ -2165,7 +2165,7 @@ public final class WebBeansUtil
}
else
{
- delegate = defineManagedBean(creator, processInjectionTargetEvent);
+ delegate = defineManagedBean(creator, processInjectionTargetEvent, false);
}
if (delegate != null)
@@ -2789,7 +2789,7 @@ public final class WebBeansUtil
public <T> ManagedBean<T> defineAbstractDecorator(ManagedBeanCreatorImpl<T> managedBeanCreator, ProcessInjectionTarget<T> processInjectionTargetEvent)
{
- ManagedBean<T> bean = defineManagedBean(managedBeanCreator, processInjectionTargetEvent);
+ ManagedBean<T> bean = defineManagedBean(managedBeanCreator, processInjectionTargetEvent, false);
if (bean == null)
{
// TODO could probably be a bit more descriptive
@@ -2805,133 +2805,155 @@ public final class WebBeansUtil
}
- public <T> ManagedBean<T> defineManagedBean(ManagedBeanCreatorImpl<T> managedBeanCreator, ProcessInjectionTarget<T> processInjectionTargetEvent)
+ public <T> ManagedBean<T> defineManagedBean(ManagedBeanCreatorImpl<T> managedBeanCreator, ProcessInjectionTarget<T> processInjectionTargetEvent, boolean allowLazyInit)
{
BeanManagerImpl manager = webBeansContext.getBeanManagerImpl();
//Annotated type
AnnotatedType<T> annotatedType = processInjectionTargetEvent.getAnnotatedType();
ManagedBean<T> managedBean = managedBeanCreator.getBean();
+
Class<T> clazz = annotatedType.getJavaClass();
+ managedBeanCreator.defineApiType();
+
//Define meta-data
managedBeanCreator.defineStereoTypes();
//Scope type
managedBeanCreator.defineScopeType(logger.getTokenString(OWBLogConst.TEXT_MB_IMPL) + clazz.getName() +
- logger.getTokenString(OWBLogConst.TEXT_SAME_SCOPE));
-
- managedBean.setFullInit(true);
+ logger.getTokenString(OWBLogConst.TEXT_SAME_SCOPE), allowLazyInit);
managedBeanCreator.defineSerializable();
//Check for Enabled via Alternative
setInjectionTargetBeanEnableFlag(managedBean);
- managedBeanCreator.defineApiType();
managedBeanCreator.checkCreateConditions();
managedBeanCreator.defineQualifier();
managedBeanCreator.defineName(WebBeansUtil.getManagedBeanDefaultName(clazz.getSimpleName()));
- managedBeanCreator.defineConstructor();
- Set<ProducerMethodBean<?>> producerMethods = managedBeanCreator.defineProducerMethods();
- Set<ProducerFieldBean<?>> producerFields = managedBeanCreator.defineProducerFields();
- managedBeanCreator.defineInjectedFields();
- managedBeanCreator.defineInjectedMethods();
- Set<ObserverMethod<?>> observerMethods = new HashSet<ObserverMethod<?>>();
- if(managedBean.isEnabled())
+ if (managedBean.isFullInit())
{
- observerMethods = managedBeanCreator.defineObserverMethods();
- }
+ managedBeanCreator.defineConstructor();
+ Set<ProducerMethodBean<?>> producerMethods = managedBeanCreator.defineProducerMethods();
+ Set<ProducerFieldBean<?>> producerFields = managedBeanCreator.defineProducerFields();
+ managedBeanCreator.defineInjectedFields();
+ managedBeanCreator.defineInjectedMethods();
+
+ Set<ObserverMethod<?>> observerMethods = new HashSet<ObserverMethod<?>>();
+ if(managedBean.isEnabled())
+ {
+ observerMethods = managedBeanCreator.defineObserverMethods();
+ }
- //Put final InjectionTarget instance
- manager.putInjectionTargetWrapper(managedBean,
- new InjectionTargetWrapper(processInjectionTargetEvent.getInjectionTarget()));
+ //Put final InjectionTarget instance
+ manager.putInjectionTargetWrapper(managedBean,
+ new InjectionTargetWrapper(processInjectionTargetEvent.getInjectionTarget()));
- Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods =
- new HashMap<ProducerMethodBean<?>, AnnotatedMethod<?>>();
+ Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods =
+ new HashMap<ProducerMethodBean<?>, AnnotatedMethod<?>>();
- for(ProducerMethodBean<?> producerMethod : producerMethods)
- {
- AnnotatedMethod<?> method = webBeansContext.getAnnotatedElementFactory().newAnnotatedMethod(producerMethod.getCreatorMethod(),
- annotatedType);
- ProcessProducerImpl<?, ?> producerEvent = fireProcessProducerEventForMethod(producerMethod,
- method);
- inspectErrorStack("There are errors that are added by ProcessProducer event observers for "
- + "ProducerMethods. Look at logs for further details");
+ for(ProducerMethodBean<?> producerMethod : producerMethods)
+ {
+ AnnotatedMethod<?> method = webBeansContext.getAnnotatedElementFactory().newAnnotatedMethod(producerMethod.getCreatorMethod(),
+ annotatedType);
+ ProcessProducerImpl<?, ?> producerEvent = fireProcessProducerEventForMethod(producerMethod,
+ method);
+ 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()));
+ annotatedMethods.put(producerMethod, method);
+ manager.putInjectionTargetWrapper(producerMethod, new InjectionTargetWrapper(producerEvent.getProducer()));
- producerEvent.setProducerSet(false);
- }
+ producerEvent.setProducerSet(false);
+ }
- Map<ProducerFieldBean<?>,AnnotatedField<?>> annotatedFields =
- new HashMap<ProducerFieldBean<?>, AnnotatedField<?>>();
+ Map<ProducerFieldBean<?>,AnnotatedField<?>> annotatedFields =
+ new HashMap<ProducerFieldBean<?>, AnnotatedField<?>>();
- for(ProducerFieldBean<?> producerField : producerFields)
- {
- AnnotatedField<?> field = webBeansContext.getAnnotatedElementFactory().newAnnotatedField(producerField.getCreatorField(),
- annotatedType);
- ProcessProducerImpl<?, ?> producerEvent = fireProcessProducerEventForField(producerField,
- field);
- inspectErrorStack("There are errors that are added by ProcessProducer event observers for"
- + " ProducerFields. Look at logs for further details");
+ for(ProducerFieldBean<?> producerField : producerFields)
+ {
+ AnnotatedField<?> field = webBeansContext.getAnnotatedElementFactory().newAnnotatedField(producerField.getCreatorField(),
+ annotatedType);
+ ProcessProducerImpl<?, ?> producerEvent = fireProcessProducerEventForField(producerField,
+ field);
+ 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()));
+ annotatedFields.put(producerField, field);
+ manager.putInjectionTargetWrapper(producerField, new InjectionTargetWrapper(producerEvent.getProducer()));
- producerEvent.setProducerSet(false);
- }
+ producerEvent.setProducerSet(false);
+ }
- Map<ObserverMethod<?>,AnnotatedMethod<?>> observerMethodsMap =
- new HashMap<ObserverMethod<?>, AnnotatedMethod<?>>();
+ Map<ObserverMethod<?>,AnnotatedMethod<?>> observerMethodsMap =
+ new HashMap<ObserverMethod<?>, AnnotatedMethod<?>>();
- for(ObserverMethod<?> observerMethod : observerMethods)
- {
- ObserverMethodImpl<?> impl = (ObserverMethodImpl<?>)observerMethod;
- AnnotatedMethod<?> method = webBeansContext.getAnnotatedElementFactory().newAnnotatedMethod(impl.getObserverMethod(),
- annotatedType);
+ for(ObserverMethod<?> observerMethod : observerMethods)
+ {
+ ObserverMethodImpl<?> impl = (ObserverMethodImpl<?>)observerMethod;
+ AnnotatedMethod<?> method = webBeansContext.getAnnotatedElementFactory().newAnnotatedMethod(impl.getObserverMethod(),
+ annotatedType);
- observerMethodsMap.put(observerMethod, method);
- }
+ observerMethodsMap.put(observerMethod, method);
+ }
- BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
+ BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
- //Fires ProcessManagedBean
- ProcessBeanImpl<T> processBeanEvent = new GProcessManagedBean(managedBean,annotatedType);
- beanManager.fireEvent(processBeanEvent, new Annotation[0]);
- inspectErrorStack("There are errors that are added by ProcessManagedBean event observers for " +
- "managed beans. Look at logs for further details");
+ //Fires ProcessManagedBean
+ ProcessBeanImpl<T> processBeanEvent = new GProcessManagedBean(managedBean, annotatedType);
+ beanManager.fireEvent(processBeanEvent, new Annotation[0]);
+ inspectErrorStack("There are errors that are added by ProcessManagedBean event observers for " +
+ "managed beans. Look at logs for further details");
- //Fires ProcessProducerMethod
- fireProcessProducerMethodBeanEvent(annotatedMethods, annotatedType);
- inspectErrorStack("There are errors that are added by ProcessProducerMethod event observers for " +
- "producer method beans. Look at logs for further details");
+ //Fires ProcessProducerMethod
+ fireProcessProducerMethodBeanEvent(annotatedMethods, annotatedType);
+ inspectErrorStack("There are errors that are added by ProcessProducerMethod event observers for " +
+ "producer method beans. Look at logs for further details");
- //Fires ProcessProducerField
- fireProcessProducerFieldBeanEvent(annotatedFields);
- inspectErrorStack("There are errors that are added by ProcessProducerField event observers for " +
- "producer field beans. Look at logs for further details");
+ //Fires ProcessProducerField
+ fireProcessProducerFieldBeanEvent(annotatedFields);
+ inspectErrorStack("There are errors that are added by ProcessProducerField event observers for " +
+ "producer field beans. Look at logs for further details");
- //Fire ObservableMethods
- fireProcessObservableMethodBeanEvent(observerMethodsMap);
- inspectErrorStack("There are errors that are added by ProcessObserverMethod event observers for " +
- "observer methods. Look at logs for further details");
+ //Fire ObservableMethods
+ fireProcessObservableMethodBeanEvent(observerMethodsMap);
+ inspectErrorStack("There are errors that are added by ProcessObserverMethod event observers for " +
+ "observer methods. Look at logs for further details");
- if(!isAnnotatedTypeDecoratorOrInterceptor(annotatedType))
- {
- beanManager.addBean(WebBeansUtil.createNewBean(managedBean));
- beanManager.addBean(managedBean);
- for (ProducerMethodBean<?> producerMethod : producerMethods)
+ if(!isAnnotatedTypeDecoratorOrInterceptor(annotatedType))
{
- // add them one after the other to enable serialization handling et al
- beanManager.addBean(producerMethod);
+ beanManager.addBean(WebBeansUtil.createNewBean(managedBean));
+ beanManager.addBean(managedBean);
+ for (ProducerMethodBean<?> producerMethod : producerMethods)
+ {
+ // add them one after the other to enable serialization handling et al
+ beanManager.addBean(producerMethod);
+ }
+ managedBeanCreator.defineDisposalMethods();//Define disposal method after adding producers
+ for (ProducerFieldBean<?> producerField : producerFields)
+ {
+ // add them one after the other to enable serialization handling et al
+ beanManager.addBean(producerField);
+ }
}
- managedBeanCreator.defineDisposalMethods();//Define disposal method after adding producers
- for (ProducerFieldBean<?> producerField : producerFields)
+ }
+ else
+ {
+ // we still need to fire a ProcessManagedBean event, even for lazily initiated beans
+ // (which most probably are no beans at all...)
+
+ BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
+
+ //Fires ProcessManagedBean
+ ProcessBeanImpl<T> processBeanEvent = new GProcessManagedBean(managedBean, annotatedType);
+ beanManager.fireEvent(processBeanEvent, new Annotation[0]);
+ inspectErrorStack("There are errors that are added by ProcessManagedBean event observers for " +
+ "managed beans. Look at logs for further details");
+ if(!isAnnotatedTypeDecoratorOrInterceptor(annotatedType))
{
- // add them one after the other to enable serialization handling et al
- beanManager.addBean(producerField);
+ beanManager.addBean(WebBeansUtil.createNewBean(managedBean));
+ beanManager.addBean(managedBean);
}
}
@@ -2947,18 +2969,19 @@ public final class WebBeansUtil
ManagedBeanCreatorImpl<T> managedBeanCreator = new ManagedBeanCreatorImpl<T>(managedBean);
managedBeanCreator.setAnnotatedType(type);
+ managedBeanCreator.defineApiType();
+
//Define meta-data
managedBeanCreator.defineStereoTypes();
//Scope type
managedBeanCreator.defineScopeType(logger.getTokenString(OWBLogConst.TEXT_MB_IMPL) + clazz.getName() +
- logger.getTokenString(OWBLogConst.TEXT_SAME_SCOPE));
+ logger.getTokenString(OWBLogConst.TEXT_SAME_SCOPE), false);
managedBeanCreator.defineSerializable();
//Check for Enabled via Alternative
setInjectionTargetBeanEnableFlag(managedBean);
- managedBeanCreator.defineApiType();
managedBeanCreator.checkCreateConditions();
managedBeanCreator.defineQualifier();
managedBeanCreator.defineName(WebBeansUtil.getManagedBeanDefaultName(clazz.getSimpleName()));
@@ -3106,28 +3129,19 @@ public final class WebBeansUtil
AnnotatedTypeBeanCreatorImpl<T> managedBeanCreator = new AnnotatedTypeBeanCreatorImpl<T>(managedBean);
managedBeanCreator.setAnnotatedType(type);
+ managedBeanCreator.defineApiType();
+
//Define meta-data
managedBeanCreator.defineStereoTypes();
//Scope type
managedBeanCreator.defineScopeType(logger.getTokenString(OWBLogConst.TEXT_MB_IMPL) + clazz.getName()
- + logger.getTokenString(OWBLogConst.TEXT_SAME_SCOPE));
+ + logger.getTokenString(OWBLogConst.TEXT_SAME_SCOPE), false);
- if (managedBean.isFullInit())
- {
- initializeManagedBean(clazz, managedBean, managedBeanCreator);
- }
-
- return managedBean;
- }
-
- public void initializeManagedBean(Class<?> clazz, ManagedBean<?> managedBean, AnnotatedTypeBeanCreatorImpl<?> managedBeanCreator)
- {
managedBeanCreator.defineSerializable();
//Check for Enabled via Alternative
setInjectionTargetBeanEnableFlag(managedBean);
- managedBeanCreator.defineApiType();
managedBeanCreator.checkCreateConditions();
managedBeanCreator.defineQualifier();
managedBeanCreator.defineName(getManagedBeanDefaultName(clazz.getSimpleName()));
@@ -3140,7 +3154,23 @@ public final class WebBeansUtil
DefinitionUtil.defineDecoratorStack(managedBean);
DefinitionUtil.defineBeanInterceptorStack(managedBean);
- managedBeanCreator.defineDisposalMethods();//Define disposal method after adding producers
+ managedBeanCreator.defineDisposalMethods(); //Define disposal method after adding producers
+
+ return managedBean;
+ }
+
+ public void lazyInitializeManagedBean(Class<?> clazz, ManagedBean<?> managedBean, ManagedBeanCreatorImpl<?> managedBeanCreator)
+ {
+ managedBeanCreator.defineConstructor();
+ managedBeanCreator.defineProducerMethods();
+ managedBeanCreator.defineProducerFields();
+ managedBeanCreator.defineInjectedFields();
+ managedBeanCreator.defineInjectedMethods();
+ managedBeanCreator.defineObserverMethods();
+ DefinitionUtil.defineDecoratorStack(managedBean);
+ DefinitionUtil.defineBeanInterceptorStack(managedBean);
+
+ managedBeanCreator.defineDisposalMethods(); //Define disposal method after adding producers
}