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 2013/01/10 13:05:26 UTC

svn commit: r1431307 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/component/ main/java/org/apache/webbeans/component/creation/ test/java/org/apache/webbeans/test/

Author: struberg
Date: Thu Jan 10 12:05:25 2013
New Revision: 1431307

URL: http://svn.apache.org/viewvc?rev=1431307&view=rev
Log:
OWB-753 remove lazy init logic

Modified:
    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/AbstractBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java

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=1431307&r1=1431306&r2=1431307&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 Thu Jan 10 12:05:25 2013
@@ -19,16 +19,12 @@
 package org.apache.webbeans.component;
 
 import java.io.Serializable;
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
 
 import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.Any;
-import javax.enterprise.inject.Default;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Decorator;
 
-import org.apache.webbeans.component.creation.ManagedBeanBuilder;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.decorator.AbstractDecoratorMethodHandler;
@@ -48,16 +44,6 @@ public class ManagedBean<T> extends Abst
     
     protected boolean isAbstractDecorator;
 
-    /**
-     * Whether the bean is fully initialized or not yet.
-     * Only beans scanned from the classpath can be lazily initialized,
-     * and only if they do _NOT_ contain any javax.inject or javax.enterprise
-     * annotation! In other words: we can skip eager initialisation for
-     * beans which only could picked up as auto-&#0064;Dependent beans which
-     * do not register/ any other beans (e.g. via &#0064;Produces)
-     */
-    private volatile boolean fullInit = true;
-
 
     public ManagedBean(WebBeansContext webBeansContext, Class<T> returnType, AnnotatedType<T> annotatedType)
     {
@@ -85,12 +71,6 @@ public class ManagedBean<T> extends Abst
     @Override
     protected T createComponentInstance(CreationalContext<T> creationalContext)
     {
-        if (!fullInit)
-        {
-            lazyInit();
-        }
-
-
         Constructor<T> con = getConstructor();
         InjectableConstructor<T> ic = new InjectableConstructor<T>(con, new InjectionTargetImpl<T>(getInjectionPoints()), (CreationalContextImpl<T>) creationalContext);
 
@@ -105,36 +85,6 @@ public class ManagedBean<T> extends Abst
         return instance;
     }
 
-    private synchronized void lazyInit()
-    {
-        if (!fullInit)
-        {
-            fullInit = true;
-            ManagedBeanBuilder.lazyInitializeManagedBean(this);
-        }
-    }
-
-    public boolean isFullInit()
-    {
-        return fullInit;
-    }
-
-    public void setFullInit(boolean fullInit)
-    {
-        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/AbstractBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java?rev=1431307&r1=1431306&r2=1431307&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java Thu Jan 10 12:05:25 2013
@@ -256,10 +256,6 @@ public abstract class AbstractBeanBuilde
         return null;
     }
 
-    protected void defineLazyInit()
-    {
-        // hook for subclasses
-    }
 
     /**
      * Returns true if any binding exist
@@ -364,13 +360,6 @@ public abstract class AbstractBeanBuilde
             if (stereos.size() == 0)
             {
                 scope = Dependent.class;
-
-                if (allowLazyInit && isPurePojoBean(webBeansContext, getBeanType()))
-                {
-                    // take the bean as Dependent but we could lazily initialize it
-                    // because the bean doesn't contains any CDI feature
-                    defineLazyInit();
-                }
             }
             else
             {
@@ -415,13 +404,6 @@ public abstract class AbstractBeanBuilde
                 else
                 {
                     scope = Dependent.class;
-
-                    if (allowLazyInit && isPurePojoBean(webBeansContext, getBeanType()))
-                    {
-                        // take the bean as Dependent but we could lazily initialize it
-                        // because the bean doesn't contains any CDI feature
-                        defineLazyInit();
-                    }
                 }
             }
         }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java?rev=1431307&r1=1431306&r2=1431307&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java Thu Jan 10 12:05:25 2013
@@ -71,8 +71,6 @@ public class ManagedBeanBuilder<T> exten
 {
     private final WebBeansContext webBeansContext;
     
-    private boolean fullInit = true;
-
     /**
      * Creates a new creator.
      */
@@ -114,36 +112,9 @@ public class ManagedBeanBuilder<T> exten
     public ManagedBean<T> getBean()
     {
         ManagedBean<T> bean = (ManagedBean<T>)super.getBean();
-        bean.setFullInit(fullInit);
         return bean;
     }
 
-    /**
-     * @deprecated makes no sense as only Beans without any annotations are lazy inited. And they don'T have anything to handle...
-     */
-    public static <T> void lazyInitializeManagedBean(ManagedBean<T> bean)
-    {
-        ManagedBeanBuilder<T> managedBeanCreator = new ManagedBeanBuilder<T>(bean, bean.getScope());
-
-        managedBeanCreator.lazyInitializeManagedBean(bean.getBeanClass(), bean);
-    }
-
-    /**
-     * @deprecated makes no sense as only Beans without any annotations are lazy inited. And they don'T have anything to handle...
-     */
-    public void lazyInitializeManagedBean(Class<?> clazz, ManagedBean<?> managedBean)
-    {
-        defineConstructor();
-        defineProducerMethods();
-        defineProducerFields();
-        defineInjectedFields();
-        defineInjectedMethods();
-        defineObserverMethods();
-        WebBeansDecoratorConfig.configureDecorators(managedBean);
-        webBeansContext.getWebBeansInterceptorConfig().defineBeanInterceptorStack(managedBean);
-
-        defineDisposalMethods(); //Define disposal method after adding producers
-    }
 
     public ManagedBean<T> defineManagedBean(ProcessInjectionTarget<T> processInjectionTargetEvent)
     {
@@ -170,117 +141,97 @@ public class ManagedBeanBuilder<T> exten
         defineName();
         defineQualifiers();
 
-        if (managedBean.isFullInit())
-        {
-            defineConstructor();
-            Set<ProducerMethodBean<?>> producerMethods = defineProducerMethods();
-            Set<ProducerFieldBean<?>> producerFields = defineProducerFields();
-            defineInjectedFields();
-            defineInjectedMethods();
-
-            Set<ObserverMethod<?>> observerMethods = new HashSet<ObserverMethod<?>>();
-            if(managedBean.isEnabled())
-            {
-                observerMethods = defineObserverMethods();
-            }
-
-            //Put final InjectionTarget instance
-            managedBean.setProducer(processInjectionTargetEvent.getInjectionTarget());
-
-            Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods =
-                    new HashMap<ProducerMethodBean<?>, AnnotatedMethod<?>>();
+        defineConstructor();
+        Set<ProducerMethodBean<?>> producerMethods = defineProducerMethods();
+        Set<ProducerFieldBean<?>> producerFields = defineProducerFields();
+        defineInjectedFields();
+        defineInjectedMethods();
 
-            for(ProducerMethodBean<?> producerMethod : producerMethods)
-            {
-                AnnotatedMethod<?> method = webBeansContext.getAnnotatedElementFactory().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");
+        Set<ObserverMethod<?>> observerMethods = new HashSet<ObserverMethod<?>>();
+        if(managedBean.isEnabled())
+        {
+            observerMethods = defineObserverMethods();
+        }
 
-                annotatedMethods.put(producerMethod, method);
-                producerMethod.setProducer((Producer) producerEvent.getProducer());
-            }
+        //Put final InjectionTarget instance
+        managedBean.setProducer(processInjectionTargetEvent.getInjectionTarget());
 
-            Map<ProducerFieldBean<?>,AnnotatedField<?>> annotatedFields =
-                    new HashMap<ProducerFieldBean<?>, AnnotatedField<?>>();
+        Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods =
+                new HashMap<ProducerMethodBean<?>, AnnotatedMethod<?>>();
 
-            for(ProducerFieldBean<?> producerField : producerFields)
-            {
-                AnnotatedField<?> field = webBeansContext.getAnnotatedElementFactory().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");
+        for(ProducerMethodBean<?> producerMethod : producerMethods)
+        {
+            AnnotatedMethod<?> method = webBeansContext.getAnnotatedElementFactory().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");
 
-                annotatedFields.put(producerField, field);
-                producerField.setProducer((Producer) producerEvent.getProducer());
-            }
+            annotatedMethods.put(producerMethod, method);
+            producerMethod.setProducer((Producer) producerEvent.getProducer());
+        }
 
-            Map<ObserverMethod<?>,AnnotatedMethod<?>> observerMethodsMap =
-                    new HashMap<ObserverMethod<?>, AnnotatedMethod<?>>();
+        Map<ProducerFieldBean<?>,AnnotatedField<?>> annotatedFields =
+                new HashMap<ProducerFieldBean<?>, AnnotatedField<?>>();
 
-            for(ObserverMethod<?> observerMethod : observerMethods)
-            {
-                ObserverMethodImpl<?> impl = (ObserverMethodImpl<?>)observerMethod;
-                AnnotatedMethod<?> method = webBeansContext.getAnnotatedElementFactory().newAnnotatedMethod(impl.getObserverMethod(), annotatedType);
+        for(ProducerFieldBean<?> producerField : producerFields)
+        {
+            AnnotatedField<?> field = webBeansContext.getAnnotatedElementFactory().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");
 
-                observerMethodsMap.put(observerMethod, method);
-            }
+            annotatedFields.put(producerField, field);
+            producerField.setProducer((Producer) producerEvent.getProducer());
+        }
 
-            BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
+        Map<ObserverMethod<?>,AnnotatedMethod<?>> observerMethodsMap =
+                new HashMap<ObserverMethod<?>, AnnotatedMethod<?>>();
 
-            //Fires ProcessManagedBean
-            ProcessBeanImpl<T> processBeanEvent = new GProcessManagedBean(managedBean, annotatedType);
-            beanManager.fireEvent(processBeanEvent);
-            webBeansContext.getWebBeansUtil().inspectErrorStack("There are errors that are added by ProcessManagedBean event observers for " +
-                    "managed beans. Look at logs for further details");
+        for(ObserverMethod<?> observerMethod : observerMethods)
+        {
+            ObserverMethodImpl<?> impl = (ObserverMethodImpl<?>)observerMethod;
+            AnnotatedMethod<?> method = webBeansContext.getAnnotatedElementFactory().newAnnotatedMethod(impl.getObserverMethod(), annotatedType);
 
-            //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");
+            observerMethodsMap.put(observerMethod, method);
+        }
 
-            //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");
+        BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
 
-            //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");
+        //Fires ProcessManagedBean
+        ProcessBeanImpl<T> processBeanEvent = new GProcessManagedBean(managedBean, annotatedType);
+        beanManager.fireEvent(processBeanEvent);
+        webBeansContext.getWebBeansUtil().inspectErrorStack("There are errors that are added by ProcessManagedBean 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");
 
-            if(!webBeansContext.getWebBeansUtil().isAnnotatedTypeDecoratorOrInterceptor(annotatedType))
+        if(!webBeansContext.getWebBeansUtil().isAnnotatedTypeDecoratorOrInterceptor(annotatedType))
+        {
+            beanManager.addBean(managedBean);
+            for (ProducerMethodBean<?> producerMethod : producerMethods)
             {
-                beanManager.addBean(managedBean);
-                for (ProducerMethodBean<?> producerMethod : producerMethods)
-                {
-                    // add them one after the other to enable serialization handling et al
-                    beanManager.addBean(producerMethod);
-                }
-                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);
-                }
+                // add them one after the other to enable serialization handling et al
+                beanManager.addBean(producerMethod);
             }
-        }
-        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);
-            webBeansContext.getWebBeansUtil().inspectErrorStack("There are errors that are added by ProcessManagedBean event observers for " +
-                    "managed beans. Look at logs for further details");
-            if(!webBeansContext.getWebBeansUtil().isAnnotatedTypeDecoratorOrInterceptor(annotatedType))
+            defineDisposalMethods();//Define disposal method after adding producers
+            for (ProducerFieldBean<?> producerField : producerFields)
             {
-                beanManager.addBean(managedBean);
+                // add them one after the other to enable serialization handling et al
+                beanManager.addBean(producerField);
             }
         }
 
@@ -433,12 +384,6 @@ public class ManagedBeanBuilder<T> exten
         }
     }
 
-    @Override
-    protected void defineLazyInit()
-    {
-        fullInit = false;
-    }
-
     private ManagedBean<T> defineAbstractDecorator(ProcessInjectionTarget<T> processInjectionTargetEvent)
     {
 

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java?rev=1431307&r1=1431306&r2=1431307&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java Thu Jan 10 12:05:25 2013
@@ -530,13 +530,9 @@ public abstract class TestContext implem
         managedBeanCreator.defineSerializable();
         managedBeanCreator.defineStereoTypes();
 
-        Annotation[] clazzAnns = clazz.getDeclaredAnnotations();
-
         defineApiTypes(component, clazz);
         managedBeanCreator.defineScopeType("Simple WebBean Component implementation class : " + clazz.getName()
                                            + " stereotypes must declare same @Scope annotations");
-        // we fully initialize the bean in this case.
-        component.setFullInit(true);
 
         ManagedBean<T> bean = managedBeanCreator.getBean();
         WebBeansUtil.checkGenericType(bean.getReturnType(), bean.getScope());