Author: dallen6
Date: 2009-03-08 17:41:55 -0400 (Sun, 08 Mar 2009)
New Revision: 1819
Added:
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionSynchronizedRunnable.java
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionalObserverImpl.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/mock/MockTransactionServices.java
Log:
Changes for the corresponding changes to the SPI with TransactionServices.
Added:
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionSynchronizedRunnable.java
===================================================================
---
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionSynchronizedRunnable.java
(rev 0)
+++
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionSynchronizedRunnable.java 2009-03-08
21:41:55 UTC (rev 1819)
@@ -0,0 +1,63 @@
+package org.jboss.webbeans.event;
+
+import static javax.transaction.Status.STATUS_COMMITTED;
+
+import javax.transaction.Synchronization;
+
+import org.jboss.webbeans.transaction.spi.TransactionServices;
+
+/**
+ * A JTA transaction sychronization which wraps a Runnable.
+ *
+ * @author David Allen
+ *
+ */
+public class TransactionSynchronizedRunnable implements Synchronization
+{
+ private final TransactionServices.Status desiredStatus;
+ private final Runnable task;
+ private final boolean before;
+
+ public TransactionSynchronizedRunnable(Runnable task, boolean before)
+ {
+ this(task, TransactionServices.Status.ALL, before);
+ }
+
+ public TransactionSynchronizedRunnable(Runnable task, TransactionServices.Status
desiredStatus)
+ {
+ this(task, desiredStatus, false); // Status is only applicable after the
transaction
+ }
+
+ private TransactionSynchronizedRunnable(Runnable task, TransactionServices.Status
desiredStatus, boolean before)
+ {
+ this.task = task;
+ this.desiredStatus = desiredStatus;
+ this.before = before;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.transaction.Synchronization#afterCompletion(int)
+ */
+ public void afterCompletion(int status)
+ {
+ if ((desiredStatus == TransactionServices.Status.SUCCESS && status ==
STATUS_COMMITTED) || (desiredStatus == TransactionServices.Status.FAILURE &&
status != STATUS_COMMITTED) || (desiredStatus == TransactionServices.Status.ALL))
+ {
+ task.run();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.transaction.Synchronization#beforeCompletion()
+ */
+ public void beforeCompletion()
+ {
+ if (before)
+ {
+ task.run();
+ }
+ }
+}
Property changes on:
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionSynchronizedRunnable.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionalObserverImpl.java
===================================================================
---
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionalObserverImpl.java 2009-03-08
21:02:09 UTC (rev 1818)
+++
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionalObserverImpl.java 2009-03-08
21:41:55 UTC (rev 1819)
@@ -27,6 +27,7 @@
import javax.event.BeforeTransactionCompletion;
import javax.inject.DefinitionException;
import javax.inject.manager.Bean;
+import javax.transaction.Synchronization;
import org.jboss.webbeans.ManagerImpl;
import org.jboss.webbeans.introspector.AnnotatedMethod;
@@ -36,7 +37,7 @@
* @author David Allen
*
*/
-public class TransactionalObserverImpl<T> extends ObserverImpl<T>
+class TransactionalObserverImpl<T> extends ObserverImpl<T>
{
/**
* The known transactional phases a transactional event observer can be
@@ -44,36 +45,7 @@
*/
protected enum TransactionObservationPhase
{
- BEFORE_COMPLETION
- {
- void registerTask(TransactionServices transactionServices, Runnable task)
- {
- transactionServices.executeBeforeTransactionCompletion(task);
- }
- },
- AFTER_COMPLETION
- {
- void registerTask(TransactionServices transactionServices, Runnable task)
- {
- transactionServices.executeAfterTransactionCompletion(task);
- }
- },
- AFTER_FAILURE
- {
- void registerTask(TransactionServices transactionServices, Runnable task)
- {
- transactionServices.executeAfterTransactionCompletion(task,
TransactionServices.Status.SUCCESS);
- }
- },
- AFTER_SUCCESS
- {
- void registerTask(TransactionServices transactionServices, Runnable task)
- {
- transactionServices.executeAfterTransactionCompletion(task,
TransactionServices.Status.FAILURE);
- }
- };
-
- abstract void registerTask(TransactionServices transactionServices, Runnable
task);
+ BEFORE_COMPLETION, AFTER_COMPLETION, AFTER_FAILURE, AFTER_SUCCESS
}
private TransactionObservationPhase transactionObservationPhase;
@@ -87,7 +59,7 @@
public static boolean isObserverMethodTransactional(AnnotatedMethod<?>
observer)
{
boolean transactional = true;
- if ((observer.getAnnotatedParameters(BeforeTransactionCompletion.class).isEmpty())
|| (observer.getAnnotatedParameters(AfterTransactionCompletion.class).isEmpty()) ||
(observer.getAnnotatedParameters(AfterTransactionSuccess.class).isEmpty()) ||
(observer.getAnnotatedParameters(AfterTransactionFailure.class).isEmpty()))
+ if ((observer.getAnnotatedParameters(BeforeTransactionCompletion.class).isEmpty())
&& (observer.getAnnotatedParameters(AfterTransactionCompletion.class).isEmpty())
&& (observer.getAnnotatedParameters(AfterTransactionSuccess.class).isEmpty())
&& (observer.getAnnotatedParameters(AfterTransactionFailure.class).isEmpty()))
{
transactional = false;
}
@@ -175,7 +147,24 @@
{
deferredEvent = new AsynchronousTransactionalEventNotification<T>(event,
this);
}
- transactionObservationPhase.registerTask(manager.getTransactionServices(),
deferredEvent);
+ Synchronization synchronization = null;
+ if
(transactionObservationPhase.equals(TransactionObservationPhase.BEFORE_COMPLETION))
+ {
+ synchronization = new TransactionSynchronizedRunnable(deferredEvent, true);
+ }
+ else if
(transactionObservationPhase.equals(TransactionObservationPhase.AFTER_COMPLETION))
+ {
+ synchronization = new TransactionSynchronizedRunnable(deferredEvent, false);
+ }
+ else if
(transactionObservationPhase.equals(TransactionObservationPhase.AFTER_SUCCESS))
+ {
+ synchronization = new TransactionSynchronizedRunnable(deferredEvent,
TransactionServices.Status.SUCCESS);
+ }
+ else if
(transactionObservationPhase.equals(TransactionObservationPhase.AFTER_FAILURE))
+ {
+ synchronization = new TransactionSynchronizedRunnable(deferredEvent,
TransactionServices.Status.FAILURE);
+ }
+ manager.getTransactionServices().registerSynchronization(synchronization);
}
}
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/mock/MockTransactionServices.java
===================================================================
---
ri/trunk/impl/src/main/java/org/jboss/webbeans/mock/MockTransactionServices.java 2009-03-08
21:02:09 UTC (rev 1818)
+++
ri/trunk/impl/src/main/java/org/jboss/webbeans/mock/MockTransactionServices.java 2009-03-08
21:41:55 UTC (rev 1819)
@@ -17,6 +17,8 @@
package org.jboss.webbeans.mock;
+import javax.transaction.Synchronization;
+
import org.jboss.webbeans.transaction.spi.TransactionServices;
/**
@@ -31,27 +33,6 @@
{
/* (non-Javadoc)
- * @see
org.jboss.webbeans.transaction.spi.TransactionServices#executeAfterTransactionCompletion(java.lang.Runnable)
- */
- public void executeAfterTransactionCompletion(Runnable task)
- {
- }
-
- /* (non-Javadoc)
- * @see
org.jboss.webbeans.transaction.spi.TransactionServices#executeAfterTransactionCompletion(java.lang.Runnable,
org.jboss.webbeans.transaction.spi.TransactionServices.Status)
- */
- public void executeAfterTransactionCompletion(Runnable task, Status desiredStatus)
- {
- }
-
- /* (non-Javadoc)
- * @see
org.jboss.webbeans.transaction.spi.TransactionServices#executeBeforeTransactionCompletion(java.lang.Runnable)
- */
- public void executeBeforeTransactionCompletion(Runnable task)
- {
- }
-
- /* (non-Javadoc)
* @see org.jboss.webbeans.transaction.spi.TransactionServices#isTransactionActive()
*/
public boolean isTransactionActive()
@@ -59,4 +40,11 @@
return false;
}
+ @Override
+ public void registerSynchronization(Synchronization synchronizedObserver)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
}