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()
{
Show replies by date