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/30 20:44:05 UTC

svn commit: r1796940 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: container/BeanManagerImpl.java event/NotificationManager.java event/ObserverMethodImpl.java

Author: struberg
Date: Tue May 30 20:44:04 2017
New Revision: 1796940

URL: http://svn.apache.org/viewvc?rev=1796940&view=rev
Log:
OWB-1189 implement @Priority for events

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1796940&r1=1796939&r2=1796940&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java Tue May 30 20:44:04 2017
@@ -25,6 +25,8 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -1280,7 +1282,14 @@ public class BeanManagerImpl implements
 
     public <T> Set<ObserverMethod<? super T>> resolveObserverMethods(T event, EventMetadataImpl metadata)
     {
-        return notificationManager.resolveObservers(event, metadata, false);
+        LinkedList<ObserverMethod<? super Object>> observerMethods
+            = new LinkedList<>(notificationManager.resolveObservers(event, metadata, false));
+
+        // new in CDI-2.0: sort observers
+        Collections.sort(observerMethods,
+            (ObserverMethod o1, ObserverMethod o2) -> Integer.compare(o1.getPriority(), o2.getPriority()));
+
+        return new LinkedHashSet<>(observerMethods);
     }
 
     @Override

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java?rev=1796940&r1=1796939&r2=1796940&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java Tue May 30 20:44:04 2017
@@ -26,7 +26,9 @@ import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -633,7 +635,12 @@ public final class NotificationManager
             throw new IllegalArgumentException("Firing container events is forbidden");
         }
 
-        Set<ObserverMethod<? super Object>> observerMethods = resolveObservers(event, metadata, isLifecycleEvent);
+        LinkedList<ObserverMethod<? super Object>> observerMethods = new LinkedList<>(resolveObservers(event, metadata, isLifecycleEvent));
+
+        // new in CDI-2.0: sort observers
+        Collections.sort(observerMethods,
+            (ObserverMethod o1, ObserverMethod o2) -> Integer.compare(o1.getPriority(), o2.getPriority()));
+
 
         for (ObserverMethod<? super Object> observer : observerMethods)
         {

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=1796940&r1=1796939&r2=1796940&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 Tue May 30 20:44:04 2017
@@ -32,6 +32,7 @@ import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.annotation.Priority;
 import javax.enterprise.context.ContextNotActiveException;
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.spi.Context;
@@ -44,6 +45,7 @@ import javax.enterprise.inject.spi.Annot
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.EventMetadata;
 import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.ObserverMethod;
 import javax.enterprise.inject.spi.WithAnnotations;
 
 import org.apache.webbeans.component.AbstractOwbBean;
@@ -111,6 +113,8 @@ public class ObserverMethodImpl<T> imple
     
     /**\@Observes parameter*/
     private AnnotatedParameter<T> annotatedObservesParameter;
+
+    private int priority = ObserverMethod.DEFAULT_PRIORITY;
     
     private static class ObserverParams
     {
@@ -145,6 +149,13 @@ public class ObserverMethodImpl<T> imple
                 observedQualifiers.add(annotation);
             }
         }
+
+        // detect the Priority
+        Priority priorityAnn = annotatedObservesParameter.getAnnotation(Priority.class);
+        if (priorityAnn != null)
+        {
+            priority = priorityAnn.value();
+        }
         
         final OpenWebBeansEjbPlugin ejbPlugin = getWebBeansContext().getPluginLoader().getEjbPlugin();
         if (ejbPlugin != null && ejbPlugin.isNewSessionBean(bean.getBeanClass()))
@@ -178,6 +189,11 @@ public class ObserverMethodImpl<T> imple
         }
     }
 
+    @Override
+    public int getPriority()
+    {
+        return priority;
+    }
 
     /**
      * {@inheritDoc}