User: sparre  
  Date: 01/06/20 22:14:31

  Modified:    src/main/org/jboss/ejb EnterpriseContext.java
                        MessageDrivenEnterpriseContext.java
                        StatefulSessionEnterpriseContext.java
                        StatelessSessionEnterpriseContext.java
  Log:
  A little UserTransaction cleanup.
  
  Revision  Changes    Path
  1.34      +53 -35    jboss/src/main/org/jboss/ejb/EnterpriseContext.java
  
  Index: EnterpriseContext.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/EnterpriseContext.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- EnterpriseContext.java    2001/06/19 09:55:00     1.33
  +++ EnterpriseContext.java    2001/06/21 05:14:31     1.34
  @@ -21,6 +21,7 @@
   import javax.transaction.Status;
   import javax.transaction.Transaction;
   import javax.transaction.UserTransaction;
  +import javax.transaction.TransactionManager;
   import javax.transaction.Synchronization;
   import javax.transaction.NotSupportedException;
   import javax.transaction.SystemException;
  @@ -42,7 +43,8 @@
    *  @author <a href="mailto:[EMAIL PROTECTED]";>Marc Fleury</a>
    *  @author <a href="mailto:[EMAIL PROTECTED]";>Sebastien Alborini</a>
    *  @author <a href="mailto:[EMAIL PROTECTED]";>Juha Lindfors</a>
  - *  @version $Revision: 1.33 $
  + *  @author <a href="mailto:[EMAIL PROTECTED]";>Ole Husgaard</a>
  + *  @version $Revision: 1.34 $
    */
   public abstract class EnterpriseContext
   {
  @@ -177,10 +179,17 @@
      // Private -------------------------------------------------------
   
      // Inner classes -------------------------------------------------
  +
      protected class EJBContextImpl
         implements EJBContext
      {
         /**
  +       *  A per-bean instance UserTransaction instance cached after the
  +       *  first call to <code>getUserTransaction()</code>.
  +       */
  +      private UserTransactionImpl userTransaction = null;
  +
  +      /**
          * @deprecated
          */
         public Identity getCallerIdentity() 
  @@ -265,11 +274,13 @@
         
         public boolean getRollbackOnly() 
         { 
  -         try
  -         {
  +         // EJB1.1 11.6.1: Must throw IllegalStateException if BMT
  +         if (con.getBeanMetaData().isBeanManagedTx())
  +            throw new IllegalStateException("ctx.setRollbackOnly() not allowed for 
BMT beans.");
  +
  +         try {
               return con.getTransactionManager().getStatus() == 
Status.STATUS_MARKED_ROLLBACK; 
  -         } catch (SystemException e)
  -         {
  +         } catch (SystemException e) {
   //DEBUG            Logger.debug(e);
               return true;
            }
  @@ -277,6 +288,10 @@
          
         public void setRollbackOnly() 
         { 
  +         // EJB1.1 11.6.1: Must throw IllegalStateException if BMT
  +         if (con.getBeanMetaData().isBeanManagedTx())
  +            throw new IllegalStateException("ctx.setRollbackOnly() not allowed for 
BMT beans.");
  +
            try {
               con.getTransactionManager().setRollbackOnly();
            } catch (IllegalStateException e) {
  @@ -329,38 +344,41 @@
            return con.getRealmMapping().doesUserHaveRole( principal, set );
          }
      
  -      // TODO - how to handle this best?
         public UserTransaction getUserTransaction() 
         { 
  -         // If not BMT, throw exception.
  -         // We default to the exception here, and override this method for
  -         // contexts of bean types that may be able to handle their own
  -         // transaction demarcation.
  -         throw new IllegalStateException("Not a BMT bean.");
  +         if (userTransaction == null) {
  +            if (con.getBeanMetaData().isContainerManagedTx())
  +               throw new IllegalStateException("CMT beans are not allowed to get a 
UserTransaction");
  +            userTransaction = new UserTransactionImpl(); 
  +         }
  +         return userTransaction;
         }
      }
      
       // Inner classes -------------------------------------------------
  -   
  -   
  -   // SA MF FIXME: the usertransaction is only used for session beans with BMT.
  -   // This does not belong here (getUserTransaction is properly implemented in 
subclasses)
  -   
  -   class UserTransactionImpl
  + 
  +   protected class UserTransactionImpl
         implements UserTransaction
      {
  +      /**
  +       *  Timeout value in seconds for new transactions started
  +       *  by this bean instance.
  +       */
  +      private int timeout = 0;
  +
         public void begin()
  -         throws NotSupportedException,SystemException
  +         throws NotSupportedException, SystemException
         {
  -         con.getTransactionManager().begin();
  -        
  -        // keep track of the transaction in enterprise context for BMT
  -        setTransaction(con.getTransactionManager().getTransaction());        
  -        
  -        
  -        // DEBUG Logger.debug("UserTransactionImpl.begin " + transaction.hashCode() 
+ " in UserTransactionImpl " + this.hashCode());
  -//DEBUG        Logger.debug("UserTransactionImpl.begin " + transaction.hashCode() + 
" in UserTransactionImpl " + this.hashCode());
  -        
  +         TransactionManager tm = con.getTransactionManager();
  +
  +         // Set the timeout value
  +         tm.setTransactionTimeout(timeout);
  +
  +         // Start the transaction
  +         tm.begin();
  +
  +         // keep track of the transaction in enterprise context for BMT
  +         setTransaction(tm.getTransaction());        
         }
         
         public void commit()
  @@ -371,9 +389,7 @@
                      java.lang.IllegalStateException,
                      SystemException
         {
  -//DEBUG        Logger.debug("UserTransactionImpl.commit " + transaction.hashCode() 
+ " in UserTransactionImpl " + this.hashCode());
  -        
  -        con.getTransactionManager().commit();
  +         con.getTransactionManager().commit();
         }
          
         public void rollback()
  @@ -381,9 +397,7 @@
                        java.lang.SecurityException,
                        SystemException
         {
  -//DEBUG        Logger.debug("UserTransactionImpl.rollback " + 
transaction.hashCode() + " in UserTransactionImpl " + this.hashCode());
  -        
  -        con.getTransactionManager().rollback();
  +         con.getTransactionManager().rollback();
         }
         
         public void setRollbackOnly()
  @@ -397,11 +411,15 @@
         {
            return con.getTransactionManager().getStatus();
         }
  -      
  + 
  +      /**
  +       *  Set the transaction timeout value for new transactions
  +       *  started by this instance.
  +       */
         public void setTransactionTimeout(int seconds)
            throws SystemException
         {
  -         con.getTransactionManager().setTransactionTimeout(seconds);
  +         timeout = seconds;
         }
      }
   }
  
  
  
  1.6       +1 -11     jboss/src/main/org/jboss/ejb/MessageDrivenEnterpriseContext.java
  
  Index: MessageDrivenEnterpriseContext.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/MessageDrivenEnterpriseContext.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- MessageDrivenEnterpriseContext.java       2001/06/19 09:55:00     1.5
  +++ MessageDrivenEnterpriseContext.java       2001/06/21 05:14:31     1.6
  @@ -38,7 +38,7 @@
    *   @author <a href="mailto:[EMAIL PROTECTED]";>Peter Antman</a>.
    *   @author <a href="mailto:[EMAIL PROTECTED]";>Rickard �berg</a>
    *  @author <a href="[EMAIL PROTECTED]">Sebastien Alborini</a>
  - *   @version $Revision: 1.5 $
  + *   @version $Revision: 1.6 $
    */
   public class MessageDrivenEnterpriseContext
      extends EnterpriseContext
  @@ -165,16 +165,6 @@
              super.setRollbackOnly();
              
           }
  -       }
  -       
  -       public UserTransaction getUserTransaction() 
  -       { 
  -        if (((MessageDrivenMetaData)con.getBeanMetaData()).isContainerManagedTx() ) 
{
  -            // NO transaction
  -            Logger.log("MessageDriven bean is not allowed to get a UserTransactio: 
transaction is containeremanaged");
  -            throw new IllegalStateException("MessageDriven bean is not allowed to 
get a UserTransactio: transaction is containeremanaged");
  -        } else
  -            return new UserTransactionImpl();
          }
      }
   }
  
  
  
  1.13      +1 -8      
jboss/src/main/org/jboss/ejb/StatefulSessionEnterpriseContext.java
  
  Index: StatefulSessionEnterpriseContext.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/StatefulSessionEnterpriseContext.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- StatefulSessionEnterpriseContext.java     2001/06/19 09:55:00     1.12
  +++ StatefulSessionEnterpriseContext.java     2001/06/21 05:14:31     1.13
  @@ -28,7 +28,7 @@
    *   @see <related>
    *   @author <a href="mailto:[EMAIL PROTECTED]";>Rickard �berg</a>
    *  @author <a href="mailto:[EMAIL PROTECTED]";>Daniel OConnor</a>
  - *   @version $Revision: 1.12 $
  + *   @version $Revision: 1.13 $
    */
   public class StatefulSessionEnterpriseContext
      extends EnterpriseContext
  @@ -142,13 +142,6 @@
         public Object getPrimaryKey()
         {
            return id;
  -      }
  -
  -      public UserTransaction getUserTransaction()
  -      {
  -         if (((SessionMetaData)con.getBeanMetaData()).isContainerManagedTx())
  -            throw new IllegalStateException("Not a BMT bean.");
  -         return new UserTransactionImpl();
         }
      }
   }
  
  
  
  1.11      +1 -8      
jboss/src/main/org/jboss/ejb/StatelessSessionEnterpriseContext.java
  
  Index: StatelessSessionEnterpriseContext.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/StatelessSessionEnterpriseContext.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- StatelessSessionEnterpriseContext.java    2001/06/19 09:55:00     1.10
  +++ StatelessSessionEnterpriseContext.java    2001/06/21 05:14:31     1.11
  @@ -30,7 +30,7 @@
    *   @see <related>
    *   @author <a href="mailto:[EMAIL PROTECTED]";>Rickard �berg</a>
    *  @author <a href="[EMAIL PROTECTED]">Sebastien Alborini</a>
  - *   @version $Revision: 1.10 $
  + *   @version $Revision: 1.11 $
    */
   public class StatelessSessionEnterpriseContext
      extends EnterpriseContext
  @@ -127,13 +127,6 @@
               ejbLocalObject = 
((StatelessSessionContainer)con).getLocalContainerInvoker().getStatelessSessionEJBLocalObject();
 
            }
            return ejbLocalObject;
  -      }
  -
  -      public UserTransaction getUserTransaction()
  -      {
  -         if (((SessionMetaData)con.getBeanMetaData()).isContainerManagedTx())
  -            throw new IllegalStateException("Not a BMT bean.");
  -         return new UserTransactionImpl();
         }
      }
   }
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to