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 <class>
*/
@@ -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);
}
}