You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2017/05/31 08:13:10 UTC
svn commit: r1796994 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
component/creation/ event/ inject/impl/ portable/
Author: struberg
Date: Wed May 31 08:13:10 2017
New Revision: 1796994
URL: http://svn.apache.org/viewvc?rev=1796994&view=rev
Log:
OWB-1189 first improvements and checks for Async Events
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BaseProducerFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java?rev=1796994&r1=1796993&r2=1796994&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanBuilder.java Wed May 31 08:13:10 2017
@@ -19,6 +19,7 @@
package org.apache.webbeans.component.creation;
import javax.enterprise.event.Observes;
+import javax.enterprise.event.ObservesAsync;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.AnnotatedField;
@@ -116,9 +117,9 @@ public abstract class AbstractBeanBuilde
for (AnnotatedParameter<?> parameter : annotatedMethod.getParameters())
{
- if (parameter.isAnnotationPresent(Observes.class))
+ if (parameter.isAnnotationPresent(Observes.class) || parameter.isAnnotationPresent(ObservesAsync.class))
{
- throw new WebBeansConfigurationException("This class must not have a @Observes method " + annotatedMethod.getJavaMember());
+ throw new WebBeansConfigurationException("This class must not have an @Observes nor @ObservesAsync method " + annotatedMethod.getJavaMember());
}
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BaseProducerFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BaseProducerFactory.java?rev=1796994&r1=1796993&r2=1796994&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BaseProducerFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BaseProducerFactory.java Wed May 31 08:13:10 2017
@@ -27,6 +27,7 @@ import org.apache.webbeans.util.ClassUti
import org.apache.webbeans.util.GenericsUtil;
import javax.enterprise.event.Observes;
+import javax.enterprise.event.ObservesAsync;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
@@ -197,6 +198,7 @@ public abstract class BaseProducerFactor
if(annotatedMethod.isAnnotationPresent(Inject.class)
|| AnnotationUtil.hasAnnotatedMethodParameterAnnotation(annotatedMethod, Observes.class)
+ || AnnotationUtil.hasAnnotatedMethodParameterAnnotation(annotatedMethod, ObservesAsync.class)
|| annotatedMethod.isAnnotationPresent(Produces.class))
{
throw new WebBeansConfigurationException("Error in definining disposal method of annotated method : " + annotatedMethod
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java?rev=1796994&r1=1796993&r2=1796994&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ObserverMethodsBuilder.java Wed May 31 08:13:10 2017
@@ -25,6 +25,7 @@ import java.util.Set;
import javax.enterprise.context.Dependent;
import javax.enterprise.event.Observes;
+import javax.enterprise.event.ObservesAsync;
import javax.enterprise.event.Reception;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.Disposes;
@@ -77,7 +78,7 @@ public class ObserverMethodsBuilder<T>
AnnotatedParameter<?> observesParameter = null;
for(AnnotatedParameter<?> parameter : parameters)
{
- if(parameter.isAnnotationPresent(Observes.class))
+ if(parameter.isAnnotationPresent(Observes.class) || parameter.isAnnotationPresent(ObservesAsync.class))
{
if (observesParameter != null)
{
@@ -145,8 +146,18 @@ public class ObserverMethodsBuilder<T>
if (bean.getScope().equals(Dependent.class))
{
//Check Reception
+ Reception reception;
Observes observes = annotatedParameter.getAnnotation(Observes.class);
- Reception reception = observes.notifyObserver();
+ if (observes != null)
+ {
+ reception = observes.notifyObserver();
+ }
+ else
+ {
+ ObservesAsync observesAsync = annotatedParameter.getAnnotation(ObservesAsync.class);
+ reception = observesAsync.notifyObserver();
+ }
+
if(reception.equals(Reception.IF_EXISTS))
{
throw new WebBeansConfigurationException("Dependent Bean : " + annotatedType.getJavaClass() + " can not define observer method with @Receiver = IF_EXIST");
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java?rev=1796994&r1=1796993&r2=1796994&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeansBuilder.java Wed May 31 08:13:10 2017
@@ -29,6 +29,7 @@ import org.apache.webbeans.util.Asserts;
import org.apache.webbeans.util.WebBeansUtil;
import javax.enterprise.event.Observes;
+import javax.enterprise.event.ObservesAsync;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.Specializes;
@@ -139,7 +140,8 @@ public class ProducerMethodBeansBuilder<
if (annotatedMethod.isAnnotationPresent(Inject.class) ||
annotatedMethod.isAnnotationPresent(Disposes.class) ||
- annotatedMethod.isAnnotationPresent(Observes.class))
+ annotatedMethod.isAnnotationPresent(Observes.class) ||
+ annotatedMethod.isAnnotationPresent(ObservesAsync.class))
{
throw new WebBeansConfigurationException("Producer annotated method : " + annotatedMethod + " can not be annotated with"
+ " @Initializer/@Destructor annotation or has a parameter annotated with @Disposes/@Observes");
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1796994&r1=1796993&r2=1796994&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java Wed May 31 08:13:10 2017
@@ -38,6 +38,7 @@ import javax.enterprise.context.Dependen
import javax.enterprise.context.spi.Context;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Observes;
+import javax.enterprise.event.ObservesAsync;
import javax.enterprise.event.Reception;
import javax.enterprise.event.TransactionPhase;
import javax.enterprise.inject.spi.AnnotatedMethod;
@@ -115,6 +116,8 @@ public class ObserverMethodImpl<T> imple
private AnnotatedParameter<T> annotatedObservesParameter;
private int priority = ObserverMethod.DEFAULT_PRIORITY;
+
+ private boolean isAsync = false;
private static class ObserverParams
{
@@ -139,8 +142,25 @@ public class ObserverMethodImpl<T> imple
this.annotatedObserverMethod = annotatedObserverMethod;
observedEventType = annotatedObservesParameter.getBaseType();
Observes observes = annotatedObservesParameter.getAnnotation(Observes.class);
- ifExist = observes.notifyObserver() == Reception.IF_EXISTS;
- phase = observes.during();
+
+ Class<? extends Annotation> observerAnnotation;
+
+ if (observes != null)
+ {
+ ifExist = observes.notifyObserver() == Reception.IF_EXISTS;
+ phase = observes.during();
+ observerAnnotation = Observes.class;
+ }
+ else
+ {
+ ObservesAsync observesAsync = annotatedObservesParameter.getAnnotation(ObservesAsync.class);
+ ifExist = observesAsync.notifyObserver() == Reception.IF_EXISTS;
+ phase = TransactionPhase.IN_PROGRESS;
+ observerAnnotation = ObservesAsync.class;
+
+ isAsync = true;
+ }
+
observedQualifiers = new HashSet<Annotation>();
for (Annotation annotation: annotatedObservesParameter.getAnnotations())
{
@@ -167,10 +187,10 @@ public class ObserverMethodImpl<T> imple
view = annotatedObserverMethod.getJavaMember();
}
- injectionPoints = new LinkedHashSet<InjectionPoint>();
+ injectionPoints = new LinkedHashSet<>();
for (AnnotatedParameter<?> parameter: annotatedObserverMethod.getParameters())
{
- if (!parameter.isAnnotationPresent(Observes.class))
+ if (!parameter.isAnnotationPresent(observerAnnotation))
{
Collection<Annotation> qualifierAnnots = getWebBeansContext().getAnnotationManager().getQualifierAnnotations(parameter.getAnnotations());
@@ -190,6 +210,12 @@ public class ObserverMethodImpl<T> imple
}
@Override
+ public boolean isAsync()
+ {
+ return isAsync;
+ }
+
+ @Override
public int getPriority()
{
return priority;
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java?rev=1796994&r1=1796993&r2=1796994&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/impl/InjectionPointFactory.java Wed May 31 08:13:10 2017
@@ -27,6 +27,7 @@ import org.apache.webbeans.util.Annotati
import org.apache.webbeans.util.Asserts;
import javax.enterprise.event.Observes;
+import javax.enterprise.event.ObservesAsync;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.AnnotatedCallable;
@@ -177,8 +178,8 @@ public class InjectionPointFactory
for (AnnotatedParameter<?> parameter : parameters)
{
- //@Observes is not injection point type for method parameters
- if (parameter.getAnnotation(Observes.class) == null)
+ // @Observes and @ObservesAsync are not injection point type for method parameters
+ if (parameter.getAnnotation(Observes.class) == null && parameter.getAnnotation(ObservesAsync.class) == null)
{
lists.add(buildInjectionPoint(owner, parameter, true));
}
@@ -207,9 +208,10 @@ public class InjectionPointFactory
throw new WebBeansConfigurationException("Constructor parameter annotations can not contain @Disposes annotation in annotated constructor : " + constructor);
}
- if(parameter.isAnnotationPresent(Observes.class))
+ if(parameter.isAnnotationPresent(Observes.class) || parameter.isAnnotationPresent(ObservesAsync.class))
{
- throw new WebBeansConfigurationException("Constructor parameter annotations can not contain @Observes annotation in annotated constructor : " + constructor);
+ throw new WebBeansConfigurationException("Constructor parameter annotations can not contain @Observes nor @ObservesAsync annotation in annotated constructor : "
+ + constructor);
}
}
}
@@ -242,11 +244,12 @@ public class InjectionPointFactory
annotationManager.checkForNewQualifierForDeployment(annotatedParameter.getBaseType(), annotatedMethod.getDeclaringType().getJavaClass(),
method.getName(), AnnotationUtil.asArray(annotatedParameter.getAnnotations()));
- if(annotatedParameter.isAnnotationPresent(Disposes.class) ||
- annotatedParameter.isAnnotationPresent(Observes.class))
+ if (annotatedParameter.isAnnotationPresent(Disposes.class) ||
+ annotatedParameter.isAnnotationPresent(Observes.class) ||
+ annotatedParameter.isAnnotationPresent(ObservesAsync.class))
{
throw new WebBeansConfigurationException("Error in defining injected methods in annotated method : " + annotatedMethod+
- ". Reason : Initializer method parameters does not contain @Observes or @Dispose annotations.");
+ ". Reason : Initializer method parameters does not contain @Observes, @ObservesAsync or @Dispose annotations.");
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java?rev=1796994&r1=1796993&r2=1796994&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionTargetImpl.java Wed May 31 08:13:10 2017
@@ -42,6 +42,7 @@ import org.apache.webbeans.util.Exceptio
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Observes;
+import javax.enterprise.event.ObservesAsync;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.AnnotatedConstructor;
@@ -410,7 +411,7 @@ public class InjectionTargetImpl<T> exte
{
for (Annotation annotation : annotations)
{
- if (annotation.annotationType().equals(Observes.class))
+ if (annotation.annotationType().equals(Observes.class) || annotation.annotationType().equals(ObservesAsync.class))
{
return true;
}