[jboss-cvs] jboss-seam/src/main/org/jboss/seam/util ...

Gavin King gavin.king at jboss.com
Mon Nov 13 12:29:07 EST 2006


  User: gavin   
  Date: 06/11/13 12:29:07

  Modified:    src/main/org/jboss/seam/util  Transactions.java
  Log:
  workaround for bug in glassfish, see comments for JBSEAM-456
  
  Revision  Changes    Path
  1.21      +104 -41   jboss-seam/src/main/org/jboss/seam/util/Transactions.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Transactions.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/util/Transactions.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -b -r1.20 -r1.21
  --- Transactions.java	8 Nov 2006 17:32:43 -0000	1.20
  +++ Transactions.java	13 Nov 2006 17:29:07 -0000	1.21
  @@ -1,4 +1,4 @@
  -//$Id: Transactions.java,v 1.20 2006/11/08 17:32:43 gavin Exp $
  +//$Id: Transactions.java,v 1.21 2006/11/13 17:29:07 gavin Exp $
   package org.jboss.seam.util;
   
   import static javax.transaction.Status.STATUS_ACTIVE;
  @@ -18,11 +18,11 @@
      {
         try
         {
  -         getUserTransaction().setRollbackOnly();
  +         setUTRollbackOnly();
         }
  -      catch (NamingException ne)
  +      catch (NameNotFoundException ne)
         {
  -         EJB.getEJBContext().setRollbackOnly();
  +         setEJBCRollbackOnly();
         }
      }
      
  @@ -30,49 +30,100 @@
      {
         try
         {
  -         return getUserTransaction().getStatus()==STATUS_ACTIVE;
  +         return isUTTransactionActive();
  +      }
  +      catch (NameNotFoundException ne)
  +      {
  +         return isEJBCTransactionActive();
  +      }
  +      //temporary workaround for a bad bug in Glassfish!
  +      catch (IllegalStateException ise)
  +      {
  +         return isEJBCTransactionActive();
  +      }
         }
  -      catch (NamingException ne)
  +
  +   public static boolean isTransactionActiveOrMarkedRollback() throws SystemException, NamingException
         {
            try
            {
  -            return !EJB.getEJBContext().getRollbackOnly();
  +         return isUTTransactionActiveOrMarkedRollback();
            }
  -         catch (IllegalStateException ise)
  +      catch (NameNotFoundException ne)
            {
  -            return false;
  +         return isEJBCTransactionActiveOrMarkedRollback();
            }
  +      //temporary workaround for a bad bug in Glassfish!
  +      catch (IllegalStateException ise)
  +      {
  +         return isEJBCTransactionActiveOrMarkedRollback();
         }
      }
   
  -   public static boolean isTransactionActiveOrMarkedRollback() throws SystemException, NamingException
  +   public static boolean isTransactionMarkedRollback() throws SystemException, NamingException
      {
         try
         {
  -         int status = getUserTransaction().getStatus();
  -         return status==STATUS_ACTIVE || status == STATUS_MARKED_ROLLBACK;
  +         return isUTTransactionMarkedRollback();
  +      }
  +      catch (NameNotFoundException ne)
  +      {
  +         return isEJBCTransactionMarkedRollback();
  +      }
  +      //temporary workaround for a bad bug in Glassfish!
  +      catch (IllegalStateException ise)
  +      {
  +         return isEJBCTransactionMarkedRollback();
         }
  -      catch (NamingException ne)
  +   }
  +
  +   private static void setEJBCRollbackOnly() throws NamingException
  +   {
  +      EJB.getEJBContext().setRollbackOnly();
  +   }
  +
  +   private static void setUTRollbackOnly() throws SystemException, NamingException
  +   {
  +      getUserTransaction().setRollbackOnly();
  +   }
  +   
  +   private static boolean isEJBCTransactionActive() throws NamingException
         {
            try
            {
  -            EJB.getEJBContext().getRollbackOnly();
  -            return true;
  +         return !EJB.getEJBContext().getRollbackOnly();
            }
            catch (IllegalStateException ise)
            {
               return false;
            }
         }
  +
  +   private static boolean isUTTransactionActive() throws SystemException, NamingException
  +   {
  +      return getUserTransaction().getStatus() == STATUS_ACTIVE;
      }
      
  -   public static boolean isTransactionMarkedRollback() throws SystemException, NamingException
  +   private static boolean isEJBCTransactionActiveOrMarkedRollback() throws NamingException
      {
         try
         {
  -         return getUserTransaction().getStatus() == STATUS_MARKED_ROLLBACK;
  +         EJB.getEJBContext().getRollbackOnly();
  +         return true;
         }
  -      catch (NamingException ne)
  +      catch (IllegalStateException ise)
  +      {
  +         return false;
  +      }
  +   }
  +
  +   private static boolean isUTTransactionActiveOrMarkedRollback() throws SystemException, NamingException
  +   {
  +      int status = getUserTransaction().getStatus();
  +      return status==STATUS_ACTIVE || status == STATUS_MARKED_ROLLBACK;
  +   }
  +   
  +   private static boolean isEJBCTransactionMarkedRollback() throws NamingException
         {
            try
            {
  @@ -83,12 +134,18 @@
               return false;
            }
         }
  +
  +   private static boolean isUTTransactionMarkedRollback() throws SystemException, NamingException
  +   {
  +      return getUserTransaction().getStatus() == STATUS_MARKED_ROLLBACK;
      }
      
      public static UserTransaction getUserTransaction() throws NamingException
      {
         try
         {
  +         try
  +         {
            return (UserTransaction) Naming.getInitialContext().lookup(userTransactionName);
         }
         catch (NameNotFoundException nnfe)
  @@ -96,6 +153,12 @@
            return (UserTransaction) Naming.getInitialContext().lookup(STANDARD_USER_TRANSACTION_NAME);
         }
      }
  +      //not really necessary, but just in case...
  +      catch (IllegalStateException ise)
  +      {
  +         throw new NameNotFoundException("Lookup " + userTransactionName + " threw IllegalStateException: " + ise.getMessage());
  +      }
  +   }
      
      private Transactions() {}
   
  
  
  



More information about the jboss-cvs-commits mailing list