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/24 23:07:12 UTC

svn commit: r1438223 - 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/creation/ webb...

Author: arne
Date: Thu Jan 24 22:07:12 2013
New Revision: 1438223

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

Removed:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.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/creation/AbstractInjectionTargetBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AnnotatedTypeBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.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/EjbInterceptorBeanBuilder.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/component/creation/ProducerFieldBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DeploymentValidationService.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=1438223&r1=1438222&r2=1438223&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 Thu Jan 24 22:07:12 2013
@@ -49,17 +49,6 @@ public abstract class EjbBeanBuilder<T, 
         super(webBeansContext, annotatedType, beanAttributes);
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void checkCreateConditions()
-    {        
-        EjbValidator.validateDecoratorOrInterceptor(getBeanType());
-        EjbValidator.validateEjbScopeType(getBean());
-        EjbValidator.validateGenericBeanType(getBeanType(), getBeanAttributes().getScope());
-    }
-
     /* (non-Javadoc)
      * @see org.apache.webbeans.component.creation.AbstractInjectedTargetBeanCreator#defineObserverMethods()
      */
@@ -89,5 +78,14 @@ public abstract class EjbBeanBuilder<T, 
         };
     }
     
+    public E getBean()
+    {
+        E bean = super.getBean();
+        EjbValidator.validateDecoratorOrInterceptor(bean.getReturnType());
+        EjbValidator.validateEjbScopeType(bean);
+        EjbValidator.validateGenericBeanType(bean.getReturnType(), bean.getScope());
+        return bean;
+    }
+
     protected abstract T getInstance(CreationalContext<T> creationalContext);
 }

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=1438223&r1=1438222&r2=1438223&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 Thu Jan 24 22:07:12 2013
@@ -85,8 +85,6 @@ public final class EjbUtility
                 throw new UnsupportedOperationException("Please implement ejb lookup");
             }
         };
-        ejbBeanCreator.checkCreateConditions();
-        
         if(processAnnotatedEvent.isVeto())
         {
             return;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java?rev=1438223&r1=1438222&r2=1438223&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java Thu Jan 24 22:07:12 2013
@@ -73,11 +73,13 @@ import org.apache.webbeans.util.WebBeans
  *
  * @param <T> bean class type
  */
-public abstract class AbstractInjectionTargetBeanBuilder<T, I extends InjectionTargetBean<T>> extends AbstractBeanBuilder<T, AnnotatedType<T>, I>
+public abstract class AbstractInjectionTargetBeanBuilder<T, I extends InjectionTargetBean<T>>
 {    
     
+    protected final WebBeansContext webBeansContext;
+    protected final AnnotatedType<T> annotatedType;
+    protected final BeanAttributesImpl<T> beanAttributes;
     private boolean enabled = true;
-    protected WebBeansContext webBeansContext;
 
     /**
      * Creates a new instance.
@@ -85,13 +87,17 @@ public abstract class AbstractInjectionT
      */
     public AbstractInjectionTargetBeanBuilder(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;
     }
 
     protected AnnotatedType<? super T> getSuperAnnotated()
     {
-        Class<? super T> superclass = getAnnotated().getJavaClass().getSuperclass();
+        Class<? super T> superclass = annotatedType.getJavaClass().getSuperclass();
         if (superclass == null)
         {
             return null;
@@ -101,10 +107,10 @@ public abstract class AbstractInjectionT
     
     protected AnnotatedConstructor<T> getBeanConstructor()
     {
-        Asserts.assertNotNull(getAnnotated(),"Type is null");
+        Asserts.assertNotNull(annotatedType,"Type is null");
         AnnotatedConstructor<T> result = null;
 
-        Set<AnnotatedConstructor<T>> annConsts = getAnnotated().getConstructors();
+        Set<AnnotatedConstructor<T>> annConsts = annotatedType.getConstructors();
         if(annConsts != null)
         {
             boolean found = false;
@@ -116,7 +122,7 @@ public abstract class AbstractInjectionT
                     if (found)
                     {
                         throw new WebBeansConfigurationException("There are more than one constructor with @Inject annotation in annotation type : "
-                                + getAnnotated());
+                                + annotatedType);
                     }
 
                     found = true;
@@ -139,7 +145,7 @@ public abstract class AbstractInjectionT
 
         if (result == null)
         {
-            throw new WebBeansConfigurationException("No constructor is found for the annotated type : " + getAnnotated());
+            throw new WebBeansConfigurationException("No constructor is found for the annotated type : " + annotatedType);
         }
 
         List<AnnotatedParameter<T>> parameters = result.getParameters();
@@ -167,7 +173,7 @@ public abstract class AbstractInjectionT
     public Set<ObserverMethod<?>> defineObserverMethods(InjectionTargetBean<T> bean)
     {   
         Set<ObserverMethod<?>> definedObservers = new HashSet<ObserverMethod<?>>();
-        Set<AnnotatedMethod<? super T>> annotatedMethods = getAnnotated().getMethods();    
+        Set<AnnotatedMethod<? super T>> annotatedMethods = annotatedType.getMethods();    
         for (AnnotatedMethod<? super T> annotatedMethod : annotatedMethods)
         {
             AnnotatedMethod<T> annt = (AnnotatedMethod<T>)annotatedMethod;
@@ -194,7 +200,7 @@ public abstract class AbstractInjectionT
                      Reception reception = observes.notifyObserver();
                      if(reception.equals(Reception.IF_EXISTS))
                      {
-                         throw new WebBeansConfigurationException("Dependent Bean : " + getBeanType() + " can not define observer method with @Receiver = IF_EXIST");
+                         throw new WebBeansConfigurationException("Dependent Bean : " + annotatedType.getJavaClass() + " can not define observer method with @Receiver = IF_EXIST");
                      }
                 }
                 
@@ -244,10 +250,10 @@ public abstract class AbstractInjectionT
     public Set<ProducerFieldBean<?>> defineProducerFields(InjectionTargetBean<T> bean)
     {
         Set<ProducerFieldBean<?>> producerBeans = new HashSet<ProducerFieldBean<?>>();
-        Set<AnnotatedField<? super T>> annotatedFields = getAnnotated().getFields();        
+        Set<AnnotatedField<? super T>> annotatedFields = annotatedType.getFields();        
         for(AnnotatedField<? super T> annotatedField: annotatedFields)
         {
-            if(annotatedField.isAnnotationPresent(Produces.class) && annotatedField.getDeclaringType().equals(getAnnotated()))
+            if(annotatedField.isAnnotationPresent(Produces.class) && annotatedField.getDeclaringType().equals(annotatedType))
             {
                 Type genericType = annotatedField.getBaseType();
                 
@@ -275,7 +281,7 @@ public abstract class AbstractInjectionT
                     //WebBeansUtil.checkForValidResources(annotatedField.getDeclaringType().getJavaClass(), field.getType(), field.getName(), anns);
                     if(!Modifier.isStatic(field.getModifiers()))
                     {
-                        ResourceReference<T, Annotation> resourceRef = new ResourceReference<T, Annotation>(getBeanType(), field.getName(),
+                        ResourceReference<T, Annotation> resourceRef = new ResourceReference<T, Annotation>(annotatedType.getJavaClass(), field.getName(),
                                                                                                             (Class<T>)field.getType(), resourceAnnotation);
                         
                         //Can not define EL name
@@ -302,8 +308,8 @@ public abstract class AbstractInjectionT
                     BeanAttributesImpl<T> beanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes((AnnotatedField<T>)annotatedField).build();
                     ProducerFieldBeanBuilder<T, ProducerFieldBean<T>> producerFieldBeanCreator
                         = new ProducerFieldBeanBuilder<T, ProducerFieldBean<T>>(bean, annotatedField, beanAttributes);
-                    producerFieldBeanCreator.checkUnproxiableApiType();
                     ProducerFieldBean<T> producerFieldBean = producerFieldBeanCreator.getBean();
+                    webBeansContext.getDeploymentValidationService().validateProxyable(producerFieldBean);
                     producerFieldBean.setProducer(new ProducerFieldProducer(bean, annotatedField, producerFieldBean.getInjectionPoints()));
                     producerFieldBean.setProducerField(field);
 
@@ -324,11 +330,11 @@ public abstract class AbstractInjectionT
     public Set<ProducerMethodBean<?>> defineProducerMethods(InjectionTargetBean<T> bean)
     {
         Set<ProducerMethodBean<?>> producerBeans = new HashSet<ProducerMethodBean<?>>();
-        Set<AnnotatedMethod<? super T>> annotatedMethods = getAnnotated().getMethods();
+        Set<AnnotatedMethod<? super T>> annotatedMethods = annotatedType.getMethods();
         
         for(AnnotatedMethod<? super T> annotatedMethod: annotatedMethods)
         {
-            if(annotatedMethod.isAnnotationPresent(Produces.class) && annotatedMethod.getDeclaringType().equals(getAnnotated()))
+            if(annotatedMethod.isAnnotationPresent(Produces.class) && annotatedMethod.getDeclaringType().equals(annotatedType))
             {
                 checkProducerMethodForDeployment(annotatedMethod);
                 boolean specialize = false;
@@ -345,10 +351,10 @@ public abstract class AbstractInjectionT
                 BeanAttributesImpl<T> beanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes((AnnotatedMethod<T>)annotatedMethod).build();
                 ProducerMethodBeanBuilder<T> producerMethodBeanCreator = new ProducerMethodBeanBuilder<T>(bean, annotatedMethod, beanAttributes);
                 
-                producerMethodBeanCreator.checkUnproxiableApiType();
-
                 ProducerMethodBean<T> producerMethodBean = producerMethodBeanCreator.getBean();
                 
+                webBeansContext.getDeploymentValidationService().validateProxyable(producerMethodBean);
+
                 if(specialize)
                 {
                     producerMethodBeanCreator.configureProducerSpecialization(producerMethodBean, (AnnotatedMethod<T>) annotatedMethod);
@@ -401,7 +407,6 @@ public abstract class AbstractInjectionT
 
     protected abstract I createBean(Class<T> beanClass, boolean enabled);
 
-    @Override
     protected final I createBean(Class<T> beanClass)
     {
         I bean =  createBean(beanClass, enabled);
@@ -417,7 +422,7 @@ public abstract class AbstractInjectionT
     protected List<AnnotatedMethod<?>> getPostConstructMethods()
     {
         List<AnnotatedMethod<?>> postConstructMethods = new ArrayList<AnnotatedMethod<?>>();
-        collectPostConstructMethods(getAnnotated().getJavaClass(), postConstructMethods);
+        collectPostConstructMethods(annotatedType.getJavaClass(), postConstructMethods);
         return postConstructMethods;
     }
 
@@ -428,7 +433,7 @@ public abstract class AbstractInjectionT
             return;
         }
         collectPostConstructMethods(type.getSuperclass(), postConstructMethods);
-        for (AnnotatedMethod<?> annotatedMethod: getAnnotated().getMethods())
+        for (AnnotatedMethod<?> annotatedMethod: annotatedType.getMethods())
         {
             if (annotatedMethod.getJavaMember().getDeclaringClass() == type
                 && annotatedMethod.isAnnotationPresent(PostConstruct.class)
@@ -442,7 +447,7 @@ public abstract class AbstractInjectionT
     protected List<AnnotatedMethod<?>> getPreDestroyMethods()
     {
         List<AnnotatedMethod<?>> preDestroyMethods = new ArrayList<AnnotatedMethod<?>>();
-        collectPreDestroyMethods(getAnnotated().getJavaClass(), preDestroyMethods);
+        collectPreDestroyMethods(annotatedType.getJavaClass(), preDestroyMethods);
         return preDestroyMethods;
     }
 
@@ -453,7 +458,7 @@ public abstract class AbstractInjectionT
             return;
         }
         collectPreDestroyMethods(type.getSuperclass(), preDestroyMethods);
-        for (AnnotatedMethod<?> annotatedMethod: getAnnotated().getMethods())
+        for (AnnotatedMethod<?> annotatedMethod: annotatedType.getMethods())
         {
             if (annotatedMethod.getJavaMember().getDeclaringClass() == type
                 && annotatedMethod.isAnnotationPresent(PreDestroy.class)
@@ -471,20 +476,13 @@ public abstract class AbstractInjectionT
 
     public void defineEnabled()
     {
-        enabled = webBeansContext.getWebBeansUtil().isBeanEnabled(getAnnotated(), getBeanType(), getBeanAttributes().getStereotypes());
-    }
-
-    @Override
-    protected Class<T> getBeanType()
-    {
-        return getAnnotated().getJavaClass();
+        enabled = webBeansContext.getWebBeansUtil().isBeanEnabled(annotatedType, annotatedType.getJavaClass(), beanAttributes.getStereotypes());
     }
     
-    @Override
     public I getBean()
     {
-        I bean = super.getBean();
-        for (InjectionPoint injectionPoint: webBeansContext.getInjectionPointFactory().buildInjectionPoints(bean, getAnnotated()))
+        I bean = createBean(annotatedType.getJavaClass());
+        for (InjectionPoint injectionPoint: webBeansContext.getInjectionPointFactory().buildInjectionPoints(bean, annotatedType))
         {
             bean.addInjectionPoint(injectionPoint);
         }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java?rev=1438223&r1=1438222&r2=1438223&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractProducerBeanBuilder.java Thu Jan 24 22:07:12 2013
@@ -24,21 +24,28 @@ import javax.enterprise.inject.spi.Annot
 import org.apache.webbeans.component.AbstractProducerBean;
 import org.apache.webbeans.component.BeanAttributesImpl;
 import org.apache.webbeans.component.InjectionTargetBean;
+import org.apache.webbeans.util.Asserts;
 
-public abstract class AbstractProducerBeanBuilder<T, A extends AnnotatedMember<?>, P extends AbstractProducerBean<T>> extends AbstractBeanBuilder<T, A, P>
+public abstract class AbstractProducerBeanBuilder<T, A extends AnnotatedMember<?>, P extends AbstractProducerBean<T>>
 {
 
-    private InjectionTargetBean<?> parent;
+    protected final InjectionTargetBean<?> parent;
+    protected final A annotatedMember;
+    protected final BeanAttributesImpl<T> beanAttributes;
 
     public AbstractProducerBeanBuilder(InjectionTargetBean<?> parent, A annotated, BeanAttributesImpl<T> beanAttributes)
     {
-        super(parent.getWebBeansContext(), annotated, beanAttributes);
+        Asserts.assertNotNull(parent, "webBeansContext may not be null");
+        Asserts.assertNotNull(annotated, "annotated may not be null");
+        Asserts.assertNotNull(beanAttributes, "beanAttributes may not be null");
         this.parent = parent;
+        this.annotatedMember = annotated;
+        this.beanAttributes = beanAttributes;
     }
 
     protected AnnotatedType<?> getSuperType()
     {
-        Class<?> superclass = getAnnotated().getDeclaringType().getJavaClass().getSuperclass();
+        Class<?> superclass = annotatedMember.getDeclaringType().getJavaClass().getSuperclass();
         if (superclass == null)
         {
             return null;
@@ -48,7 +55,6 @@ public abstract class AbstractProducerBe
 
     protected abstract P createBean(InjectionTargetBean<?> parent, Class<T> beanClass);
 
-    @Override
     protected P createBean(Class<T> beanClass)
     {
         return createBean(parent, beanClass);

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AnnotatedTypeBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AnnotatedTypeBeanBuilder.java?rev=1438223&r1=1438222&r2=1438223&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AnnotatedTypeBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AnnotatedTypeBeanBuilder.java Thu Jan 24 22:07:12 2013
@@ -51,7 +51,7 @@ public class AnnotatedTypeBeanBuilder<T>
         catch(Exception e)
         {
             // if no constructor could be found, we just leave the empty set.
-            logger.log(Level.INFO, OWBLogConst.WARN_0012, getAnnotated().getJavaClass());
+            logger.log(Level.INFO, OWBLogConst.WARN_0012, annotatedType.getJavaClass());
         }
     }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java?rev=1438223&r1=1438222&r2=1438223&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java Thu Jan 24 22:07:12 2013
@@ -55,15 +55,15 @@ public class CdiInterceptorBeanBuilder<T
 
     public boolean isInterceptorEnabled()
     {
-        return webBeansContext.getInterceptorsManager().isInterceptorClassEnabled(getBeanType());
+        return webBeansContext.getInterceptorsManager().isInterceptorClassEnabled(annotatedType.getJavaClass());
     }
 
     protected void defineInterceptorBindings()
     {
-        Annotation[] bindings = webBeansContext.getAnnotationManager().getInterceptorBindingMetaAnnotations(getAnnotated().getAnnotations());
+        Annotation[] bindings = webBeansContext.getAnnotationManager().getInterceptorBindingMetaAnnotations(annotatedType.getAnnotations());
         if (bindings == null || bindings.length == 0)
         {
-            throw new WebBeansConfigurationException("WebBeans Interceptor class : " + getBeanType()
+            throw new WebBeansConfigurationException("WebBeans Interceptor class : " + annotatedType.getJavaClass()
                     + " must have at least one @InterceptorBinding annotation");
         }
 
@@ -73,6 +73,6 @@ public class CdiInterceptorBeanBuilder<T
     @Override
     protected CdiInterceptorBean<T> createBean(Class<T> beanClass, boolean enabled, Map<InterceptionType, Method[]> interceptionMethods)
     {
-        return new CdiInterceptorBean<T>(webBeansContext, getAnnotated(), getBeanAttributes(), beanClass, interceptorBindings, enabled, interceptionMethods);
+        return new CdiInterceptorBean<T>(webBeansContext, annotatedType, beanAttributes, beanClass, interceptorBindings, enabled, interceptionMethods);
     }
 }

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=1438223&r1=1438222&r2=1438223&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 Thu Jan 24 22:07:12 2013
@@ -106,24 +106,24 @@ public class DecoratorBeanBuilder<T> ext
      */
     public boolean isDecoratorEnabled()
     {
-        return webBeansContext.getDecoratorsManager().isDecoratorEnabled(getBeanType());
+        return webBeansContext.getDecoratorsManager().isDecoratorEnabled(annotatedType.getJavaClass());
     }
 
     protected void checkDecoratorConditions()
     {
-        if(getBeanAttributes().getScope() != Dependent.class)
+        if (beanAttributes.getScope() != Dependent.class)
         {
             if(logger.isLoggable(Level.WARNING))
             {
-                logger.log(Level.WARNING, OWBLogConst.WARN_0005_1, getBeanType().getName());
+                logger.log(Level.WARNING, OWBLogConst.WARN_0005_1, annotatedType.getJavaClass().getName());
             }
         }
 
-        if(getBeanAttributes().getName() != null)
+        if (beanAttributes.getName() != null)
         {
             if(logger.isLoggable(Level.WARNING))
             {
-                logger.log(Level.WARNING, OWBLogConst.WARN_0005_2, getBeanType().getName());
+                logger.log(Level.WARNING, OWBLogConst.WARN_0005_2, annotatedType.getJavaClass().getName());
             }
         }
 
@@ -140,10 +140,10 @@ public class DecoratorBeanBuilder<T> ext
 
         if (logger.isLoggable(Level.FINE))
         {
-            logger.log(Level.FINE, "Configuring decorator class : [{0}]", getBeanType());
+            logger.log(Level.FINE, "Configuring decorator class : [{0}]", annotatedType.getJavaClass());
         }
 
-        Set<AnnotatedMethod<? super T>> methods = getAnnotated().getMethods();
+        Set<AnnotatedMethod<? super T>> methods = annotatedType.getMethods();
         for(AnnotatedMethod method : methods)
         {
             List<AnnotatedParameter> parms = method.getParameters();
@@ -151,7 +151,7 @@ public class DecoratorBeanBuilder<T> ext
             {
                 if (parameter.isAnnotationPresent(Produces.class))
                 {
-                    throw new WebBeansConfigurationException("Interceptor class : " + getBeanType()
+                    throw new WebBeansConfigurationException("Interceptor class : " + annotatedType.getJavaClass()
                             + " can not have producer methods but it has one with name : "
                             + method.getJavaMember().getName());
                 }
@@ -170,7 +170,7 @@ public class DecoratorBeanBuilder<T> ext
 
     private void defineDecoratedTypes()
     {
-        Class<T> beanClass = getBeanType();
+        Class<T> beanClass = annotatedType.getJavaClass();
 
         // determine a safe Type for for a later BeanManager.getReference(...)
         if (ClassUtil.isDefinitionContainsTypeVariables(beanClass))
@@ -291,7 +291,7 @@ public class DecoratorBeanBuilder<T> ext
     @Override
     protected DecoratorBean<T> createBean(Class<T> beanClass, boolean enabled)
     {
-        DecoratorBean<T> decorator = new DecoratorBean<T>(webBeansContext, WebBeansType.MANAGED, getAnnotated(), getBeanAttributes(), beanClass);
+        DecoratorBean<T> decorator = new DecoratorBean<T>(webBeansContext, WebBeansType.MANAGED, annotatedType, beanAttributes, beanClass);
         decorator.setEnabled(enabled);
         return decorator;
     }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java?rev=1438223&r1=1438222&r2=1438223&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java Thu Jan 24 22:07:12 2013
@@ -55,6 +55,6 @@ public class EjbInterceptorBeanBuilder<T
     @Override
     protected EjbInterceptorBean<T> createBean(Class<T> beanClass, boolean enabled, Map<InterceptionType, Method[]> interceptionMethods)
     {
-        return new EjbInterceptorBean<T>(webBeansContext, getAnnotated(), getBeanAttributes(), beanClass, interceptionMethods);
+        return new EjbInterceptorBean<T>(webBeansContext, annotatedType, beanAttributes, beanClass, interceptionMethods);
     }
 }

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=1438223&r1=1438222&r2=1438223&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 Thu Jan 24 22:07:12 2013
@@ -102,7 +102,7 @@ public abstract class InterceptorBeanBui
 
     protected void checkInterceptorConditions()
     {
-        Set<AnnotatedMethod<? super T>> methods = getAnnotated().getMethods();
+        Set<AnnotatedMethod<? super T>> methods = annotatedType.getMethods();
         for(AnnotatedMethod method : methods)
         {
             List<AnnotatedParameter> parms = method.getParameters();
@@ -110,7 +110,7 @@ public abstract class InterceptorBeanBui
             {
                 if (parameter.isAnnotationPresent(Produces.class))
                 {
-                    throw new WebBeansConfigurationException("Interceptor class : " + getBeanType()
+                    throw new WebBeansConfigurationException("Interceptor class : " + annotatedType.getJavaClass()
                             + " can not have producer methods but it has one with name : "
                             + method.getJavaMember().getName());
                 }
@@ -144,7 +144,7 @@ public abstract class InterceptorBeanBui
      */
     public boolean defineInterceptorMethods()
     {
-        List<Class> classHierarchy = webBeansContext.getInterceptorUtil().getReverseClassHierarchy(getAnnotated().getJavaClass());
+        List<Class> classHierarchy = webBeansContext.getInterceptorUtil().getReverseClassHierarchy(annotatedType.getJavaClass());
 
         AnnotatedMethod aroundInvokeMethod = null;
         List<AnnotatedMethod> postConstructMethods = new ArrayList<AnnotatedMethod>();
@@ -157,7 +157,7 @@ public abstract class InterceptorBeanBui
 
         boolean interceptorFound = false;
 
-        Set<AnnotatedMethod<? super T>> methods = getAnnotated().getMethods();
+        Set<AnnotatedMethod<? super T>> methods = annotatedType.getMethods();
 
         for (Class clazz : classHierarchy)
         {

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=1438223&r1=1438222&r2=1438223&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 24 22:07:12 2013
@@ -52,19 +52,6 @@ public class ManagedBeanBuilder<T, M ext
         super(webBeansContext, annotatedType, beanAttributes);
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void checkCreateConditions()
-    {
-        webBeansContext.getWebBeansUtil().checkManagedBeanCondition(getAnnotated());
-        WebBeansUtil.checkGenericType(getBeanType(), getBeanAttributes().getScope());
-        //Check Unproxiable
-        checkUnproxiableApiType();
-    }
-
-
     public void defineConstructor()
     {
         constructor = getBeanConstructor();
@@ -76,6 +63,9 @@ public class ManagedBeanBuilder<T, M ext
     public M getBean()
     {
         M bean = super.getBean();
+        webBeansContext.getWebBeansUtil().checkManagedBeanCondition(annotatedType);
+        WebBeansUtil.checkGenericType(annotatedType.getJavaClass(), beanAttributes.getScope());
+        webBeansContext.getDeploymentValidationService().validateProxyable(bean);
         addConstructorInjectionPointMetaData(bean);
         return bean;
     }
@@ -86,8 +76,6 @@ public class ManagedBeanBuilder<T, M ext
         //Check for Enabled via Alternative
         defineEnabled();
 
-        checkCreateConditions();
-
         defineConstructor();
 
         return getBean();
@@ -96,13 +84,13 @@ public class ManagedBeanBuilder<T, M ext
     @Override
     protected List<AnnotatedMethod<?>> getPostConstructMethods()
     {
-        return webBeansContext.getInterceptorUtil().getLifecycleMethods(getAnnotated(), PostConstruct.class, true);
+        return webBeansContext.getInterceptorUtil().getLifecycleMethods(annotatedType, PostConstruct.class, true);
     }
 
     @Override
     protected List<AnnotatedMethod<?>> getPreDestroyMethods()
     {
-        return webBeansContext.getInterceptorUtil().getLifecycleMethods(getAnnotated(), PreDestroy.class, false);
+        return webBeansContext.getInterceptorUtil().getLifecycleMethods(annotatedType, PreDestroy.class, false);
     }
 
     protected void addConstructorInjectionPointMetaData(ManagedBean<T> bean)
@@ -118,7 +106,7 @@ public class ManagedBeanBuilder<T, M ext
     @Override
     protected M createBean(Class<T> beanClass, boolean enabled)
     {
-        M managedBean = (M)new ManagedBean<T>(webBeansContext, WebBeansType.MANAGED, getAnnotated(), getBeanAttributes(), beanClass);
+        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/component/creation/ProducerFieldBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java?rev=1438223&r1=1438222&r2=1438223&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java Thu Jan 24 22:07:12 2013
@@ -31,16 +31,10 @@ public class ProducerFieldBeanBuilder<T,
     {
         super(owner, annotated, beanAttributes);
     }
-    
-    @Override
-    protected Class<T> getBeanType()
-    {
-        return (Class<T>) getAnnotated().getJavaMember().getType();
-    }
 
     protected AnnotatedField<?> getSuperAnnotated()
     {
-        AnnotatedField<?> thisField = getAnnotated();
+        AnnotatedField<?> thisField = annotatedMember;
         for (AnnotatedField<?> superField: getSuperType().getFields())
         {
             if (thisField.getJavaMember().getName().equals(superField.getJavaMember().getName())
@@ -55,6 +49,11 @@ public class ProducerFieldBeanBuilder<T,
     @Override
     protected P createBean(InjectionTargetBean<?> owner, Class<T> beanClass)
     {
-        return (P) new ProducerFieldBean<T>(owner, getBeanAttributes(), beanClass);
+        return (P) new ProducerFieldBean<T>(owner, beanAttributes, beanClass);
+    }
+    
+    public P getBean()
+    {
+        return createBean((Class<T>) annotatedMember.getJavaMember().getType());
     }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java?rev=1438223&r1=1438222&r2=1438223&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java Thu Jan 24 22:07:12 2013
@@ -85,7 +85,7 @@ public class ProducerMethodBeanBuilder<T
     
     protected AnnotatedMethod<?> getSuperAnnotated()
     {
-        AnnotatedMethod<?> thisMethod = getAnnotated();
+        AnnotatedMethod<?> thisMethod = annotatedMember;
         for (AnnotatedMethod<?> superMethod: getSuperType().getMethods())
         {
             List<AnnotatedParameter<?>> thisParameters = (List<AnnotatedParameter<?>>)(List<?>)thisMethod.getParameters();
@@ -113,16 +113,15 @@ public class ProducerMethodBeanBuilder<T
     }
 
     @Override
-    protected Class<T> getBeanType()
-    {
-        return (Class<T>) getAnnotated().getJavaMember().getReturnType();
-    }
-
-    @Override
     protected ProducerMethodBean<T> createBean(InjectionTargetBean<?> parent, Class<T> beanClass)
     {
-        ProducerMethodBean<T> producerMethodBean = new ProducerMethodBean<T>(parent, getBeanAttributes(), beanClass);
+        ProducerMethodBean<T> producerMethodBean = new ProducerMethodBean<T>(parent, beanAttributes, beanClass);
         producerMethodBean.setSpecializedBean(specialized);
         return producerMethodBean;
     }
+    
+    public ProducerMethodBean<T> getBean()
+    {
+        return createBean((Class<T>) annotatedMember.getJavaMember().getReturnType());
+    }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java?rev=1438223&r1=1438222&r2=1438223&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java Thu Jan 24 22:07:12 2013
@@ -41,6 +41,6 @@ public class ResourceBeanBuilder<T, R ex
     @Override
     protected ResourceBean<T, R> createBean(InjectionTargetBean<?> owner, Class<T> beanClass)
     {
-        return new ResourceBean<T, R>(owner, resourceRef, getBeanAttributes(), beanClass);
+        return new ResourceBean<T, R>(owner, resourceRef, beanAttributes, beanClass);
     }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java?rev=1438223&r1=1438222&r2=1438223&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java Thu Jan 24 22:07:12 2013
@@ -60,6 +60,6 @@ public class SelfInterceptorBeanBuilder<
     @Override
     protected SelfInterceptorBean<T> createBean(Class<T> beanClass, boolean enabled, Map<InterceptionType, Method[]> interceptionMethods)
     {
-        return new SelfInterceptorBean<T>(webBeansContext, getAnnotated(), getBeanAttributes(), beanClass, interceptionMethods);
+        return new SelfInterceptorBean<T>(webBeansContext, annotatedType, beanAttributes, beanClass, interceptionMethods);
     }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DeploymentValidationService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DeploymentValidationService.java?rev=1438223&r1=1438222&r2=1438223&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DeploymentValidationService.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DeploymentValidationService.java Thu Jan 24 22:07:12 2013
@@ -18,6 +18,11 @@
  */
 package org.apache.webbeans.config;
 
+import static org.apache.webbeans.util.InjectionExceptionUtil.throwUnproxyableResolutionException;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 import java.util.Set;
 
 import javax.enterprise.inject.Disposes;
@@ -30,8 +35,10 @@ import javax.enterprise.inject.spi.Passi
 import org.apache.webbeans.component.OwbBean;
 import org.apache.webbeans.component.ProducerMethodBean;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
+import org.apache.webbeans.exception.helper.ViolationMessageBuilder;
 import org.apache.webbeans.intercept.InterceptorResolutionService.BeanInterceptorInfo;
 import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.util.SecurityUtil;
 
 public class DeploymentValidationService
 {
@@ -44,6 +51,70 @@ public class DeploymentValidationService
     }
 
     /**
+     * Checks the unproxiable condition.
+     * @throws org.apache.webbeans.exception.WebBeansConfigurationException if bean is not proxied by the container
+     */
+    public void validateProxyable(OwbBean<?> bean)
+    {
+        //Unproxiable test for NormalScoped beans
+        if (webBeansContext.getBeanManagerImpl().isNormalScope(bean.getScope()))
+        {
+            ViolationMessageBuilder violationMessage = ViolationMessageBuilder.newViolation();
+
+            Class<?> beanClass = bean.getReturnType();
+            
+            if(!beanClass.isInterface() && beanClass != Object.class)
+            {
+                if(beanClass.isPrimitive())
+                {
+                    violationMessage.addLine("It isn't possible to proxy a primitive type (" + beanClass.getName(), ")");
+                }
+
+                if(beanClass.isArray())
+                {
+                    violationMessage.addLine("It isn't possible to proxy an array type (", beanClass.getName(), ")");
+                }
+
+                if(!violationMessage.containsViolation())
+                {
+                    if (Modifier.isFinal(beanClass.getModifiers()))
+                    {
+                        violationMessage.addLine(beanClass.getName(), " is a final class! CDI doesn't allow to proxy that.");
+                    }
+
+                    Method[] methods = SecurityUtil.doPrivilegedGetDeclaredMethods(beanClass);
+                    for (Method m : methods)
+                    {
+                        int modifiers = m.getModifiers();
+                        if (Modifier.isFinal(modifiers) && !Modifier.isPrivate(modifiers) &&
+                            !m.isSynthetic() && !m.isBridge())
+                        {
+                            violationMessage.addLine(beanClass.getName(), " has final method "+ m + " CDI doesn't allow to proxy that.");
+                        }
+                    }
+
+                    Constructor<?> cons = webBeansContext.getWebBeansUtil().getNoArgConstructor(beanClass);
+                    if (cons == null)
+                    {
+                        violationMessage.addLine(beanClass.getName(), " has no explicit no-arg constructor!",
+                                "A public or protected constructor without args is required!");
+                    }
+                    else if (Modifier.isPrivate(cons.getModifiers()))
+                    {
+                        violationMessage.addLine(beanClass.getName(), " has a >private< no-arg constructor! CDI doesn't allow to proxy that.");
+                    }
+                }
+
+                //Throw Exception
+                if(violationMessage.containsViolation())
+                {
+                    throwUnproxyableResolutionException(violationMessage);
+                }
+            }
+        }
+    }
+
+    /**
      * If bean is passivation capable, it validate all of its dependencies.
      * @throws org.apache.webbeans.exception.WebBeansConfigurationException if not satisfy passivation dependencies
      */

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=1438223&r1=1438222&r2=1438223&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 Thu Jan 24 22:07:12 2013
@@ -1599,7 +1599,6 @@ public final class WebBeansUtil
 
         //Check for Enabled via Alternative
         setInjectionTargetBeanEnableFlag(managedBeanCreator.getBean());
-        managedBeanCreator.checkCreateConditions();
         managedBeanCreator.defineConstructor();
         ManagedBean<T> managedBean = managedBeanCreator.getBean();
         managedBeanCreator.defineProducerMethods(managedBean);
@@ -1731,7 +1730,6 @@ public final class WebBeansUtil
 
         //Check for Enabled via Alternative
         managedBeanCreator.defineEnabled();
-        managedBeanCreator.checkCreateConditions();
         managedBeanCreator.defineConstructor();
         ManagedBean<T> managedBean = managedBeanCreator.getBean();
         managedBeanCreator.defineProducerMethods(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=1438223&r1=1438222&r2=1438223&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 24 22:07:12 2013
@@ -525,7 +525,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.checkCreateConditions();
         managedBeanCreator.defineEnabled();
         managedBeanCreator.defineConstructor();
         ManagedBean<T> component = managedBeanCreator.getBean();