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/09/07 16:41:49 UTC
svn commit: r1623030 -
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
Author: rmannibucau
Date: Sun Sep 7 14:41:49 2014
New Revision: 1623030
URL: http://svn.apache.org/r1623030
Log:
ensure programmatic decorators have a delegate injection point
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java?rev=1623030&r1=1623029&r2=1623030&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java Sun Sep 7 14:41:49 2014
@@ -24,6 +24,8 @@ import javax.enterprise.inject.spi.After
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.Decorator;
+import javax.enterprise.inject.spi.DefinitionException;
+import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.inject.spi.Interceptor;
import javax.enterprise.inject.spi.ObserverMethod;
import javax.enterprise.inject.spi.ProcessBean;
@@ -44,14 +46,14 @@ import java.util.logging.Logger;
/**
* Event that is fired by the container after it discovers beans.
- *
+ *
* @version $Rev$ $Date$
*
*/
public class AfterBeanDiscoveryImpl implements AfterBeanDiscovery
{
private BeanManagerImpl beanManager = null;
-
+
private static final Logger logger = WebBeansLoggerFacade.getLogger(AfterBeanDiscoveryImpl.class);
private final WebBeansContext webBeansContext;
private Object extension;
@@ -61,7 +63,7 @@ public class AfterBeanDiscoveryImpl impl
this.webBeansContext = webBeansContext;
beanManager = this.webBeansContext.getBeanManagerImpl();
}
-
+
/**
* {@inheritDoc}
*/
@@ -69,16 +71,16 @@ public class AfterBeanDiscoveryImpl impl
public void addBean(Bean<?> bean)
{
AnnotatedType<?> annotatedType = webBeansContext.getAnnotatedElementFactory().newAnnotatedType(bean.getBeanClass());
-
+
//Fire Event
ProcessBean<?> processBeanEvent = new GProcessBean(bean,annotatedType);
beanManager.fireEvent(processBeanEvent, true, AnnotationUtil.EMPTY_ANNOTATION_ARRAY);
-
+
if(bean instanceof Interceptor)
{
//Required for custom interceptors
webBeansContext.getWebBeansUtil().defineManagedBeanWithoutFireEvents((AnnotatedType<?>) annotatedType);
-
+
Interceptor<?> interceptor = (Interceptor<?>)bean;
if(interceptor.getScope() != Dependent.class)
{
@@ -87,7 +89,7 @@ public class AfterBeanDiscoveryImpl impl
logger.log(Level.WARNING, OWBLogConst.WARN_0005_1, interceptor.getBeanClass().getName());
}
}
-
+
if(interceptor.getName() != null)
{
if(logger.isLoggable(Level.WARNING))
@@ -95,20 +97,20 @@ public class AfterBeanDiscoveryImpl impl
logger.log(Level.WARNING, OWBLogConst.WARN_0005_2, interceptor.getBeanClass().getName());
}
}
-
+
if(interceptor.isAlternative())
{
if(logger.isLoggable(Level.WARNING))
{
logger.log(Level.WARNING, OWBLogConst.WARN_0005_3, interceptor.getBeanClass().getName());
- }
+ }
}
InterceptorsManager interceptorsManager = webBeansContext.getInterceptorsManager();
interceptorsManager.addCdiInterceptor(interceptor);
interceptorsManager.addCustomInterceptorClass(bean.getBeanClass());
}
-
+
else if(bean instanceof Decorator)
{
//Required for custom decorators
@@ -122,7 +124,7 @@ public class AfterBeanDiscoveryImpl impl
logger.log(Level.WARNING, OWBLogConst.WARN_0005_1, managedBean.getBeanClass().getName());
}
}
-
+
if(managedBean.getName() != null)
{
if(logger.isLoggable(Level.WARNING))
@@ -130,15 +132,29 @@ public class AfterBeanDiscoveryImpl impl
logger.log(Level.WARNING, OWBLogConst.WARN_0005_2, managedBean.getBeanClass().getName());
}
}
-
+
if(managedBean.isAlternative())
{
if(logger.isLoggable(Level.WARNING))
{
logger.log(Level.WARNING, OWBLogConst.WARN_0005_3, managedBean.getBeanClass().getName());
- }
+ }
}
+ boolean found = false;
+ for (final InjectionPoint ip : bean.getInjectionPoints())
+ {
+ if (ip.isDelegate())
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ {
+ throw new DefinitionException("Decorators must have a one @Delegate injection point. " +
+ "But the decorator bean : " + managedBean.toString() + " has more than one");
+ }
webBeansContext.getDecoratorsManager().addDecorator((Decorator<?>) bean);
webBeansContext.getDecoratorsManager().addCustomDecoratorClass(bean.getBeanClass());