dain        2005/03/01 18:34:31

  Modified:    modules/core/src/java/org/openejb/sfsb BusinessMethod.java
                        CreateMethod.java RemoveMethod.java
                        StatefulInstanceContext.java
                        StatefulInstanceContextFactory.java
                        StatefulInstanceInterceptor.java
                        StatefulSessionContext.java
  Log:

  Changed to use new TransactionManagerContext methods managing bean 
transactions
  Fixed improper handling of bean transactions in StatefulInstanceInterceptor
  Removed excessive handling of bean transactions in the SFSB and SLSB vops
  
  Revision  Changes    Path
  1.6       +3 -17     
openejb/modules/core/src/java/org/openejb/sfsb/BusinessMethod.java
  
  Index: BusinessMethod.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/sfsb/BusinessMethod.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- BusinessMethod.java       15 Feb 2005 03:24:03 -0000      1.5
  +++ BusinessMethod.java       1 Mar 2005 23:34:30 -0000       1.6
  @@ -48,7 +48,6 @@
   package org.openejb.sfsb;
   
   import org.apache.geronimo.core.service.InvocationResult;
  -import org.apache.geronimo.transaction.context.TransactionContext;
   
   import org.openejb.EJBInvocation;
   import org.openejb.EJBOperation;
  @@ -56,27 +55,14 @@
   import org.openejb.dispatch.MethodSignature;
   
   /**
  - *
  - *
    * @version $Revision$ $Date$
    */
   public class BusinessMethod extends AbstractMethodOperation {
  -    protected final boolean isBMT;
  -
  -    public BusinessMethod(Class beanClass, MethodSignature signature, 
boolean isBMT) {
  +    public BusinessMethod(Class beanClass, MethodSignature signature) {
           super(beanClass, signature);
  -        this.isBMT = isBMT;
       }
   
       public InvocationResult execute(EJBInvocation invocation) throws 
Throwable {
  -        try {
  -            return invoke(invocation, EJBOperation.BIZMETHOD);
  -        } finally {
  -            if(isBMT) {
  -                // we need to update the invocation cache of the transaction 
context
  -                // because they may have used UserTransaction to push a new 
context
  -                
invocation.setTransactionContext(TransactionContext.getContext());
  -            }
  -        }
  +        return invoke(invocation, EJBOperation.BIZMETHOD);
       }
   }
  
  
  
  1.5       +3 -13     
openejb/modules/core/src/java/org/openejb/sfsb/CreateMethod.java
  
  Index: CreateMethod.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/sfsb/CreateMethod.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- CreateMethod.java 25 Feb 2005 23:06:11 -0000      1.4
  +++ CreateMethod.java 1 Mar 2005 23:34:30 -0000       1.5
  @@ -54,7 +54,6 @@
   
   import org.apache.geronimo.core.service.InvocationResult;
   import org.apache.geronimo.core.service.SimpleInvocationResult;
  -import org.apache.geronimo.transaction.context.TransactionContext;
   
   import net.sf.cglib.reflect.FastClass;
   import org.openejb.EJBInstanceContext;
  @@ -65,22 +64,18 @@
   import org.openejb.dispatch.VirtualOperation;
   
   /**
  - *
  - *
    * @version $Revision$ $Date$
    */
   public class CreateMethod implements VirtualOperation, Serializable {
       private final Class beanClass;
       private final MethodSignature createSignature;
  -    private final boolean isBMT;
   
       private final transient FastClass fastClass;
       private final transient int createIndex;
   
  -    public CreateMethod(Class beanClass, MethodSignature signature, boolean 
isBMT) {
  +    public CreateMethod(Class beanClass, MethodSignature signature) {
           this.beanClass = beanClass;
           this.createSignature = signature;
  -        this.isBMT = isBMT;
   
           fastClass = FastClass.create(beanClass);
           Method javaMethod = signature.getMethod(beanClass);
  @@ -111,11 +106,6 @@
               }
           } finally {
               ctx.setOperation(EJBOperation.INACTIVE);
  -            if(isBMT) {
  -                // we need to update the invocation cache of the transaction 
context
  -                // because they may have used UserTransaction to push a new 
context
  -                
invocation.setTransactionContext(TransactionContext.getContext());
  -            }
           }
   
           // return a ref
  @@ -132,6 +122,6 @@
       }
   
       private Object readResolve() {
  -        return new CreateMethod(beanClass, createSignature, isBMT);
  +        return new CreateMethod(beanClass, createSignature);
       }
   }
  
  
  
  1.4       +8 -20     
openejb/modules/core/src/java/org/openejb/sfsb/RemoveMethod.java
  
  Index: RemoveMethod.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/sfsb/RemoveMethod.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- RemoveMethod.java 18 Jul 2004 22:32:24 -0000      1.3
  +++ RemoveMethod.java 1 Mar 2005 23:34:30 -0000       1.4
  @@ -48,38 +48,26 @@
   package org.openejb.sfsb;
   
   import org.apache.geronimo.core.service.InvocationResult;
  -import org.apache.geronimo.transaction.context.TransactionContext;
  -
   import org.openejb.EJBInvocation;
   import org.openejb.EJBOperation;
   import org.openejb.dispatch.MethodSignature;
  +import org.openejb.dispatch.AbstractMethodOperation;
   
   /**
  - * Virtual operation handling removal of an instance.
  + * Virtual operation handling removal of a stateful session bean instance 
instance.
    *
    * @version $Revision$ $Date$
    */
  -public class RemoveMethod extends BusinessMethod {
  -    public RemoveMethod(Class beanClass, MethodSignature signature, boolean 
isBMT) {
  -        super(beanClass, signature, isBMT);
  +public class RemoveMethod extends AbstractMethodOperation {
  +    public RemoveMethod(Class beanClass, MethodSignature signature) {
  +        super(beanClass, signature);
       }
   
       public InvocationResult execute(EJBInvocation invocation) throws 
Throwable {
  -        StatefulInstanceContext ctx = (StatefulInstanceContext) 
invocation.getEJBInstanceContext();
  -        InvocationResult result = null;
  -        try {
  -            result = invoke(invocation, EJBOperation.EJBREMOVE);
  -        } finally {
  -            if(isBMT) {
  -                // we need to update the invocation cache of the transaction 
context
  -                // because they may have used UserTransaction to push a new 
context
  -                
invocation.setTransactionContext(TransactionContext.getContext());
  -            }
  -        }
  -
  +        InvocationResult result = invoke(invocation, EJBOperation.EJBREMOVE);
           if (result.isNormal()) {
               // flag the context as dead so it does not get put back in the 
cache
  -            ctx.die();
  +            invocation.getEJBInstanceContext().die();
           }
           return result;
       }
  
  
  
  1.12      +12 -10    
openejb/modules/core/src/java/org/openejb/sfsb/StatefulInstanceContext.java
  
  Index: StatefulInstanceContext.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/sfsb/StatefulInstanceContext.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- StatefulInstanceContext.java      25 Feb 2005 23:06:11 -0000      1.11
  +++ StatefulInstanceContext.java      1 Mar 2005 23:34:30 -0000       1.12
  @@ -52,9 +52,9 @@
   import javax.ejb.SessionSynchronization;
   
   import org.apache.geronimo.core.service.Interceptor;
  -import org.apache.geronimo.transaction.UserTransactionImpl;
  -import org.apache.geronimo.transaction.context.BeanTransactionContext;
  +import org.apache.geronimo.transaction.context.UserTransactionImpl;
   import org.apache.geronimo.transaction.context.TransactionContextManager;
  +import org.apache.geronimo.transaction.context.TransactionContext;
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   import org.openejb.AbstractInstanceContext;
  @@ -78,7 +78,7 @@
       private final EJBInvocation afterBeginInvocation;
       private final EJBInvocation beforeCompletionInvocation;
       private final SystemMethodIndices systemMethodIndices;
  -    private BeanTransactionContext preexistingContext;
  +    private TransactionContext preexistingContext;
       private EJBOperation operation;
       private InstanceCache cache;
   
  @@ -116,11 +116,11 @@
           return id;
       }
   
  -    public BeanTransactionContext getPreexistingContext() {
  +    public TransactionContext getPreexistingContext() {
           return preexistingContext;
       }
   
  -    public void setPreexistingContext(BeanTransactionContext 
preexistingContext) {
  +    public void setPreexistingContext(TransactionContext preexistingContext) 
{
           this.preexistingContext = preexistingContext;
       }
   
  @@ -134,10 +134,12 @@
   
       public void die() {
           if (preexistingContext != null) {
  -            try {
  -                preexistingContext.rollback();
  -            } catch (Exception e) {
  -                log.warn("Unable to roll back", e);
  +            if (preexistingContext.isActive()) {
  +                try {
  +                    preexistingContext.rollback();
  +                } catch (Exception e) {
  +                    log.warn("Unable to roll back", e);
  +                }
               }
               preexistingContext = null;
           }
  
  
  
  1.12      +2 -2      
openejb/modules/core/src/java/org/openejb/sfsb/StatefulInstanceContextFactory.java
  
  Index: StatefulInstanceContextFactory.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/sfsb/StatefulInstanceContextFactory.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- StatefulInstanceContextFactory.java       5 Oct 2004 07:04:02 -0000       
1.11
  +++ StatefulInstanceContextFactory.java       1 Mar 2005 23:34:30 -0000       
1.12
  @@ -54,8 +54,8 @@
   import javax.ejb.SessionContext;
   
   import org.apache.geronimo.transaction.InstanceContext;
  -import org.apache.geronimo.transaction.UserTransactionImpl;
   import org.apache.geronimo.transaction.context.TransactionContextManager;
  +import org.apache.geronimo.transaction.context.UserTransactionImpl;
   import org.apache.geronimo.core.service.Interceptor;
   
   import org.openejb.EJBInstanceFactory;
  
  
  
  1.6       +12 -44    
openejb/modules/core/src/java/org/openejb/sfsb/StatefulInstanceInterceptor.java
  
  Index: StatefulInstanceInterceptor.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/sfsb/StatefulInstanceInterceptor.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- StatefulInstanceInterceptor.java  25 Feb 2005 23:06:11 -0000      1.5
  +++ StatefulInstanceInterceptor.java  1 Mar 2005 23:34:30 -0000       1.6
  @@ -53,20 +53,15 @@
   import org.apache.geronimo.core.service.Interceptor;
   import org.apache.geronimo.core.service.Invocation;
   import org.apache.geronimo.core.service.InvocationResult;
  +import org.apache.geronimo.transaction.InstanceContext;
   import org.apache.geronimo.transaction.context.TransactionContext;
  -import org.apache.geronimo.transaction.context.BeanTransactionContext;
   import org.apache.geronimo.transaction.context.TransactionContextManager;
  -import org.apache.geronimo.transaction.context.UnspecifiedTransactionContext;
  -import org.apache.geronimo.transaction.InstanceContext;
  -import org.apache.commons.logging.Log;
  -import org.apache.commons.logging.LogFactory;
  -
   import org.openejb.EJBInvocation;
  -import org.openejb.NotReentrantLocalException;
   import org.openejb.NotReentrantException;
  -import org.openejb.transaction.UncommittedTransactionException;
  +import org.openejb.NotReentrantLocalException;
   import org.openejb.cache.InstanceCache;
   import org.openejb.cache.InstanceFactory;
  +import org.openejb.transaction.UncommittedTransactionException;
   
   /**
    * Interceptor for Stateful Session EJBs that acquires an instance for 
execution.
  @@ -76,7 +71,6 @@
    * @version $Revision$ $Date$
    */
   public final class StatefulInstanceInterceptor implements Interceptor {
  -    private static final Log log = 
LogFactory.getLog(StatefulInstanceInterceptor.class);
       private final Interceptor next;
       private final Object containerId;
       private final InstanceFactory factory;
  @@ -99,15 +93,10 @@
           ejbInvocation.setEJBInstanceContext(ctx);
   
           // resume the preexisting transaction context
  -        TransactionContext oldTransactionContext = 
transactionContextManager.getContext();
           if (ctx.getPreexistingContext() != null) {
  -            BeanTransactionContext preexistingContext = 
ctx.getPreexistingContext();
  +            TransactionContext preexistingContext = 
ctx.getPreexistingContext();
  +            
transactionContextManager.resumeBeanTransactionContext(preexistingContext);
               ctx.setPreexistingContext(null);
  -            preexistingContext.setOldContext((UnspecifiedTransactionContext) 
oldTransactionContext);
  -
  -            ejbInvocation.setTransactionContext(preexistingContext);
  -            transactionContextManager.setContext(preexistingContext);
  -            preexistingContext.resume();
           }
   
           // check reentrancy
  @@ -119,7 +108,8 @@
               }
           }
   
  -        InstanceContext oldInstanceContext = 
ejbInvocation.getTransactionContext().beginInvocation(ctx);
  +        TransactionContext oldTransactionContext = 
ejbInvocation.getTransactionContext();
  +        InstanceContext oldInstanceContext = 
oldTransactionContext.beginInvocation(ctx);
           try {
               // invoke next
               InvocationResult invocationResult = next.invoke(invocation);
  @@ -127,19 +117,11 @@
               // if we have a BMT still associated with the thread, suspend it 
and save it off for the next invocation
               TransactionContext currentContext = 
transactionContextManager.getContext();
               if (oldTransactionContext != currentContext) {
  -                BeanTransactionContext preexistingContext = 
(BeanTransactionContext)currentContext;
  -                if (preexistingContext.getOldContext() != 
oldTransactionContext) {
  +                TransactionContext preexistingContext = 
transactionContextManager.suspendBeanTransactionContext();
  +                ctx.setPreexistingContext(preexistingContext);
  +                if (transactionContextManager.getContext() != 
oldTransactionContext) {
                       throw new UncommittedTransactionException("Found an 
uncommitted bean transaction from another session bean");
                   }
  -                // suspend and save off the BMT context
  -                preexistingContext.suspend();
  -                preexistingContext.setOldContext(null);
  -                ctx.setPreexistingContext(preexistingContext);
  -
  -                // resume the old unsupported transaction context
  -                ejbInvocation.setTransactionContext(oldTransactionContext);
  -                transactionContextManager.setContext(oldTransactionContext);
  -                oldTransactionContext.resume();
               }
   
               return invocationResult;
  @@ -147,23 +129,9 @@
               // we must kill the instance when a system exception is thrown
               ctx.die();
   
  -            // if we have tx context, other then our old tx context, 
associated with the thread roll it back
  -            if (oldTransactionContext != 
transactionContextManager.getContext()) {
  -                try {
  -                    transactionContextManager.getContext().rollback();
  -                } catch (Exception e) {
  -                    log.warn("Unable to roll back", e);
  -                }
  -
  -                // and resume the old transaction
  -                ejbInvocation.setTransactionContext(oldTransactionContext);
  -                transactionContextManager.setContext(oldTransactionContext);
  -                oldTransactionContext.resume();
  -            }
  -
               throw t;
           } finally {
  -            
ejbInvocation.getTransactionContext().endInvocation(oldInstanceContext);
  +            oldTransactionContext.endInvocation(oldInstanceContext);
               ejbInvocation.setEJBInstanceContext(null);
           }
       }
  
  
  
  1.7       +2 -2      
openejb/modules/core/src/java/org/openejb/sfsb/StatefulSessionContext.java
  
  Index: StatefulSessionContext.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/sfsb/StatefulSessionContext.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- StatefulSessionContext.java       14 Feb 2005 18:32:31 -0000      1.6
  +++ StatefulSessionContext.java       1 Mar 2005 23:34:30 -0000       1.7
  @@ -61,8 +61,8 @@
   import org.openejb.EJBInstanceContext;
   import org.openejb.EJBOperation;
   import org.openejb.timer.TimerState;
  -import org.apache.geronimo.transaction.UserTransactionImpl;
   import org.apache.geronimo.transaction.context.TransactionContextManager;
  +import org.apache.geronimo.transaction.context.UserTransactionImpl;
   
   /**
    * Implementation of SessionContext using the State pattern to determine
  
  
  

Reply via email to