[webbeans-commits] Webbeans SVN: r366 - in ri/trunk/webbeans-ri/src: test/java/org/jboss/webbeans/test and 1 other directory.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Wed Nov 26 14:59:44 EST 2008


Author: nickarls
Date: 2008-11-26 14:59:44 -0500 (Wed, 26 Nov 2008)
New Revision: 366

Modified:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/TransactionObservationPhase.java
   ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NewEventTest.java
Log:
Transactional observer only watches single phase

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java	2008-11-26 14:12:53 UTC (rev 365)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java	2008-11-26 19:59:44 UTC (rev 366)
@@ -1,13 +1,14 @@
 package org.jboss.webbeans.event;
 
 import java.lang.annotation.Annotation;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.webbeans.AfterTransactionCompletion;
 import javax.webbeans.AfterTransactionFailure;
 import javax.webbeans.AfterTransactionSuccess;
 import javax.webbeans.BeforeTransactionCompletion;
+import javax.webbeans.DefinitionException;
 import javax.webbeans.IfExists;
 import javax.webbeans.Observer;
 
@@ -31,7 +32,7 @@
    private EventBean<T> eventBean;
    private final AnnotatedMethod<Object> observerMethod;
    private final Class<T> eventType;
-   private Set<TransactionObservationPhase> transactionObservationPhases;
+   private TransactionObservationPhase transactionObservationPhase;
    private boolean conditional;
    private ManagerImpl manager;
 
@@ -53,29 +54,41 @@
       this.eventBean = eventBean;
       this.observerMethod = observer;
       this.eventType = eventType;
-      initTransactionObservationPhases();
+      initTransactionObservationPhase();
       conditional = !observerMethod.getAnnotatedParameters(IfExists.class).isEmpty();
    }
 
-   private void initTransactionObservationPhases()
+   private void initTransactionObservationPhase()
    {
-      transactionObservationPhases = new HashSet<TransactionObservationPhase>();
+      List<TransactionObservationPhase> observationPhases = new ArrayList<TransactionObservationPhase>();
       if (observerMethod.getAnnotatedParameters(BeforeTransactionCompletion.class).isEmpty())
       {
-         transactionObservationPhases.add(TransactionObservationPhase.BEFORE_COMPLETION);
+         observationPhases.add(TransactionObservationPhase.BEFORE_COMPLETION);
       }
       if (observerMethod.getAnnotatedParameters(AfterTransactionCompletion.class).isEmpty())
       {
-         transactionObservationPhases.add(TransactionObservationPhase.AFTER_COMPLETION);
+         observationPhases.add(TransactionObservationPhase.AFTER_COMPLETION);
       }
       if (observerMethod.getAnnotatedParameters(AfterTransactionFailure.class).isEmpty())
       {
-         transactionObservationPhases.add(TransactionObservationPhase.AFTER_FAILURE);
+         observationPhases.add(TransactionObservationPhase.AFTER_FAILURE);
       }
       if (observerMethod.getAnnotatedParameters(AfterTransactionSuccess.class).isEmpty())
       {
-         transactionObservationPhases.add(TransactionObservationPhase.AFTER_SUCCESS);
+         observationPhases.add(TransactionObservationPhase.AFTER_SUCCESS);
       }
+      if (observationPhases.size() > 1)
+      {
+         throw new DefinitionException("Transactional observers can only observe on a single phase");
+      }
+      else if (observationPhases.size() == 1)
+      {
+         transactionObservationPhase = observationPhases.iterator().next();
+      }
+      else
+      {
+         transactionObservationPhase = TransactionObservationPhase.NONE;
+      }
    }
 
    /*
@@ -122,7 +135,7 @@
 
    public boolean isTransactional()
    {
-      return !transactionObservationPhases.isEmpty();
+      return !TransactionObservationPhase.NONE.equals(transactionObservationPhase);
    }
 
    public boolean isConditional()
@@ -130,9 +143,9 @@
       return conditional;
    }
 
-   public boolean isInterestedInTransactionPhase(TransactionObservationPhase transactionObservationPhase)
+   public boolean isInterestedInTransactionPhase(TransactionObservationPhase currentPhase)
    {
-      return transactionObservationPhases.contains(transactionObservationPhase);
+      return transactionObservationPhase.equals(currentPhase);
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/TransactionObservationPhase.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/TransactionObservationPhase.java	2008-11-26 14:12:53 UTC (rev 365)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/TransactionObservationPhase.java	2008-11-26 19:59:44 UTC (rev 366)
@@ -2,5 +2,5 @@
 
 public enum TransactionObservationPhase
 {
-   BEFORE_COMPLETION, AFTER_COMPLETION, AFTER_FAILURE, AFTER_SUCCESS
+   NONE, BEFORE_COMPLETION, AFTER_COMPLETION, AFTER_FAILURE, AFTER_SUCCESS
 }

Modified: ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NewEventTest.java
===================================================================
--- ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NewEventTest.java	2008-11-26 14:12:53 UTC (rev 365)
+++ ri/trunk/webbeans-ri/src/test/java/org/jboss/webbeans/test/NewEventTest.java	2008-11-26 19:59:44 UTC (rev 366)
@@ -209,6 +209,13 @@
    }
    
    @Test(groups={"stub", "events"})
+   @SpecAssertion(section="7.1")
+   public void testTransactionalObserverCanOnlyObserveSinglePhase() 
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "events"})
    @SpecAssertion(section="7.5.6")
    public void testTransactionalObserverNotifiedImmediatelyWhenNoTransactionInProgress() 
    {




More information about the weld-commits mailing list