ozeigermann    2004/04/02 04:58:46

  Modified:    src/webdav/server/org/apache/slide/webdav/method Tag:
                        SLIDE_2_1_EXTERNAL_TX AbstractWebdavMethod.java
  Log:
  Redid lost external transaction wrapper
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.26.2.1  +36 -6     
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java
  
  Index: AbstractWebdavMethod.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java,v
  retrieving revision 1.26
  retrieving revision 1.26.2.1
  diff -u -r1.26 -r1.26.2.1
  --- AbstractWebdavMethod.java 2 Apr 2004 07:30:28 -0000       1.26
  +++ AbstractWebdavMethod.java 2 Apr 2004 12:58:46 -0000       1.26.2.1
  @@ -31,6 +31,8 @@
   
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
  +import javax.transaction.SystemException;
  +import javax.transaction.Transaction;
   
   import org.apache.slide.common.Domain;
   import org.apache.slide.common.NamespaceAccessToken;
  @@ -54,6 +56,7 @@
   import org.apache.slide.structure.ObjectNode;
   import org.apache.slide.structure.ObjectNotFoundException;
   import org.apache.slide.structure.Structure;
  +import org.apache.slide.transaction.ExternalTransactionContext;
   import org.apache.slide.util.Messages;
   import org.apache.slide.util.XMLValue;
   import org.apache.slide.util.logger.Logger;
  @@ -287,9 +290,25 @@
           parseRequestHeaders();
   
           boolean transactionIsStarted = false;
  +        boolean isExternalTx = false;
  +        String txId = null;
           try {
               parseRequest();
  -            if (methodNeedsTransactionSupport()) {
  +            
  +            ExternalTransactionContext externalTransaction = null;
  +            
  +            txId = requestHeaders.getTxId();
  +            if (txId != null) {
  +                externalTransaction = 
ExternalTransactionContext.lookupContext(txId);
  +                if (externalTransaction != null) {
  +                    Domain.log("Using external transaction " + txId, LOG_CHANNEL, 
Logger.INFO);
  +                    isExternalTx = true;
  +                    Transaction tx = externalTransaction.getTransaction(); 
  +                    token.getTransactionManager().resume(tx);
  +                }
  +            }
  +            
  +            if (!isExternalTx && methodNeedsTransactionSupport()) {
                   token.begin();
                   transactionIsStarted = true;
               }
  @@ -320,7 +339,7 @@
               catch (SlideException e) {}
   
               executeRequest();
  -            if (methodNeedsTransactionSupport()) {
  +            if (!isExternalTx && methodNeedsTransactionSupport()) {
                   token.commit();
                   transactionIsStarted = false;
               }
  @@ -333,13 +352,24 @@
               sendError( statusCode, ex );
               throw new WebdavException( statusCode );
           } finally {
  -            if (transactionIsStarted && methodNeedsTransactionSupport()) {
  +            if (!isExternalTx && transactionIsStarted && 
methodNeedsTransactionSupport()) {
                   // Something went wrong, we are here and the TA is still open
                   try {
                       token.rollback();
                   } catch (Exception e) {
                   }
               }
  +            if (isExternalTx) {
  +                Transaction transaction;
  +                try {
  +                    transaction = token.getTransactionManager().suspend();
  +                    ExternalTransactionContext.registerContext(txId, transaction);
  +                } catch (SystemException e) {
  +                    // TODO Auto-generated catch block
  +                    e.printStackTrace();
  +                }
  +            }
  +
           }
   
       }
  
  
  

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

Reply via email to