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

Gavin King gavin.king at jboss.com
Sun Jun 24 02:34:34 EDT 2007


  User: gavin   
  Date: 07/06/24 02:34:34

  Modified:    src/main/org/jboss/seam/transaction            
                        EntityTransaction.java HibernateTransaction.java
                        NoTransaction.java Transaction.java
                        UTTransaction.java UserTransaction.java
                        package-info.java
  Added:       src/main/org/jboss/seam/transaction            
                        AbstractUserTransaction.java CMTTransaction.java
                        LocalEjbTransaction.java
                        SynchronizationRegistry.java
  Removed:     src/main/org/jboss/seam/transaction            
                        EJBTransaction.java
  Log:
  got rid of TransactionListener, merged with the Transaction package, for more consistent behavior across diff types of tx management
  
  Revision  Changes    Path
  1.5       +33 -20    jboss-seam/src/main/org/jboss/seam/transaction/EntityTransaction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: EntityTransaction.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/transaction/EntityTransaction.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -b -r1.4 -r1.5
  --- EntityTransaction.java	23 Jun 2007 07:51:11 -0000	1.4
  +++ EntityTransaction.java	24 Jun 2007 06:34:34 -0000	1.5
  @@ -8,6 +8,7 @@
   import javax.transaction.NotSupportedException;
   import javax.transaction.RollbackException;
   import javax.transaction.Status;
  +import javax.transaction.Synchronization;
   import javax.transaction.SystemException;
   
   import org.jboss.seam.ScopeType;
  @@ -20,8 +21,8 @@
   /**
    * Support for the JPA EntityTransaction API.
    * 
  - * Adapts JPA transaction management to a
  - * UserTransaction interface.
  + * Adapts JPA transaction management to a Seam UserTransaction 
  + * interface.For use in non-JTA-capable environments.
    * 
    * @author Gavin King
    * 
  @@ -30,9 +31,9 @@
   @Scope(ScopeType.EVENT)
   @Install(value=false, precedence=FRAMEWORK)
   @BypassInterceptors
  -public class EntityTransaction extends UserTransaction
  +public class EntityTransaction extends AbstractUserTransaction
   {
  -
  +   private SynchronizationRegistry synchronizations = new SynchronizationRegistry();
      private ValueExpression<EntityManager> entityManager;
      private EntityManager currentEntityManager;
      
  @@ -75,6 +76,7 @@
               HeuristicRollbackException, SecurityException, IllegalStateException, SystemException
      {
         assertActive();
  +      boolean success = false;
         try
         {
            javax.persistence.EntityTransaction delegate = getDelegate();
  @@ -85,28 +87,15 @@
            }
            else
            {
  +            synchronizations.beforeTransactionCompletion();
               delegate.commit();
  +            success = true;
            }
         }
         finally
         {
            clearEntityManager();
  -      }
  -   }
  -
  -   public int getStatus() throws SystemException
  -   {
  -      if ( isEntityManagerSet() && getDelegate().getRollbackOnly() )
  -      {
  -         return Status.STATUS_MARKED_ROLLBACK;
  -      }
  -      else if ( isEntityManagerSet() && getDelegate().isActive() )
  -      {
  -         return Status.STATUS_ACTIVE;
  -      }
  -      else
  -      {
  -         return Status.STATUS_NO_TRANSACTION;
  +         synchronizations.afterTransactionCompletion(success);
         }
      }
   
  @@ -121,6 +110,7 @@
         finally
         {
            clearEntityManager();
  +         synchronizations.afterTransactionCompletion(false);
         }
      }
   
  @@ -130,6 +120,22 @@
         getDelegate().setRollbackOnly();
      }
   
  +   public int getStatus() throws SystemException
  +   {
  +      if ( isEntityManagerSet() && getDelegate().getRollbackOnly() )
  +      {
  +         return Status.STATUS_MARKED_ROLLBACK;
  +      }
  +      else if ( isEntityManagerSet() && getDelegate().isActive() )
  +      {
  +         return Status.STATUS_ACTIVE;
  +      }
  +      else
  +      {
  +         return Status.STATUS_NO_TRANSACTION;
  +      }
  +   }
  +
      public void setTransactionTimeout(int timeout) throws SystemException
      {
         throw new UnsupportedOperationException();
  @@ -162,6 +168,13 @@
      }
   
      @Override
  +   public void registerSynchronization(Synchronization sync)
  +   {
  +      assertActive();
  +      synchronizations.registerSynchronization(sync);
  +   }
  +
  +   @Override
      public boolean isConversationContextRequired()
      {
         return true;
  
  
  
  1.4       +27 -19    jboss-seam/src/main/org/jboss/seam/transaction/HibernateTransaction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: HibernateTransaction.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/transaction/HibernateTransaction.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- HibernateTransaction.java	23 Jun 2007 07:38:07 -0000	1.3
  +++ HibernateTransaction.java	24 Jun 2007 06:34:34 -0000	1.4
  @@ -7,6 +7,7 @@
   import javax.transaction.NotSupportedException;
   import javax.transaction.RollbackException;
   import javax.transaction.Status;
  +import javax.transaction.Synchronization;
   import javax.transaction.SystemException;
   
   import org.hibernate.Session;
  @@ -20,8 +21,8 @@
   /**
    * Support for the Hibernate Transaction API.
    * 
  - * Adapts Hibernate transaction management to a
  - * UserTransaction interface.
  + * Adapts Hibernate transaction management to a Seam UserTransaction 
  + * interface. For use in non-JTA-capable environments.
    * 
    * @author Gavin King
    * 
  @@ -30,7 +31,7 @@
   @Scope(ScopeType.EVENT)
   @Install(value=false, precedence=FRAMEWORK)
   @BypassInterceptors
  -public class HibernateTransaction extends UserTransaction
  +public class HibernateTransaction extends AbstractUserTransaction
   {
   
      private ValueExpression<Session> session;
  @@ -93,22 +94,6 @@
         }
      }
   
  -   public int getStatus() throws SystemException
  -   {
  -      if (rollbackOnly)
  -      {
  -         return Status.STATUS_MARKED_ROLLBACK;
  -      }
  -      else if ( isSessionSet() && getDelegate().isActive() )
  -      {
  -         return Status.STATUS_ACTIVE;
  -      }
  -      else
  -      {
  -         return Status.STATUS_NO_TRANSACTION;
  -      }
  -   }
  -
      public void rollback() throws IllegalStateException, SecurityException, SystemException
      {
         //TODO: translate exceptions that occur into the correct JTA exception
  @@ -129,6 +114,22 @@
         rollbackOnly = true;
      }
   
  +   public int getStatus() throws SystemException
  +   {
  +      if (rollbackOnly)
  +      {
  +         return Status.STATUS_MARKED_ROLLBACK;
  +      }
  +      else if ( isSessionSet() && getDelegate().isActive() )
  +      {
  +         return Status.STATUS_ACTIVE;
  +      }
  +      else
  +      {
  +         return Status.STATUS_NO_TRANSACTION;
  +      }
  +   }
  +
      public void setTransactionTimeout(int timeout) throws SystemException
      {
         assertActive();
  @@ -163,6 +164,13 @@
      }
      
      @Override
  +   public void registerSynchronization(Synchronization sync)
  +   {
  +      assertActive();
  +      getDelegate().registerSynchronization(sync);
  +   }
  +   
  +   @Override
      public boolean isConversationContextRequired()
      {
         return true;
  
  
  
  1.2       +14 -8     jboss-seam/src/main/org/jboss/seam/transaction/NoTransaction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: NoTransaction.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/transaction/NoTransaction.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -b -r1.1 -r1.2
  --- NoTransaction.java	30 May 2007 20:16:00 -0000	1.1
  +++ NoTransaction.java	24 Jun 2007 06:34:34 -0000	1.2
  @@ -5,28 +5,28 @@
   import javax.transaction.NotSupportedException;
   import javax.transaction.RollbackException;
   import javax.transaction.Status;
  +import javax.transaction.Synchronization;
   import javax.transaction.SystemException;
   
   /**
  - * When no kind of transaction management
  - * exists.
  + * When no kind of transaction management exists.
    * 
    * @author Mike Youngstrom
    * @author Gavin King
    * 
    */
  -public class NoTransaction extends UserTransaction
  +public class NoTransaction extends AbstractUserTransaction
   {
      
      public void begin() throws NotSupportedException, SystemException
      {
  -      throw new UnsupportedOperationException();
  +      throw new UnsupportedOperationException("no transaction");
      }
   
      public void commit() throws RollbackException, HeuristicMixedException,
               HeuristicRollbackException, SecurityException, IllegalStateException, SystemException
      {
  -      throw new UnsupportedOperationException();
  +      throw new UnsupportedOperationException("no transaction");
      }
   
      public int getStatus() throws SystemException
  @@ -36,17 +36,23 @@
   
      public void rollback() throws IllegalStateException, SecurityException, SystemException
      {
  -      throw new UnsupportedOperationException();
  +      throw new UnsupportedOperationException("no transaction");
      }
   
      public void setRollbackOnly() throws IllegalStateException, SystemException
      {
  -      throw new UnsupportedOperationException();
  +      throw new UnsupportedOperationException("no transaction");
      }
   
      public void setTransactionTimeout(int timeout) throws SystemException
      {
  -      throw new UnsupportedOperationException();
  +      throw new UnsupportedOperationException("no transaction");
  +   }
  +   
  +   @Override
  +   public void registerSynchronization(Synchronization sync)
  +   {
  +      throw new UnsupportedOperationException("no transaction");
      }
   
   }
  
  
  
  1.10      +42 -13    jboss-seam/src/main/org/jboss/seam/transaction/Transaction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Transaction.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/transaction/Transaction.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -b -r1.9 -r1.10
  --- Transaction.java	23 Jun 2007 07:11:45 -0000	1.9
  +++ Transaction.java	24 Jun 2007 06:34:34 -0000	1.10
  @@ -4,6 +4,7 @@
   
   import javax.naming.NameNotFoundException;
   import javax.naming.NamingException;
  +import javax.transaction.Synchronization;
   
   import org.jboss.seam.Component;
   import org.jboss.seam.ScopeType;
  @@ -16,17 +17,13 @@
   import org.jboss.seam.util.Naming;
   
   /**
  - * Abstracts all possible transaction management APIs behind a 
  - * JTA-compatible interface. Unfortunately, many 
  - * otherwise-perfectly-intelligent-looking Java developers like 
  - * to invent their own transaction management APIs when they get 
  - * bored, even though JTA is well-known to be more than good
  - * enough. For example, one of the co-authors of this class was 
  - * present at the creation of not one but two "alternative" 
  - * transaction APIs (org.hibernate.Transaction and 
  - * javax.persistence.EntityTransaction), and is more 
  - * embarrassed by this than by any other of his many professional
  - * blunders.
  + * Supports injection of a Seam UserTransaction object that
  + * wraps the current JTA transaction or EJB container managed
  + * transaction. This base implementation does not have access
  + * to the JTA TransactionManager, so it is not fully aware
  + * of container managed transaction lifecycle, and is not
  + * able to register Synchronizations with a container managed 
  + * transaction.
    * 
    * @author Mike Youngstrom
    * @author Gavin King
  @@ -43,6 +40,38 @@
   
      private static String userTransactionName = "UserTransaction";
   
  +   private SynchronizationRegistry synchronizations = new SynchronizationRegistry();
  +   
  +   protected SynchronizationRegistry getSynchronizations()
  +   {
  +      return synchronizations;
  +   }
  +   
  +   protected void afterCommit(boolean success)
  +   {
  +      synchronizations.afterTransactionCompletion(success);
  +   }
  +   
  +   protected void afterRollback()
  +   {
  +      synchronizations.afterTransactionCompletion(false);
  +   }
  +   
  +   protected void beforeCommit()
  +   {
  +      synchronizations.beforeTransactionCompletion();
  +   }
  +   
  +   protected void registerSynchronization(Synchronization sync)
  +   {
  +      synchronizations.registerSynchronization(sync);
  +   }
  +   
  +   protected boolean isAwareOfContainerTransactions()
  +   {
  +      return false;
  +   }
  +   
      public static void setUserTransactionName(String name)
      {
         userTransactionName = name;
  @@ -85,12 +114,12 @@
   
      protected UserTransaction createEJBTransaction() throws NamingException
      {
  -      return new EJBTransaction( EJB.getEJBContext() );
  +      return new CMTTransaction( EJB.getEJBContext(), this );
      }
   
      protected UserTransaction createUTTransaction() throws NamingException
      {
  -      return new UTTransaction( getUserTransaction() );
  +      return new UTTransaction( getUserTransaction(), this );
      }
   
      protected javax.transaction.UserTransaction getUserTransaction() throws NamingException
  
  
  
  1.4       +33 -7     jboss-seam/src/main/org/jboss/seam/transaction/UTTransaction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: UTTransaction.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/transaction/UTTransaction.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- UTTransaction.java	22 Jun 2007 23:04:44 -0000	1.3
  +++ UTTransaction.java	24 Jun 2007 06:34:34 -0000	1.4
  @@ -4,23 +4,26 @@
   import javax.transaction.HeuristicRollbackException;
   import javax.transaction.NotSupportedException;
   import javax.transaction.RollbackException;
  +import javax.transaction.Synchronization;
   import javax.transaction.SystemException;
   
   /**
  - * Wraps JTA transaction management in a
  - * UserTransaction interface.
  + * Wraps JTA transaction management in a Seam UserTransaction 
  + * interface.
    * 
    * @author Mike Youngstrom
    * @author Gavin King
    * 
    */
  -public class UTTransaction extends UserTransaction
  +public class UTTransaction extends AbstractUserTransaction
   {
      
  -   private javax.transaction.UserTransaction delegate;
  +   private final javax.transaction.UserTransaction delegate;
  +   private final Transaction parent;
   
  -   UTTransaction(javax.transaction.UserTransaction delegate)
  +   UTTransaction(javax.transaction.UserTransaction delegate, Transaction parent)
      {
  +      this.parent = parent;
         this.delegate = delegate;
         if (delegate==null)
         {
  @@ -36,7 +39,17 @@
      public void commit() throws RollbackException, HeuristicMixedException,
               HeuristicRollbackException, SecurityException, IllegalStateException, SystemException
      {
  +      boolean success = false;
  +      parent.beforeCommit();
  +      try
  +      {
         delegate.commit();
  +         success = true;
  +      }
  +      finally
  +      {
  +         parent.afterCommit(success);
  +      }
      }
   
      public int getStatus() throws SystemException
  @@ -46,8 +59,15 @@
   
      public void rollback() throws IllegalStateException, SecurityException, SystemException
      {
  +      try
  +      {
         delegate.rollback();
      }
  +      finally
  +      {
  +         parent.afterRollback();
  +      }
  +   }
   
      public void setRollbackOnly() throws IllegalStateException, SystemException
      {
  @@ -59,4 +79,10 @@
         delegate.setTransactionTimeout(timeout);
      }
   
  +   @Override
  +   public void registerSynchronization(Synchronization sync)
  +   {
  +      parent.registerSynchronization(sync);
  +   }
  +
   }
  
  
  
  1.5       +12 -48    jboss-seam/src/main/org/jboss/seam/transaction/UserTransaction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: UserTransaction.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/transaction/UserTransaction.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -b -r1.4 -r1.5
  --- UserTransaction.java	23 Jun 2007 07:38:07 -0000	1.4
  +++ UserTransaction.java	24 Jun 2007 06:34:34 -0000	1.5
  @@ -1,11 +1,6 @@
   package org.jboss.seam.transaction;
   
  -import static javax.transaction.Status.STATUS_ACTIVE;
  -import static javax.transaction.Status.STATUS_MARKED_ROLLBACK;
  -import static javax.transaction.Status.STATUS_ROLLEDBACK;
  -import static javax.transaction.Status.STATUS_COMMITTED;
  -import static javax.transaction.Status.STATUS_NO_TRANSACTION;
  -
  +import javax.transaction.Synchronization;
   import javax.transaction.SystemException;
   
   /**
  @@ -15,49 +10,18 @@
    * @author Gavin King
    * 
    */
  -public abstract class UserTransaction implements javax.transaction.UserTransaction
  +public interface UserTransaction extends javax.transaction.UserTransaction
   {
      
  -   public boolean isActive() throws SystemException
  -   {
  -      return getStatus() == STATUS_ACTIVE;
  -   }
  -
  -   public boolean isActiveOrMarkedRollback() throws SystemException
  -   {
  -      int status = getStatus();
  -      return status == STATUS_ACTIVE || status == STATUS_MARKED_ROLLBACK;
  -   }
  -
  -   public boolean isRolledBackOrMarkedRollback() throws SystemException
  -   {
  -      int status = getStatus();
  -      return status == STATUS_ROLLEDBACK || status == STATUS_MARKED_ROLLBACK;
  -   }
  -
  -   public boolean isMarkedRollback() throws SystemException
  -   {
  -      return getStatus() == STATUS_MARKED_ROLLBACK;
  -   }
  -
  -   public boolean isNoTransaction() throws SystemException
  -   {
  -      return getStatus() == STATUS_NO_TRANSACTION;
  -   }
  -
  -   public boolean isRolledBack() throws SystemException
  -   {
  -      return getStatus() == STATUS_ROLLEDBACK;
  -   }
  -
  -   public boolean isCommitted() throws SystemException
  -   {
  -      return getStatus() == STATUS_COMMITTED;
  -   }
  +   public boolean isActive() throws SystemException;
  +   public boolean isActiveOrMarkedRollback() throws SystemException;
  +   public boolean isRolledBackOrMarkedRollback() throws SystemException;
  +   public boolean isMarkedRollback() throws SystemException;
  +   public boolean isNoTransaction() throws SystemException;
  +   public boolean isRolledBack() throws SystemException;
  +   public boolean isCommitted() throws SystemException;
      
  -   public boolean isConversationContextRequired()
  -   {
  -      return false;
  -   }
  +   public boolean isConversationContextRequired();
  +   public abstract void registerSynchronization(Synchronization sync);
   
   }
  
  
  
  1.4       +11 -1     jboss-seam/src/main/org/jboss/seam/transaction/package-info.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: package-info.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/transaction/package-info.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- package-info.java	23 Jun 2007 10:17:30 -0000	1.3
  +++ package-info.java	24 Jun 2007 06:34:34 -0000	1.4
  @@ -1,5 +1,15 @@
   /**
  - * Transaction management abstraction layer.
  + * Abstracts all possible transaction management APIs behind a 
  + * JTA-compatible interface. Unfortunately, many 
  + * otherwise-perfectly-intelligent-looking Java developers like 
  + * to invent their own transaction management APIs when they get 
  + * bored, even though JTA is well-known to be more than good
  + * enough. For example, one of the co-authors of this class was 
  + * present at the creation of not one but two "alternative" 
  + * transaction APIs (org.hibernate.Transaction and 
  + * javax.persistence.EntityTransaction), and is more 
  + * embarrassed by this than by any other of his many professional
  + * blunders.
    * 
    * @see org.jboss.seam.transaction.Transaction
    * @see org.jboss.seam.transaction.UserTransaction
  
  
  
  1.1      date: 2007/06/24 06:34:34;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/transaction/AbstractUserTransaction.java
  
  Index: AbstractUserTransaction.java
  ===================================================================
  package org.jboss.seam.transaction;
  
  import static javax.transaction.Status.STATUS_ACTIVE;
  import static javax.transaction.Status.STATUS_MARKED_ROLLBACK;
  import static javax.transaction.Status.STATUS_ROLLEDBACK;
  import static javax.transaction.Status.STATUS_COMMITTED;
  import static javax.transaction.Status.STATUS_NO_TRANSACTION;
  
  import javax.transaction.Synchronization;
  import javax.transaction.SystemException;
  
  /**
   * Base implementation of UserTransaction
   * 
   * @author Gavin King
   * 
   */
  public abstract class AbstractUserTransaction implements UserTransaction
  {
     
     public boolean isActive() throws SystemException
     {
        return getStatus() == STATUS_ACTIVE;
     }
  
     public boolean isActiveOrMarkedRollback() throws SystemException
     {
        int status = getStatus();
        return status == STATUS_ACTIVE || status == STATUS_MARKED_ROLLBACK;
     }
  
     public boolean isRolledBackOrMarkedRollback() throws SystemException
     {
        int status = getStatus();
        return status == STATUS_ROLLEDBACK || status == STATUS_MARKED_ROLLBACK;
     }
  
     public boolean isMarkedRollback() throws SystemException
     {
        return getStatus() == STATUS_MARKED_ROLLBACK;
     }
  
     public boolean isNoTransaction() throws SystemException
     {
        return getStatus() == STATUS_NO_TRANSACTION;
     }
  
     public boolean isRolledBack() throws SystemException
     {
        return getStatus() == STATUS_ROLLEDBACK;
     }
  
     public boolean isCommitted() throws SystemException
     {
        return getStatus() == STATUS_COMMITTED;
     }
     
     public boolean isConversationContextRequired()
     {
        return false;
     }
     
     public abstract void registerSynchronization(Synchronization sync);
  }
  
  
  
  1.1      date: 2007/06/24 06:34:34;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/transaction/CMTTransaction.java
  
  Index: CMTTransaction.java
  ===================================================================
  package org.jboss.seam.transaction;
  
  import javax.ejb.EJBContext;
  import javax.transaction.HeuristicMixedException;
  import javax.transaction.HeuristicRollbackException;
  import javax.transaction.NotSupportedException;
  import javax.transaction.RollbackException;
  import javax.transaction.Status;
  import javax.transaction.Synchronization;
  import javax.transaction.SystemException;
  
  /**
   * Wraps EJBContext transaction management in a
   * UserTransaction interface. Note that container managed
   * transaction cannot be controlled by the application,
   * so begin(), commit() and rollback() all throw
   * UnsupportOperationException.
   * 
   * 
   * @author Mike Youngstrom
   * @author Gavin King
   * 
   */
  public class CMTTransaction extends AbstractUserTransaction
  {
     
     private final EJBContext ejbContext;
     private final Transaction parent;
  
     public CMTTransaction(EJBContext ejbContext, Transaction parent)
     {
        this.parent = parent;
        this.ejbContext = ejbContext;
        if (ejbContext==null)
        {
           throw new IllegalArgumentException("null EJBContext");
        }
     }
  
     public void begin() throws NotSupportedException, SystemException
     {
        throw new UnsupportedOperationException("container managed transaction");
     }
  
     public void commit() throws RollbackException, HeuristicMixedException,
              HeuristicRollbackException, SecurityException, IllegalStateException, SystemException
     {
        throw new UnsupportedOperationException("container managed transaction");
     }
  
     public int getStatus() throws SystemException
     {
        try
        {
           if ( !ejbContext.getRollbackOnly() )
           {
              return Status.STATUS_ACTIVE;
           }
           else
           {
              return Status.STATUS_MARKED_ROLLBACK;
           }
        }
        catch (IllegalStateException ise)
        {
           return Status.STATUS_NO_TRANSACTION;
        }
     }
  
     public void rollback() throws IllegalStateException, SecurityException, SystemException
     {
        throw new UnsupportedOperationException("container managed transaction");
     }
  
     public void setRollbackOnly() throws IllegalStateException, SystemException
     {
        ejbContext.setRollbackOnly();
     }
  
     public void setTransactionTimeout(int timeout) throws SystemException
     {
        throw new UnsupportedOperationException("container managed transaction");
     }
     
     @Override
     public void registerSynchronization(Synchronization sync)
     {
        if ( parent.isAwareOfContainerTransactions() )
        {
           parent.registerSynchronization(sync);
        }
        else
        {
           throw new UnsupportedOperationException("cannot register synchronization with container transaction, use <transaction:ejb-transaction/>");
        }
     }
  
  }
  
  
  
  1.1      date: 2007/06/24 06:34:34;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/transaction/LocalEjbTransaction.java
  
  Index: LocalEjbTransaction.java
  ===================================================================
  package org.jboss.seam.transaction;
  
  import javax.ejb.Local;
  import javax.naming.NamingException;
  
  /**
   * Local interface for EjbTransaction
   * @author Gavin King
   *
   */
  @Local
  public interface LocalEjbTransaction 
  {
     public UserTransaction getTransaction() throws NamingException;
     public void destroy();
  }
  
  
  
  1.1      date: 2007/06/24 06:34:34;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/transaction/SynchronizationRegistry.java
  
  Index: SynchronizationRegistry.java
  ===================================================================
  package org.jboss.seam.transaction;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import javax.transaction.Status;
  import javax.transaction.Synchronization;
  
  import org.jboss.seam.core.Events;
  import org.jboss.seam.log.LogProvider;
  import org.jboss.seam.log.Logging;
  
  /**
   * A list of Synchronizations to be invoked before and after transaction
   * completion. This class is used when we can't register a synchronization
   * directly with JTA.
   * 
   * @author Gavin King
   *
   */
  class SynchronizationRegistry
  {
     private static final LogProvider log = Logging.getLogProvider(SynchronizationRegistry.class);
  
     private List<Synchronization> synchronizations = new ArrayList<Synchronization>();
  
     void registerSynchronization(Synchronization sync)
     {
        synchronizations.add(sync);
     }
     
     void afterTransactionCompletion(boolean success)
     {
        Events.instance().raiseEvent("org.jboss.seam.afterTransactionCompletion", success);
        for (Synchronization sync: synchronizations)
        {
           try
           {
              sync.afterCompletion(success ? Status.STATUS_COMMITTED : Status.STATUS_ROLLEDBACK);
           }
           catch (Exception e)
           {
              log.error("Exception processing transaction Synchronization after completion", e);
           }
        }
        synchronizations.clear();
     }
  
     void beforeTransactionCompletion()
     {
        Events.instance().raiseEvent("org.jboss.seam.beforeTransactionCompletion");
        for (Synchronization sync: synchronizations)
        {
           try
           {
              sync.beforeCompletion();
           }
           catch (Exception e)
           {
              log.error("Exception processing transaction Synchronization before completion", e);
           }
        }
     }
     
  }
  
  
  



More information about the jboss-cvs-commits mailing list