[seam-commits] Seam SVN: r11377 - branches/community/Seam_2_2/src/main/org/jboss/seam/util.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Thu Aug 13 13:24:14 EDT 2009


Author: norman.richards at jboss.com
Date: 2009-08-13 13:24:13 -0400 (Thu, 13 Aug 2009)
New Revision: 11377

Modified:
   branches/community/Seam_2_2/src/main/org/jboss/seam/util/Work.java
Log:
JBSEAM-4340

Modified: branches/community/Seam_2_2/src/main/org/jboss/seam/util/Work.java
===================================================================
--- branches/community/Seam_2_2/src/main/org/jboss/seam/util/Work.java	2009-08-13 13:26:01 UTC (rev 11376)
+++ branches/community/Seam_2_2/src/main/org/jboss/seam/util/Work.java	2009-08-13 17:24:13 UTC (rev 11377)
@@ -29,12 +29,26 @@
    
    public final T workInTransaction() throws Exception
    {      
-      org.jboss.seam.transaction.UserTransaction transaction = Transaction.instance();
+      org.jboss.seam.transaction.UserTransaction transaction = null;
+      boolean transactionActive = false;
+      boolean newTransactionRequired = false;
+      UserTransaction userTransaction = null;
       
-      boolean transactionActive = transaction.isActiveOrMarkedRollback()
+      try {
+          transaction = Transaction.instance();
+      
+          transactionActive =  transaction.isActiveOrMarkedRollback()
               || transaction.isRolledBack(); //TODO: temp workaround, what should we really do in this case??
-      boolean newTransactionRequired = isNewTransactionRequired(transactionActive);
-      UserTransaction userTransaction = newTransactionRequired ? transaction : null;
+          newTransactionRequired = isNewTransactionRequired(transactionActive);          
+          userTransaction = newTransactionRequired ? transaction : null;
+      } catch (IllegalStateException e) {
+         // for shutdown case, when we can't get the tx object because the event context is gone
+         // but we should still check if a tx is required and fail accordingly if it is
+         newTransactionRequired = isNewTransactionRequired(false);
+         if (newTransactionRequired) {
+            throw e;
+         }
+      }
       
       try
       {



More information about the seam-commits mailing list