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]