djencks     2004/07/18 18:32:26

  Modified:    modules/core/src/java/org/openejb/transaction
                        BeanPolicy.java ContainerPolicy.java
                        TransactionContextInterceptor.java
                        TransactionPolicy.java
                        TransactionPolicyManager.java
  Log:

  Add timer support to session and mdbs. (entities still todo). Adapt to 
TransactionContextManager. Adapt to deploying with external plan.
  
  Revision  Changes    Path
  1.4       +17 -24    
openejb/modules/core/src/java/org/openejb/transaction/BeanPolicy.java
  
  Index: BeanPolicy.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/transaction/BeanPolicy.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BeanPolicy.java   13 Apr 2004 20:18:49 -0000      1.3
  +++ BeanPolicy.java   18 Jul 2004 22:32:26 -0000      1.4
  @@ -47,15 +47,12 @@
    */
   package org.openejb.transaction;
   
  -import javax.transaction.TransactionManager;
  -
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   import org.apache.geronimo.core.service.Interceptor;
   import org.apache.geronimo.core.service.InvocationResult;
  -import org.apache.geronimo.transaction.TransactionContext;
  -import org.apache.geronimo.transaction.UnspecifiedTransactionContext;
  -
  +import org.apache.geronimo.transaction.context.TransactionContext;
  +import org.apache.geronimo.transaction.context.TransactionContextManager;
   import org.openejb.EJBInvocation;
   
   /**
  @@ -67,27 +64,25 @@
       private static final Log log = LogFactory.getLog(BeanPolicy.class);
   
       public static final TransactionPolicy Stateless = new TransactionPolicy() {
  -        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionManager txnManager) throws Throwable {
  -            TransactionContext clientContext = TransactionContext.getContext();
  +        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
  +            TransactionContext clientContext = 
transactionContextManager.getContext();
               if (clientContext != null) {
                   clientContext.suspend();
               }
               try {
  -                TransactionContext beanContext = new 
UnspecifiedTransactionContext();
  -                TransactionContext.setContext(beanContext);
  -                beanContext.begin();
  +                TransactionContext beanContext = 
transactionContextManager.newUnspecifiedTransactionContext();
                   ejbInvocation.setTransactionContext(beanContext);
                   try {
                       InvocationResult result = interceptor.invoke(ejbInvocation);
  -                    if (beanContext != TransactionContext.getContext()) {
  +                    if (beanContext != transactionContextManager.getContext()) {
                           throw new UncommittedTransactionException();
                       }
                       beanContext.commit();
                       return result;
                   } catch (Throwable t) {
                       try {
  -                        if (beanContext != TransactionContext.getContext()) {
  -                            TransactionContext.getContext().rollback();
  +                        if (beanContext != transactionContextManager.getContext()) {
  +                            transactionContextManager.getContext().rollback();
                           }
                       } catch (Exception e) {
                           log.warn("Unable to roll back", e);
  @@ -101,7 +96,7 @@
                   }
               } finally {
                   ejbInvocation.setTransactionContext(clientContext);
  -                TransactionContext.setContext(clientContext);
  +                transactionContextManager.setContext(clientContext);
                   if (clientContext != null) {
                       clientContext.resume();
                   }
  @@ -113,27 +108,25 @@
       };
   
       public static final TransactionPolicy Stateful = new TransactionPolicy() {
  -        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionManager txnManager) throws Throwable {
  -            TransactionContext clientContext = TransactionContext.getContext();
  +        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
  +            TransactionContext clientContext = 
transactionContextManager.getContext();
               if (clientContext != null) {
                   clientContext.suspend();
               }
               try {
  -                TransactionContext beanContext = new 
UnspecifiedTransactionContext();
  -                TransactionContext.setContext(beanContext);
  -                beanContext.begin();
  +                TransactionContext beanContext = 
transactionContextManager.newUnspecifiedTransactionContext();
                   ejbInvocation.setTransactionContext(beanContext);
                   try {
                       InvocationResult result = interceptor.invoke(ejbInvocation);
  -                    if (beanContext != TransactionContext.getContext()) {
  +                    if (beanContext != transactionContextManager.getContext()) {
                           throw new UncommittedTransactionException("Support for 
transactions held between invocations is not supported");
                       }
                       beanContext.commit();
                       return result;
                   } catch (Throwable t) {
                       try {
  -                        if (beanContext != TransactionContext.getContext()) {
  -                            TransactionContext.getContext().rollback();
  +                        if (beanContext != transactionContextManager.getContext()) {
  +                            transactionContextManager.getContext().rollback();
                           }
                       } catch (Exception e) {
                           log.warn("Unable to roll back", e);
  @@ -147,7 +140,7 @@
                   }
               } finally {
                   ejbInvocation.setTransactionContext(clientContext);
  -                TransactionContext.setContext(clientContext);
  +                transactionContextManager.setContext(clientContext);
                   if (clientContext != null) {
                       clientContext.resume();
                   }
  
  
  
  1.4       +33 -48    
openejb/modules/core/src/java/org/openejb/transaction/ContainerPolicy.java
  
  Index: ContainerPolicy.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/transaction/ContainerPolicy.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ContainerPolicy.java      14 Apr 2004 05:57:27 -0000      1.3
  +++ ContainerPolicy.java      18 Jul 2004 22:32:26 -0000      1.4
  @@ -48,7 +48,6 @@
   package org.openejb.transaction;
   
   import javax.ejb.TransactionRequiredLocalException;
  -import javax.transaction.TransactionManager;
   import javax.transaction.TransactionRequiredException;
   
   import org.apache.commons.logging.Log;
  @@ -56,11 +55,9 @@
   import org.apache.geronimo.core.service.Interceptor;
   import org.apache.geronimo.core.service.InvocationResult;
   import org.apache.geronimo.core.service.SimpleInvocationResult;
  -import org.apache.geronimo.transaction.TransactionContext;
  -import org.apache.geronimo.transaction.UnspecifiedTransactionContext;
  -import org.apache.geronimo.transaction.InheritableTransactionContext;
  -import org.apache.geronimo.transaction.ContainerTransactionContext;
  -
  +import org.apache.geronimo.transaction.context.InheritableTransactionContext;
  +import org.apache.geronimo.transaction.context.TransactionContext;
  +import org.apache.geronimo.transaction.context.TransactionContextManager;
   import org.openejb.EJBInvocation;
   
   /**
  @@ -79,17 +76,15 @@
       public static final TransactionPolicy Never = new TxNever();
       public static final TransactionPolicy BeforeDelivery = new TxBeforeDelivery();
       public static final TransactionPolicy AfterDelivery = new TxAfterDelivery();
  -    
  +
       private static final class TxNotSupported implements TransactionPolicy {
  -        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionManager txnManager) throws Throwable {
  -            TransactionContext clientContext = TransactionContext.getContext();
  +        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
  +            TransactionContext clientContext = 
transactionContextManager.getContext();
               if (clientContext != null) {
                   clientContext.suspend();
               }
               try {
  -                TransactionContext beanContext = new 
UnspecifiedTransactionContext();
  -                TransactionContext.setContext(beanContext);
  -                beanContext.begin();
  +                TransactionContext beanContext = 
transactionContextManager.newUnspecifiedTransactionContext();
                   ejbInvocation.setTransactionContext(beanContext);
                   try {
                       InvocationResult result = interceptor.invoke(ejbInvocation);
  @@ -105,7 +100,7 @@
                   }
               } finally {
                   ejbInvocation.setTransactionContext(clientContext);
  -                TransactionContext.setContext(clientContext);
  +                transactionContextManager.setContext(clientContext);
                   if (clientContext != null) {
                       clientContext.resume();
                   }
  @@ -120,8 +115,8 @@
           }
       }
       private static final class TxRequired implements TransactionPolicy {
  -        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionManager txnManager) throws Throwable {
  -            TransactionContext clientContext = TransactionContext.getContext();
  +        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
  +            TransactionContext clientContext = 
transactionContextManager.getContext();
               if (clientContext instanceof InheritableTransactionContext) {
                   try {
                       ejbInvocation.setTransactionContext(clientContext);
  @@ -135,9 +130,7 @@
                   clientContext.suspend();
               }
               try {
  -                TransactionContext beanContext = new 
ContainerTransactionContext(txnManager);
  -                TransactionContext.setContext(beanContext);
  -                beanContext.begin();
  +                TransactionContext beanContext = 
transactionContextManager.newContainerTransactionContext();
                   ejbInvocation.setTransactionContext(beanContext);
                   try {
                       InvocationResult result = interceptor.invoke(ejbInvocation);
  @@ -153,7 +146,7 @@
                   }
               } finally {
                   ejbInvocation.setTransactionContext(clientContext);
  -                TransactionContext.setContext(clientContext);
  +                transactionContextManager.setContext(clientContext);
                   if (clientContext != null) {
                       clientContext.resume();
                   }
  @@ -168,8 +161,8 @@
           }
       }
       private static final class TxSupports implements TransactionPolicy {
  -        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionManager txnManager) throws Throwable {
  -            TransactionContext clientContext = TransactionContext.getContext();
  +        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
  +            TransactionContext clientContext = 
transactionContextManager.getContext();
               if (clientContext != null) {
                   try {
                       ejbInvocation.setTransactionContext(clientContext);
  @@ -180,9 +173,7 @@
               }
   
               try {
  -                TransactionContext beanContext = new 
UnspecifiedTransactionContext();
  -                TransactionContext.setContext(beanContext);
  -                beanContext.begin();
  +                TransactionContext beanContext = 
transactionContextManager.newUnspecifiedTransactionContext();
                   ejbInvocation.setTransactionContext(beanContext);
                   try {
                       InvocationResult result = interceptor.invoke(ejbInvocation);
  @@ -198,7 +189,7 @@
                   }
               } finally {
                   ejbInvocation.setTransactionContext(null);
  -                TransactionContext.setContext(null);
  +                transactionContextManager.setContext(null);
               }
           }
           public String toString() {
  @@ -210,16 +201,14 @@
           }
       }
       private static final class TxRequiresNew implements TransactionPolicy {
  -        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionManager txnManager) throws Throwable {
  -            TransactionContext clientContext = TransactionContext.getContext();
  +        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
  +            TransactionContext clientContext = 
transactionContextManager.getContext();
   
               if (clientContext != null) {
                   clientContext.suspend();
               }
               try {
  -                TransactionContext beanContext = new 
ContainerTransactionContext(txnManager);
  -                TransactionContext.setContext(beanContext);
  -                beanContext.begin();
  +                TransactionContext beanContext = 
transactionContextManager.newContainerTransactionContext();
                   ejbInvocation.setTransactionContext(beanContext);
                   try {
                       InvocationResult result = interceptor.invoke(ejbInvocation);
  @@ -235,7 +224,7 @@
                   }
               } finally {
                   ejbInvocation.setTransactionContext(clientContext);
  -                TransactionContext.setContext(clientContext);
  +                transactionContextManager.setContext(clientContext);
                   if (clientContext != null) {
                       clientContext.resume();
                   }
  @@ -250,8 +239,8 @@
           }
       }
       private static final class TxMandatory implements TransactionPolicy {
  -        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionManager txnManager) throws Throwable {
  -            TransactionContext clientContext = TransactionContext.getContext();
  +        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
  +            TransactionContext clientContext = 
transactionContextManager.getContext();
               if (clientContext instanceof InheritableTransactionContext) {
                   try {
                       ejbInvocation.setTransactionContext(clientContext);
  @@ -276,8 +265,8 @@
           }
       }
       private static final class TxNever implements TransactionPolicy {
  -        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionManager txnManager) throws Throwable {
  -            TransactionContext clientContext = TransactionContext.getContext();
  +        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
  +            TransactionContext clientContext = 
transactionContextManager.getContext();
   
               if (clientContext instanceof InheritableTransactionContext) {
                   throw new TransactionNotSupportedException();
  @@ -293,9 +282,7 @@
               }
   
               try {
  -                TransactionContext beanContext = new 
UnspecifiedTransactionContext();
  -                TransactionContext.setContext(beanContext);
  -                beanContext.begin();
  +                TransactionContext beanContext = 
transactionContextManager.newUnspecifiedTransactionContext();
                   ejbInvocation.setTransactionContext(beanContext);
                   try {
                       InvocationResult result = interceptor.invoke(ejbInvocation);
  @@ -311,7 +298,7 @@
                   }
               } finally {
                   ejbInvocation.setTransactionContext(null);
  -                TransactionContext.setContext(null);
  +                transactionContextManager.setContext(null);
               }
           }
           public String toString() {
  @@ -324,8 +311,8 @@
       }
       //TODO INCOMPLETE: XAResource is not enlisted in new tx. Method tx attr. is not 
checked. clientContext is not saved.
       private static final class TxBeforeDelivery implements TransactionPolicy {
  -        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionManager txnManager) throws Throwable {
  -            TransactionContext clientContext = TransactionContext.getContext();
  +        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
  +            TransactionContext clientContext = 
transactionContextManager.getContext();
               if (clientContext instanceof InheritableTransactionContext) {
                   try {
                       ejbInvocation.setTransactionContext(clientContext);
  @@ -339,9 +326,7 @@
                   clientContext.suspend();
               }
               try {
  -                TransactionContext beanContext = new 
ContainerTransactionContext(txnManager);
  -                TransactionContext.setContext(beanContext);
  -                beanContext.begin();
  +                TransactionContext beanContext = 
transactionContextManager.newContainerTransactionContext();
                   ejbInvocation.setTransactionContext(beanContext);
                   return new SimpleInvocationResult(true, null);
               } catch (Exception e) {
  @@ -358,8 +343,8 @@
       }
       //TODO really broken. possible (imported) tx context is not restored.  
XAResource is not delisted.
       private static final class TxAfterDelivery implements TransactionPolicy {
  -        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionManager txnManager) throws Throwable {
  -            TransactionContext beanContext = TransactionContext.getContext();
  +        public InvocationResult invoke(Interceptor interceptor, EJBInvocation 
ejbInvocation, TransactionContextManager transactionContextManager) throws Throwable {
  +            TransactionContext beanContext = transactionContextManager.getContext();
               try {
                   try {
                       beanContext.commit();
  @@ -374,7 +359,7 @@
                   }
               } finally {
                   ejbInvocation.setTransactionContext(null);
  -                TransactionContext.setContext(null);
  +                transactionContextManager.setContext(null);
               }
           }
           public String toString() {
  
  
  
  1.3       +6 -8      
openejb/modules/core/src/java/org/openejb/transaction/TransactionContextInterceptor.java
  
  Index: TransactionContextInterceptor.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/transaction/TransactionContextInterceptor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TransactionContextInterceptor.java        21 Mar 2004 21:26:37 -0000      1.2
  +++ TransactionContextInterceptor.java        18 Jul 2004 22:32:26 -0000      1.3
  @@ -47,12 +47,10 @@
    */
   package org.openejb.transaction;
   
  -import javax.transaction.TransactionManager;
  -
   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.context.TransactionContextManager;
   import org.openejb.EJBInterfaceType;
   import org.openejb.EJBInvocation;
   
  @@ -61,12 +59,12 @@
    */
   public class TransactionContextInterceptor implements Interceptor {
       private final Interceptor next;
  -    private final TransactionManager txnManager;
  +    private final TransactionContextManager transactionContextManager;
       private final TransactionPolicyManager transactionPolicyManager;
   
  -    public TransactionContextInterceptor(Interceptor next, TransactionManager 
txnManager, TransactionPolicyManager transactionPolicyManager) {
  +    public TransactionContextInterceptor(Interceptor next, 
TransactionContextManager transactionContextManager, TransactionPolicyManager 
transactionPolicyManager) {
           this.next = next;
  -        this.txnManager = txnManager;
  +        this.transactionContextManager = transactionContextManager;
           this.transactionPolicyManager = transactionPolicyManager;
       }
   
  @@ -79,6 +77,6 @@
   
           TransactionPolicy policy = 
transactionPolicyManager.getTransactionPolicy(invocationType, methodIndex);
           assert policy != null: "transaction policy array was not set up correctly, 
no policy for " + invocation;
  -        return policy.invoke(next, ejbInvocation, txnManager);
  +        return policy.invoke(next, ejbInvocation, transactionContextManager);
       }
   }
  
  
  
  1.3       +3 -4      
openejb/modules/core/src/java/org/openejb/transaction/TransactionPolicy.java
  
  Index: TransactionPolicy.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/transaction/TransactionPolicy.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TransactionPolicy.java    3 Apr 2004 22:20:11 -0000       1.2
  +++ TransactionPolicy.java    18 Jul 2004 22:32:26 -0000      1.3
  @@ -48,11 +48,10 @@
   package org.openejb.transaction;
   
   import java.io.Serializable;
  -import javax.transaction.TransactionManager;
   
   import org.apache.geronimo.core.service.Interceptor;
   import org.apache.geronimo.core.service.InvocationResult;
  -
  +import org.apache.geronimo.transaction.context.TransactionContextManager;
   import org.openejb.EJBInvocation;
   
   /**
  @@ -61,5 +60,5 @@
    * @version $Revision$ $Date$
    */
   public interface TransactionPolicy extends Serializable {
  -    InvocationResult invoke(Interceptor interceptor, EJBInvocation ejbInvocation, 
TransactionManager txnManager) throws Throwable;
  +    InvocationResult invoke(Interceptor interceptor, EJBInvocation ejbInvocation, 
TransactionContextManager transactionContextManager) throws Throwable;
   }
  
  
  
  1.4       +4 -1      
openejb/modules/core/src/java/org/openejb/transaction/TransactionPolicyManager.java
  
  Index: TransactionPolicyManager.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/transaction/TransactionPolicyManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TransactionPolicyManager.java     3 Apr 2004 22:20:11 -0000       1.3
  +++ TransactionPolicyManager.java     18 Jul 2004 22:32:26 -0000      1.4
  @@ -48,6 +48,7 @@
   package org.openejb.transaction;
   
   import java.io.Serializable;
  +import java.util.Arrays;
   
   import org.openejb.EJBInterfaceType;
   import org.openejb.deployment.TransactionPolicySource;
  @@ -65,6 +66,8 @@
           transactionPolicy[EJBInterfaceType.LOCALHOME.getOrdinal()] = 
mapPolicies("LocalHome", signatures, transactionPolicySource);
           transactionPolicy[EJBInterfaceType.LOCAL.getOrdinal()] = 
mapPolicies("Local", signatures, transactionPolicySource);
           transactionPolicy[EJBInterfaceType.WEB_SERVICE.getOrdinal()] = 
mapPolicies("ServiceEndpoint", signatures, transactionPolicySource);
  +        transactionPolicy[EJBInterfaceType.TIMEOUT.getOrdinal()] = new 
TransactionPolicy[signatures.length];
  +        Arrays.fill(transactionPolicy[EJBInterfaceType.TIMEOUT.getOrdinal()], 
ContainerPolicy.Supports); //we control the transaction from the top of the stack.
       }
   
       public TransactionPolicy getTransactionPolicy(EJBInterfaceType invocationType, 
int operationIndex) {
  
  
  

Reply via email to