ozeigermann    2004/07/22 11:04:36

  Modified:    transaction/src/java/org/apache/commons/transaction/util/xa
                        AbstractTransactionalResource.java
                        AbstractXAResource.java TransactionalResource.java
               transaction/src/java/org/apache/commons/transaction/memory/jca
                        MapXAResource.java
  Log:
  Added patch by Stefan L�tzkendorf to allow the use 

  of suspend and resume calls in AbstractXAResource and TransactionalResource
  
  Revision  Changes    Path
  1.4       +3 -8      
jakarta-commons-sandbox/transaction/src/java/org/apache/commons/transaction/util/xa/AbstractTransactionalResource.java
  
  Index: AbstractTransactionalResource.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/transaction/src/java/org/apache/commons/transaction/util/xa/AbstractTransactionalResource.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractTransactionalResource.java        12 Jul 2004 14:47:41 -0000      1.3
  +++ AbstractTransactionalResource.java        22 Jul 2004 18:04:36 -0000      1.4
  @@ -24,7 +24,6 @@
   package org.apache.commons.transaction.util.xa;
   
   import javax.transaction.Status;
  -import javax.transaction.xa.XAException;
   import javax.transaction.xa.Xid;
   
   /**
  @@ -39,10 +38,6 @@
           this.xid = xid;
           status = STATUS_ACTIVE;
       }
  -
  -    public abstract void commit() throws XAException;
  -    public abstract void rollback() throws XAException;
  -    public abstract int prepare() throws XAException;
   
       public int getStatus() {
           return status;
  
  
  
  1.6       +8 -5      
jakarta-commons-sandbox/transaction/src/java/org/apache/commons/transaction/util/xa/AbstractXAResource.java
  
  Index: AbstractXAResource.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/transaction/src/java/org/apache/commons/transaction/util/xa/AbstractXAResource.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- AbstractXAResource.java   14 Jul 2004 09:49:17 -0000      1.5
  +++ AbstractXAResource.java   22 Jul 2004 18:04:36 -0000      1.6
  @@ -133,6 +133,7 @@
   
           switch (flags) {
               case TMSUSPEND :
  +                ts.suspend();
                   addSuspendedTransactionalResource(xid, ts);
                   removeActiveTransactionalResource(xid);
                   break;
  @@ -163,8 +164,9 @@
               case TMJOIN :
               default :
                   try {
  -                                     ts = createTransactionResource(xid);
  -                             } catch (Exception e) {
  +                    ts = createTransactionResource(xid);
  +                    ts.begin();
  +                } catch (Exception e) {
                                        getLoggerFacade().logSevere("Could not create 
new transactional  resource", e);
                                        throw new XAException(e.getMessage());
                                }
  @@ -174,6 +176,7 @@
                   if (ts == null) {
                       throw new XAException(XAException.XAER_NOTA);
                   }
  +                ts.resume();
                   removeSuspendedTransactionalResource(xid);
                   break;
           }
  
  
  
  1.4       +7 -3      
jakarta-commons-sandbox/transaction/src/java/org/apache/commons/transaction/util/xa/TransactionalResource.java
  
  Index: TransactionalResource.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/transaction/src/java/org/apache/commons/transaction/util/xa/TransactionalResource.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TransactionalResource.java        12 Jul 2004 14:47:41 -0000      1.3
  +++ TransactionalResource.java        22 Jul 2004 18:04:36 -0000      1.4
  @@ -62,6 +62,10 @@
        *             notation
        */
       public void rollback() throws XAException;
  +    
  +    public void begin() throws XAException;
  +    public void suspend() throws XAException;
  +    public void resume() throws XAException;
   
       /**
        * Returns the current status of this transaction resource.
  
  
  
  1.5       +40 -4     
jakarta-commons-sandbox/transaction/src/java/org/apache/commons/transaction/memory/jca/MapXAResource.java
  
  Index: MapXAResource.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/transaction/src/java/org/apache/commons/transaction/memory/jca/MapXAResource.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MapXAResource.java        20 Jul 2004 09:21:31 -0000      1.4
  +++ MapXAResource.java        22 Jul 2004 18:04:36 -0000      1.5
  @@ -91,6 +91,7 @@
       protected static class MapTransactionalResource extends 
AbstractTransactionalResource {
   
           TransactionalMapWrapper map;
  +        private TransactionalMapWrapper.TxContext txContext = null;
   
           LoggerFacade loggerFacade;
   
  @@ -109,6 +110,11 @@
           }
   
           public void rollback() throws XAException {
  +            // resume if suspended, because the transactional map throws an 
  +            // exception if we call prepare on suspended txns
  +            if (isSuspended())
  +                resume();
  +
               try {
                   map.rollbackTransaction();
               } catch (IllegalStateException e) {
  @@ -117,6 +123,11 @@
           }
   
           public int prepare() throws XAException {
  +            // resume if suspended, because the transactional map throws an 
  +            // exception if we call prepare on suspended txns
  +            if (isSuspended())
  +                resume();
  +
               if (map.isTransactionMarkedForRollback()) {
                   throw new XAException(XAException.XA_RBROLLBACK);
               }
  @@ -124,5 +135,30 @@
               return (map.isReadOnly() ? XA_RDONLY : XA_OK);
           }
   
  +        public void suspend() throws XAException {
  +            if (isSuspended()) {
  +                throw new XAException(XAException.XAER_PROTO);
  +            }
  +            this.txContext = map.suspendTransaction();
  +        }
  +        
  +        public void resume() throws XAException {
  +            if (!isSuspended()) {
  +                throw new XAException(XAException.XAER_PROTO);
  +            }
  +            map.resumeTransaction(this.txContext);
  +            this.txContext = null;
  +        }
  +        
  +        public void begin() throws XAException {
  +            if (isSuspended()) {
  +                throw new XAException(XAException.XAER_PROTO);
  +            }
  +            this.map.startTransaction();
  +        }
  +
  +        private boolean isSuspended() {
  +            return this.txContext != null;
  +        }
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to