[Mulgara-svn] r577 - branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver
andrae at mulgara.org
andrae at mulgara.org
Thu Nov 22 09:37:06 UTC 2007
Author: andrae
Date: 2007-11-22 03:37:06 -0600 (Thu, 22 Nov 2007)
New Revision: 577
Modified:
branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java
branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java
Log:
Wrapped calls to transaction control operations within a call to
execute(TransactionalOperation) - required to ensure calls to activate are made
correctly.
Modified: branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java
===================================================================
--- branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java 2007-11-22 09:34:18 UTC (rev 576)
+++ branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraInternalTransactionFactory.java 2007-11-22 09:37:06 UTC (rev 577)
@@ -90,7 +90,7 @@
throws MulgaraTransactionException {
acquireMutex();
try {
- if (write && manager.isHoldingWriteLock(session)) {
+ if (manager.isHoldingWriteLock(session)) {
return writeTransaction;
}
@@ -173,7 +173,11 @@
try {
if (manager.isHoldingWriteLock(session)) {
try {
- writeTransaction.heuristicRollback("Explicit Rollback");
+ writeTransaction.execute(new TransactionOperation() {
+ public void execute() throws MulgaraTransactionException {
+ writeTransaction.heuristicRollback("Explicit Rollback");
+ }
+ });
// FIXME: Should be checking status here, not writelock.
if (manager.isHoldingWriteLock(session)) {
// transaction referenced by something - need to explicitly end it.
@@ -225,7 +229,12 @@
}
});
} finally {
- manager.releaseWriteLock(session);
+ // This should have been cleaned up by the commit above, but if it
+ // hasn't then if we don't release here we could deadlock the
+ // transaction manager
+ if (manager.isHoldingWriteLock(session)) {
+ manager.releaseWriteLock(session);
+ }
this.autoCommit = true;
}
} else if (failedSessions.contains(session)) {
Modified: branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java
===================================================================
--- branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java 2007-11-22 09:34:18 UTC (rev 576)
+++ branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java 2007-11-22 09:37:06 UTC (rev 577)
@@ -117,7 +117,11 @@
try {
if (writeTransaction != null) {
logger.warn("Terminating session while holding writelock:" + session + ": " + writeTransaction);
- writeTransaction.heuristicRollback("Session closed while holding write lock");
+ writeTransaction.execute(new TransactionOperation() {
+ public void execute() throws MulgaraTransactionException {
+ writeTransaction.heuristicRollback("Session closed while holding write lock");
+ }
+ });
}
} finally {
manager.releaseWriteLock(session);
@@ -130,7 +134,13 @@
for (MulgaraTransaction transaction : getTransactionsForSession(session)) {
try {
- transaction.heuristicRollback("Rollback due to session close");
+ // This is final so we can create the closure.
+ final MulgaraTransaction xa = transaction;
+ transaction.execute(new TransactionOperation() {
+ public void execute() throws MulgaraTransactionException {
+ xa.heuristicRollback("Rollback due to session close");
+ }
+ });
} catch (Throwable th) {
requiresAbort.put(transaction, th);
if (error == null) {
More information about the Mulgara-svn
mailing list