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]