You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2014/12/22 13:18:28 UTC

svn commit: r1647297 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/AbstractOwbBean.java component/InjectionTargetBean.java config/BeansDeployer.java inject/AlternativesManager.java

Author: rmannibucau
Date: Mon Dec 22 12:18:27 2014
New Revision: 1647297

URL: http://svn.apache.org/r1647297
Log:
@Alternative can be set through ProcessbeanAttributes. Using lazy validation to be able to stay compatible with all addXmAlternatives usage of our SPI

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AlternativesManager.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java?rev=1647297&r1=1647296&r2=1647297&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java Mon Dec 22 12:18:27 2014
@@ -69,7 +69,7 @@ public abstract class AbstractOwbBean<T>
     /**
      * cached value for {@link #isAlternative()}
      */
-    private Boolean isAlternative = null;
+    protected Boolean isAlternative = null;
 
     /**
      * This string will be used for passivating the Bean.

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java?rev=1647297&r1=1647296&r2=1647297&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java Mon Dec 22 12:18:27 2014
@@ -72,6 +72,7 @@ public class InjectionTargetBean<T> exte
         this.annotatedType = annotatedType;
         injectionTarget = factory.createInjectionTarget(this);
         setEnabled(true);
+        this.isAlternative = beanAttributes.isAlternative();
     }
 
     // call it only if you know what you do, basically only useful when creating a bean manually and not using child classes

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=1647297&r1=1647296&r2=1647297&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 Mon Dec 22 12:18:27 2014
@@ -20,6 +20,7 @@ package org.apache.webbeans.config;
 
 import org.apache.webbeans.annotation.AnnotationManager;
 import org.apache.webbeans.component.AbstractProducerBean;
+import org.apache.webbeans.component.BeanAttributesImpl;
 import org.apache.webbeans.component.BuiltInOwbBean;
 import org.apache.webbeans.component.CdiInterceptorBean;
 import org.apache.webbeans.component.DecoratorBean;
@@ -243,6 +244,7 @@ public class BeansDeployer
                 // create beans from the discovered AnnotatedTypes
                 deployFromAnnotatedTypes(annotatedTypes);
 
+                webBeansContext.getAlternativesManager().failIfSomeAlternativeIsNotResolved();
 
                 //X TODO configure specialized producer beans.
                 webBeansContext.getWebBeansUtil().configureProducerMethodSpecializations();
@@ -1401,13 +1403,18 @@ public class BeansDeployer
 
         {
 
+            final BeanAttributesImpl<T> tBeanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build();
             final BeanAttributes<T> beanAttributes = webBeansContext.getWebBeansUtil().fireProcessBeanAttributes(
                     annotatedType, annotatedType.getJavaClass(),
-                    BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build());
+                    tBeanAttributes);
             if (beanAttributes == null)
             {
                 return;
             }
+            if (!tBeanAttributes.isAlternative() && beanAttributes.isAlternative())
+            {
+                webBeansContext.getAlternativesManager().onProgrammicAlternative(annotatedType.getJavaClass());
+            }
 
             ManagedBeanBuilder<T, ManagedBean<T>> managedBeanCreator = new ManagedBeanBuilder<T, ManagedBean<T>>(webBeansContext, annotatedType, beanAttributes);
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AlternativesManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AlternativesManager.java?rev=1647297&r1=1647296&r2=1647297&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AlternativesManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AlternativesManager.java Mon Dec 22 12:18:27 2014
@@ -55,6 +55,9 @@ public class AlternativesManager
 
     private final WebBeansContext webBeansContext;
 
+    // should always be empty at runtime, mainly used for BeanAttribute#isAlternative() checks
+    private final Set<Class<?>> potentialProgrammaticAlternatives = new HashSet<Class<?>>();
+
     /**
      * All the stereotypes which are configured via XML &lt;class&gt;
      */
@@ -68,14 +71,23 @@ public class AlternativesManager
 
     private final PriorityClasses priorityAlternatives = new PriorityClasses();
 
-
-
     public AlternativesManager(WebBeansContext webBeansContext)
     {
         this.webBeansContext = webBeansContext;
     }
 
+    public void onProgrammicAlternative(final Class<?> clazz)
+    {
+        potentialProgrammaticAlternatives.remove(clazz);
+    }
 
+    public void failIfSomeAlternativeIsNotResolved()
+    {
+        if (!potentialProgrammaticAlternatives.isEmpty())
+        {
+            throw new WebBeansConfigurationException("Specified alternatives: " + potentialProgrammaticAlternatives + " are not annotated with @Alternative");
+        }
+    }
 
     /**
      * This methods gets called while scanning the various beans.xml files.
@@ -99,7 +111,7 @@ public class AlternativesManager
             
             if(!ok)
             {
-                throw new WebBeansConfigurationException("Given stereotype class : " + alternative.getName() + " is not annotated with @Alternative" );
+                throw new WebBeansConfigurationException("Given stereotype class : " + alternative.getName() + " is not an annotation" );
             }
         }
         else
@@ -121,7 +133,7 @@ public class AlternativesManager
         }
         else
         {
-            throw new WebBeansConfigurationException("Given class : " + alternative.getName() + " is not annotated with @Alternative");
+            potentialProgrammaticAlternatives.add(alternative);
         }
     }