You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2013/01/30 14:27:16 UTC

svn commit: r1440403 - in /openwebbeans/trunk: webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/ webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/ webbeans-impl/src/main/java/org/apache/webbeans/component/ webbeans-impl...

Author: arne
Date: Wed Jan 30 13:27:15 2013
New Revision: 1440403

URL: http://svn.apache.org/viewvc?rev=1440403&view=rev
Log:
OWB-770: Removed AbstractInjectionTargetBeanBuilder

Removed:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java
Modified:
    openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanBuilder.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/ExtensionBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ExtensionBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java

Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanBuilder.java?rev=1440403&r1=1440402&r2=1440403&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanBuilder.java Wed Jan 30 13:27:15 2013
@@ -18,6 +18,7 @@
  */
 package org.apache.webbeans.ejb.common.component;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
@@ -28,10 +29,10 @@ import javax.enterprise.inject.spi.Injec
 import javax.enterprise.inject.spi.InjectionTarget;
 
 import org.apache.webbeans.component.BeanAttributesImpl;
-import org.apache.webbeans.component.creation.AbstractInjectionTargetBeanBuilder;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.ejb.common.util.EjbValidator;
 import org.apache.webbeans.portable.AbstractEjbInjectionTarget;
+import org.apache.webbeans.util.Asserts;
 
 /**
  * EjbBeanCreatorImpl.
@@ -40,14 +41,22 @@ import org.apache.webbeans.portable.Abst
  *
  * @param <T> ejb class type
  */
-public abstract class EjbBeanBuilder<T, E extends BaseEjbBean<T>> extends AbstractInjectionTargetBeanBuilder<T, E>
+public abstract class EjbBeanBuilder<T, E extends BaseEjbBean<T>>
 {
+    protected final WebBeansContext webBeansContext;
+    protected final AnnotatedType<T> annotatedType;
+    protected final BeanAttributesImpl<T> beanAttributes;
+
     public EjbBeanBuilder(WebBeansContext webBeansContext, AnnotatedType<T> annotatedType, BeanAttributesImpl<T> beanAttributes)
     {
-        super(webBeansContext, annotatedType, beanAttributes);
+        Asserts.assertNotNull(webBeansContext, "webBeansContext may not be null");
+        Asserts.assertNotNull(annotatedType, "annotated type may not be null");
+        Asserts.assertNotNull(beanAttributes, "beanAttributes may not be null");
+        this.webBeansContext = webBeansContext;
+        this.annotatedType = annotatedType;
+        this.beanAttributes = beanAttributes;
     }
 
-    @Override
     protected InjectionTarget<T> buildInjectionTarget(AnnotatedType<T> annotatedType,
                                                       Set<InjectionPoint> points,
                                                       WebBeansContext webBeansContext,
@@ -64,9 +73,31 @@ public abstract class EjbBeanBuilder<T, 
         };
     }
     
+    protected final E createBean(Class<T> beanClass)
+    {
+        E bean =  createBean(beanClass, webBeansContext.getWebBeansUtil().isBeanEnabled(annotatedType, annotatedType.getJavaClass(), beanAttributes.getStereotypes()));
+
+        //X TODO hack to set the InjectionTarget
+        InjectionTarget<T> injectionTarget = buildInjectionTarget(
+                bean.getAnnotatedType(),
+                bean.getInjectionPoints(),
+                webBeansContext,
+                Collections.<AnnotatedMethod<?>>emptyList(),
+                Collections.<AnnotatedMethod<?>>emptyList());
+        bean.setProducer(injectionTarget);
+
+        return bean;
+    }
+    
+    protected abstract E createBean(Class<T> beanClass, boolean beanEnabled);
+
     public E getBean()
     {
-        E bean = super.getBean();
+        E bean = createBean(annotatedType.getJavaClass());
+        for (InjectionPoint injectionPoint: webBeansContext.getInjectionPointFactory().buildInjectionPoints(bean, annotatedType))
+        {
+            bean.addInjectionPoint(injectionPoint);
+        }
         EjbValidator.validateDecoratorOrInterceptor(bean.getReturnType());
         EjbValidator.validateEjbScopeType(bean);
         EjbValidator.validateGenericBeanType(bean.getReturnType(), bean.getScope());

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=1440403&r1=1440402&r2=1440403&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 Wed Jan 30 13:27:15 2013
@@ -77,7 +77,6 @@ public final class EjbUtility
         ProcessAnnotatedTypeImpl<T> processAnnotatedEvent = (ProcessAnnotatedTypeImpl<T>)event;
         BeanAttributesImpl<T> beanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build();
         EjbBeanBuilder<T, BaseEjbBean<T>> ejbBeanCreator = new EjbBeanBuilder<T, BaseEjbBean<T>>(ejbBean.getWebBeansContext(), annotatedType, beanAttributes) {
-            @Override
             protected BaseEjbBean<T> createBean(Class<T> beanClass, boolean enabled)
             {
                 return ejbBean;
@@ -192,8 +191,6 @@ public final class EjbUtility
         final BeanAttributesImpl<T> beanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build();
         
         final EjbBeanBuilder<T, BaseEjbBean<T>> ejbBeanCreator = new EjbBeanBuilder<T, BaseEjbBean<T>>(ejbBean.getWebBeansContext(), annotatedType, beanAttributes) {
-
-            @Override
             protected BaseEjbBean<T> createBean(Class<T> beanClass, boolean enabled)
             {
                 return ejbBean;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java?rev=1440403&r1=1440402&r2=1440403&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java Wed Jan 30 13:27:15 2013
@@ -21,6 +21,7 @@ package org.apache.webbeans.component;
 import javax.enterprise.context.ApplicationScoped;
 
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.portable.ExtensionProducer;
 import org.apache.webbeans.util.AnnotationUtil;
 
 /**
@@ -50,7 +51,6 @@ public class ExtensionBean<T> extends In
                         ApplicationScoped.class),
                 returnType);
         setEnabled(true);
+        setProducer(new ExtensionProducer<T>(getAnnotatedType(), getInjectionPoints(), webBeansContext));
     }
-
-    
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java?rev=1440403&r1=1440402&r2=1440403&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/DecoratorBeanBuilder.java Wed Jan 30 13:27:15 2013
@@ -18,6 +18,8 @@
  */
 package org.apache.webbeans.component.creation;
 
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
 import javax.decorator.Delegate;
 import javax.enterprise.context.Dependent;
 import javax.enterprise.inject.Produces;
@@ -34,6 +36,7 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -51,17 +54,20 @@ import org.apache.webbeans.exception.Web
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
 import org.apache.webbeans.portable.AnnotatedConstructorImpl;
 import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.util.Asserts;
 import org.apache.webbeans.util.ClassUtil;
 
 
 /**
  * Bean builder for {@link org.apache.webbeans.component.InterceptorBean}s.
  */
-public class DecoratorBeanBuilder<T> extends AbstractInjectionTargetBeanBuilder<T, DecoratorBean<T>>
+public class DecoratorBeanBuilder<T>
 {
     private static Logger logger = WebBeansLoggerFacade.getLogger(DecoratorBeanBuilder.class);
 
-    private AnnotatedConstructor<T> constructor;
+    protected final WebBeansContext webBeansContext;
+    protected final AnnotatedType<T> annotatedType;
+    protected final BeanAttributesImpl<T> beanAttributes;
 
     /**
      * The Types the decorator itself implements
@@ -82,15 +88,19 @@ public class DecoratorBeanBuilder<T> ext
 
     public DecoratorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType<T> annotatedType, BeanAttributesImpl<T> beanAttributes)
     {
-        super(webBeansContext, annotatedType, beanAttributes);
+        Asserts.assertNotNull(webBeansContext, "webBeansContext may not be null");
+        Asserts.assertNotNull(annotatedType, "annotated type may not be null");
+        Asserts.assertNotNull(beanAttributes, "beanAttributes may not be null");
+        this.webBeansContext = webBeansContext;
+        this.annotatedType = annotatedType;
+        this.beanAttributes = beanAttributes;
         decoratedTypes = new HashSet<Type>(beanAttributes.getTypes());
         ignoredDecoratorInterfaces = getIgnoredDecoratorInterfaces();
     }
 
     private Set<String> getIgnoredDecoratorInterfaces()
     {
-        Set<String> result = new HashSet<String>(webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces());
-        return result;
+        return webBeansContext.getOpenWebBeansConfiguration().getIgnoredInterfaces();
     }
 
     /**
@@ -138,10 +148,9 @@ public class DecoratorBeanBuilder<T> ext
         }
 
         Set<AnnotatedMethod<? super T>> methods = annotatedType.getMethods();
-        for(AnnotatedMethod method : methods)
+        for(AnnotatedMethod<?> method : methods)
         {
-            List<AnnotatedParameter> parms = method.getParameters();
-            for (AnnotatedParameter parameter : parms)
+            for (AnnotatedParameter<?> parameter : method.getParameters())
             {
                 if (parameter.isAnnotationPresent(Produces.class))
                 {
@@ -267,31 +276,33 @@ public class DecoratorBeanBuilder<T> ext
         }
     }
 
-    @Override
     protected InjectionTarget<T> buildInjectionTarget(AnnotatedType<T> annotatedType, Set<InjectionPoint> points,
                                                       WebBeansContext webBeansContext, List<AnnotatedMethod<?>> postConstructMethods, List<AnnotatedMethod<?>> preDestroyMethods)
     {
-        InjectionTarget<T> injectionTarget = super.buildInjectionTarget(annotatedType, points, webBeansContext, postConstructMethods, preDestroyMethods);
+        InjectionTarget<T> injectionTarget;
 
         if (Modifier.isAbstract(annotatedType.getJavaClass().getModifiers()))
         {
-            injectionTarget = new AbstractDecoratorInjectionTarget(annotatedType, points, webBeansContext, postConstructMethods, preDestroyMethods);
+            injectionTarget = new AbstractDecoratorInjectionTarget<T>(annotatedType, points, webBeansContext, postConstructMethods, preDestroyMethods);
+        }
+        else
+        {
+            injectionTarget = new InjectionTargetImpl<T>(annotatedType, points, webBeansContext, postConstructMethods, preDestroyMethods);
         }
         return injectionTarget;
     }
 
-    @Override
-    protected DecoratorBean<T> createBean(Class<T> beanClass, boolean enabled)
-    {
-        DecoratorBean<T> decorator = new DecoratorBean<T>(webBeansContext, WebBeansType.MANAGED, annotatedType, beanAttributes, beanClass);
-        decorator.setEnabled(enabled);
-        return decorator;
-    }
-
-    @Override
     public DecoratorBean<T> getBean()
     {
-        DecoratorBean<T> decorator = super.getBean();
+        DecoratorBean<T> decorator = new DecoratorBean<T>(webBeansContext, WebBeansType.MANAGED, annotatedType, beanAttributes, annotatedType.getJavaClass());
+        decorator.setEnabled(webBeansContext.getDecoratorsManager().isDecoratorEnabled(annotatedType.getJavaClass()));
+        InjectionTarget<T> injectionTarget
+                = buildInjectionTarget(annotatedType, decorator.getInjectionPoints(), webBeansContext, getPostConstructMethods(), getPreDestroyMethods());
+        decorator.setProducer(injectionTarget);
+        for (InjectionPoint injectionPoint: webBeansContext.getInjectionPointFactory().buildInjectionPoints(decorator, annotatedType))
+        {
+            decorator.addInjectionPoint(injectionPoint);
+        }
 
         // we can only do this after the bean injection points got scanned
         defineDelegate(decorator.getInjectionPoints());
@@ -300,6 +311,56 @@ public class DecoratorBeanBuilder<T> ext
         return decorator;
     }
 
+    protected List<AnnotatedMethod<?>> getPostConstructMethods()
+    {
+        List<AnnotatedMethod<?>> postConstructMethods = new ArrayList<AnnotatedMethod<?>>();
+        collectPostConstructMethods(annotatedType.getJavaClass(), postConstructMethods);
+        return postConstructMethods;
+    }
+
+    private void collectPostConstructMethods(Class<?> type, List<AnnotatedMethod<?>> postConstructMethods)
+    {
+        if (type == null)
+        {
+            return;
+        }
+        collectPostConstructMethods(type.getSuperclass(), postConstructMethods);
+        for (AnnotatedMethod<?> annotatedMethod: annotatedType.getMethods())
+        {
+            if (annotatedMethod.getJavaMember().getDeclaringClass() == type
+                && annotatedMethod.isAnnotationPresent(PostConstruct.class)
+                && annotatedMethod.getParameters().isEmpty())
+            {
+                postConstructMethods.add(annotatedMethod);
+            }
+        }
+    }
+
+    protected List<AnnotatedMethod<?>> getPreDestroyMethods()
+    {
+        List<AnnotatedMethod<?>> preDestroyMethods = new ArrayList<AnnotatedMethod<?>>();
+        collectPreDestroyMethods(annotatedType.getJavaClass(), preDestroyMethods);
+        return preDestroyMethods;
+    }
+
+    private void collectPreDestroyMethods(Class<?> type, List<AnnotatedMethod<?>> preDestroyMethods)
+    {
+        if (type == null)
+        {
+            return;
+        }
+        collectPreDestroyMethods(type.getSuperclass(), preDestroyMethods);
+        for (AnnotatedMethod<?> annotatedMethod: annotatedType.getMethods())
+        {
+            if (annotatedMethod.getJavaMember().getDeclaringClass() == type
+                && annotatedMethod.isAnnotationPresent(PreDestroy.class)
+                && annotatedMethod.getParameters().isEmpty())
+            {
+                preDestroyMethods.add(annotatedMethod);
+            }
+        }
+    }
+
     /**
      * Helper class to swap out the constructor for the proxied subclass.
      */

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ExtensionBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ExtensionBeanBuilder.java?rev=1440403&r1=1440402&r2=1440403&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ExtensionBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ExtensionBeanBuilder.java Wed Jan 30 13:27:15 2013
@@ -18,44 +18,27 @@
  */
 package org.apache.webbeans.component.creation;
 
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.List;
-import java.util.Set;
-
-import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.InjectionTarget;
 
 import org.apache.webbeans.component.ExtensionBean;
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.portable.ExtensionProducer;
+import org.apache.webbeans.util.Asserts;
 
-public class ExtensionBeanBuilder<T> extends AbstractInjectionTargetBeanBuilder<T, ExtensionBean<T>>
+public class ExtensionBeanBuilder<T>
 {
+    protected final WebBeansContext webBeansContext;
+    protected final AnnotatedType<T> annotatedType;
 
     public ExtensionBeanBuilder(WebBeansContext webBeansContext, Class<T> type)
     {
-        super(webBeansContext,
-              webBeansContext.getAnnotatedElementFactory().newAnnotatedType(type),
-              BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(webBeansContext.getAnnotatedElementFactory().getAnnotatedType(type)).build());
-    }
-
-    protected InjectionTarget<T> buildInjectionTarget(Set<Type> types,
-                                                      Set<Annotation> qualifiers,
-                                                      AnnotatedType<T> annotatedType,
-                                                      Set<InjectionPoint> points,
-                                                      WebBeansContext webBeansContext,
-                                                      List<AnnotatedMethod<?>> postConstructMethods,
-                                                      List<AnnotatedMethod<?>> preDestroyMethods)
-    {
-        return new ExtensionProducer<T>(annotatedType, points, webBeansContext);
+        Asserts.assertNotNull(webBeansContext, "webBeansContext may not be null");
+        Asserts.assertNotNull(type, "type may not be null");
+        this.webBeansContext = webBeansContext;
+        this.annotatedType = webBeansContext.getAnnotatedElementFactory().newAnnotatedType(type);
     }
 
-    @Override
-    protected ExtensionBean<T> createBean(Class<T> beanClass, boolean enabled)
+    public ExtensionBean<T> getBean()
     {
-        return new ExtensionBean<T>(webBeansContext, beanClass);
+        return new ExtensionBean<T>(webBeansContext, annotatedType.getJavaClass());
     }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java?rev=1440403&r1=1440402&r2=1440403&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InterceptorBeanBuilder.java Wed Jan 30 13:27:15 2013
@@ -24,6 +24,8 @@ import javax.enterprise.inject.Produces;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
 import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.InjectionTarget;
 import javax.enterprise.inject.spi.InterceptionType;
 import javax.interceptor.AroundInvoke;
 import javax.interceptor.AroundTimeout;
@@ -33,6 +35,7 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -43,14 +46,19 @@ import org.apache.webbeans.component.Int
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.plugins.OpenWebBeansEjbLCAPlugin;
+import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.util.Asserts;
 import org.apache.webbeans.util.ClassUtil;
 
 
 /**
  * Bean builder for {@link org.apache.webbeans.component.InterceptorBean}s.
  */
-public abstract class InterceptorBeanBuilder<T, B extends InterceptorBean<T>> extends AbstractInjectionTargetBeanBuilder<T, B>
+public abstract class InterceptorBeanBuilder<T, B extends InterceptorBean<T>>
 {
+    protected final WebBeansContext webBeansContext;
+    protected final AnnotatedType<T> annotatedType;
+    protected final BeanAttributesImpl<T> beanAttributes;
 
     private final OpenWebBeansEjbLCAPlugin ejbPlugin;
     private final Class<? extends Annotation> prePassivateClass;
@@ -60,7 +68,12 @@ public abstract class InterceptorBeanBui
     
     protected InterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType<T> annotatedType, BeanAttributesImpl<T> beanAttributes)
     {
-        super(webBeansContext, annotatedType, beanAttributes);
+        Asserts.assertNotNull(webBeansContext, "webBeansContext may not be null");
+        Asserts.assertNotNull(annotatedType, "annotated type may not be null");
+        Asserts.assertNotNull(beanAttributes, "beanAttributes may not be null");
+        this.webBeansContext = webBeansContext;
+        this.annotatedType = annotatedType;
+        this.beanAttributes = beanAttributes;
         ejbPlugin = webBeansContext.getPluginLoader().getEjbLCAPlugin();
         if (ejbPlugin != null)
         {
@@ -81,14 +94,12 @@ public abstract class InterceptorBeanBui
      */
     public abstract boolean isInterceptorEnabled();
 
-
     protected void checkInterceptorConditions()
     {
         Set<AnnotatedMethod<? super T>> methods = annotatedType.getMethods();
-        for(AnnotatedMethod method : methods)
+        for(AnnotatedMethod<?> method : methods)
         {
-            List<AnnotatedParameter> parms = method.getParameters();
-            for (AnnotatedParameter parameter : parms)
+            for (AnnotatedParameter<?> parameter : method.getParameters())
             {
                 if (parameter.isAnnotationPresent(Produces.class))
                 {
@@ -317,9 +328,22 @@ public abstract class InterceptorBeanBui
                                     boolean enabled,
                                     Map<InterceptionType, Method[]> interceptionMethods);
 
-    @Override
-    protected B createBean(Class<T> beanClass, boolean enabled)
+    public B getBean()
     {
-        return createBean(beanClass, enabled, interceptionMethods);
+        B bean = createBean(annotatedType.getJavaClass(), isInterceptorEnabled(), interceptionMethods);
+
+        //X TODO hack to set the InjectionTarget
+        InjectionTarget<T> injectionTarget = new InjectionTargetImpl<T>(
+                bean.getAnnotatedType(),
+                bean.getInjectionPoints(),
+                webBeansContext,
+                Collections.<AnnotatedMethod<?>>emptyList(),
+                Collections.<AnnotatedMethod<?>>emptyList());
+        bean.setProducer(injectionTarget);
+        for (InjectionPoint injectionPoint: webBeansContext.getInjectionPointFactory().buildInjectionPoints(bean, annotatedType))
+        {
+            bean.addInjectionPoint(injectionPoint);
+        }
+        return bean;
     }
 }

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=1440403&r1=1440402&r2=1440403&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 Wed Jan 30 13:27:15 2013
@@ -24,11 +24,15 @@ import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.InjectionTarget;
 
 import org.apache.webbeans.component.BeanAttributesImpl;
 import org.apache.webbeans.component.ManagedBean;
 import org.apache.webbeans.component.WebBeansType;
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.util.Asserts;
 import org.apache.webbeans.util.WebBeansUtil;
 
 /**
@@ -39,14 +43,23 @@ import org.apache.webbeans.util.WebBeans
  *
  * @param <T> bean type info
  */
-public class ManagedBeanBuilder<T, M extends ManagedBean<T>> extends AbstractInjectionTargetBeanBuilder<T, M>
+public class ManagedBeanBuilder<T, M extends ManagedBean<T>>
 {
+    protected final WebBeansContext webBeansContext;
+    protected final AnnotatedType<T> annotatedType;
+    protected final BeanAttributesImpl<T> beanAttributes;
+
     /**
      * Creates a new creator.
      */
     public ManagedBeanBuilder(WebBeansContext webBeansContext, AnnotatedType<T> annotatedType, BeanAttributesImpl<T> beanAttributes)
     {
-        super(webBeansContext, annotatedType, beanAttributes);
+        Asserts.assertNotNull(webBeansContext, "webBeansContext may not be null");
+        Asserts.assertNotNull(annotatedType, "annotated type may not be null");
+        Asserts.assertNotNull(beanAttributes, "beanAttributes may not be null");
+        this.webBeansContext = webBeansContext;
+        this.annotatedType = annotatedType;
+        this.beanAttributes = beanAttributes;
     }
 
     /**
@@ -54,39 +67,29 @@ public class ManagedBeanBuilder<T, M ext
      */
     public M getBean()
     {
-        M bean = super.getBean();
+        M bean = (M)new ManagedBean<T>(webBeansContext, WebBeansType.MANAGED, annotatedType, beanAttributes, annotatedType.getJavaClass());
+        bean.setEnabled(webBeansContext.getWebBeansUtil().isBeanEnabled(annotatedType, annotatedType.getJavaClass(), beanAttributes.getStereotypes()));
+        for (InjectionPoint injectionPoint: webBeansContext.getInjectionPointFactory().buildInjectionPoints(bean, annotatedType))
+        {
+            bean.addInjectionPoint(injectionPoint);
+        }
+        
+        InjectionTarget<T> injectionTarget
+            = new InjectionTargetImpl<T>(bean.getAnnotatedType(), bean.getInjectionPoints(), webBeansContext, getPostConstructMethods(), getPreDestroyMethods());
+        bean.setProducer(injectionTarget);
         webBeansContext.getWebBeansUtil().checkManagedBeanCondition(annotatedType);
         WebBeansUtil.checkGenericType(annotatedType.getJavaClass(), beanAttributes.getScope());
         webBeansContext.getDeploymentValidationService().validateProxyable(bean);
         return bean;
     }
 
-
-    public ManagedBean<T> defineManagedBean(AnnotatedType<T> annotatedType)
-    {
-        //Check for Enabled via Alternative
-        defineEnabled();
-
-        return getBean();
-    }
-
-    @Override
     protected List<AnnotatedMethod<?>> getPostConstructMethods()
     {
         return webBeansContext.getInterceptorUtil().getLifecycleMethods(annotatedType, PostConstruct.class, true);
     }
 
-    @Override
     protected List<AnnotatedMethod<?>> getPreDestroyMethods()
     {
         return webBeansContext.getInterceptorUtil().getLifecycleMethods(annotatedType, PreDestroy.class, false);
     }
-
-    @Override
-    protected M createBean(Class<T> beanClass, boolean enabled)
-    {
-        M managedBean = (M)new ManagedBean<T>(webBeansContext, WebBeansType.MANAGED, annotatedType, beanAttributes, beanClass);
-        managedBean.setEnabled(enabled);
-        return managedBean;
-    }
 }

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=1440403&r1=1440402&r2=1440403&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 Wed Jan 30 13:27:15 2013
@@ -876,7 +876,7 @@ public class BeansDeployer
             else
             {
             
-                bean = managedBeanCreator.defineManagedBean(annotatedType);
+                bean = managedBeanCreator.getBean();
 
                 if(processInjectionTargetEvent == null)
                 {
@@ -896,7 +896,7 @@ public class BeansDeployer
                 }
 
                 Set<ObserverMethod<?>> observerMethods = new HashSet<ObserverMethod<?>>();
-                if(managedBeanCreator.isEnabled())
+                if(bean.isEnabled())
                 {
                     observerMethods = new ObserverMethodsBuilder<T, InjectionTargetBean<T>>(webBeansContext, bean.getAnnotatedType()).defineObserverMethods(bean);
                 }

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=1440403&r1=1440402&r2=1440403&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 Wed Jan 30 13:27:15 2013
@@ -1729,7 +1729,6 @@ public final class WebBeansUtil
         ManagedBeanBuilder<T, ManagedBean<T>> managedBeanCreator = new ManagedBeanBuilder<T, ManagedBean<T>>(webBeansContext, type, beanAttributes);
 
         //Check for Enabled via Alternative
-        managedBeanCreator.defineEnabled();
         ManagedBean<T> managedBean = managedBeanCreator.getBean();
         new ProducerMethodBeansBuilder(managedBean.getWebBeansContext(), managedBean.getAnnotatedType()).defineProducerMethods(managedBean);
         new ProducerFieldBeansBuilder(managedBean.getWebBeansContext(), managedBean.getAnnotatedType()).defineProducerFields(managedBean);

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=1440403&r1=1440402&r2=1440403&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 Wed Jan 30 13:27:15 2013
@@ -523,7 +523,6 @@ public abstract class TestContext implem
 
         BeanAttributesImpl<T> beanAttributes = BeanAttributesBuilder.forContext(getWebBeansContext()).newBeanAttibutes(annotatedType).build();
         ManagedBeanBuilder<T, ManagedBean<T>> managedBeanCreator = new ManagedBeanBuilder<T, ManagedBean<T>>(webBeansContext, annotatedType, beanAttributes);
-        managedBeanCreator.defineEnabled();
         ManagedBean<T> component = managedBeanCreator.getBean();
         List<AnnotatedMethod<?>> postConstructMethods
             = webBeansContext.getInterceptorUtil().getLifecycleMethods(component.getAnnotatedType(), PostConstruct.class, true);