[Mulgara-svn] r570 - branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver
andrae at mulgara.org
andrae at mulgara.org
Wed Nov 21 11:13:47 UTC 2007
Author: andrae
Date: 2007-11-21 05:13:47 -0600 (Wed, 21 Nov 2007)
New Revision: 570
Modified:
branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java
Log:
Minor compile-error fixes.
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-21 11:12:44 UTC (rev 569)
+++ branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java 2007-11-21 11:13:47 UTC (rev 570)
@@ -64,6 +64,9 @@
*/
public abstract class MulgaraTransactionFactory {
+ private static final Logger logger =
+ Logger.getLogger(MulgaraTransactionFactory.class.getName());
+
protected final MulgaraTransactionManager manager;
/**
@@ -95,7 +98,7 @@
public abstract MulgaraTransaction getTransaction(final DatabaseSession session, boolean write)
throws MulgaraTransactionException;
- protected abstract getTransactionsForSession(DatabaseSession session);
+ protected abstract Set<? extends MulgaraTransaction> getTransactionsForSession(DatabaseSession session);
/**
* Rollback, or abort all transactions associated with a DatabaseSession.
@@ -105,10 +108,10 @@
public void closingSession(DatabaseSession session) throws MulgaraTransactionException {
acquireMutex();
try {
+ Map<MulgaraTransaction, Throwable> requiresAbort = new HashMap<MulgaraTransaction, Throwable>();
try {
Throwable error = null;
- Set<MulgaraTransaction> requiresAbort = new HashSet<MulgaraTransaction>();
try {
if (manager.isHoldingWriteLock(session)) {
try {
@@ -121,15 +124,15 @@
}
}
} catch (Throwable th) {
- requiresAbort.add(writeTransaction);
+ requiresAbort.put(writeTransaction, th);
error = th;
}
- for (MulgaraTransaction transaction : sessionXAMap.getN(session)) {
+ for (MulgaraTransaction transaction : getTransactionsForSession(session)) {
try {
transaction.heuristicRollback("Rollback due to session close");
} catch (Throwable th) {
- requiresAbort.add(transaction);
+ requiresAbort.put(transaction, th);
if (error == null) {
error = th;
}
@@ -156,9 +159,9 @@
/**
* Abort as many of the transactions as we can.
*/
- protected void abortTransactions(Set<MulgaraTransaction> requiresAbort) {
+ protected void abortTransactions(Map<MulgaraTransaction, Throwable> requiresAbort) {
try {
- if (!requiresAbort.empty()) {
+ if (!requiresAbort.isEmpty()) {
// At this point the originating exception has been thrown in the caller
// so we attempt to ensure it doesn't get superseeded by anything that
// might be thrown here while logging any errors.
@@ -167,9 +170,10 @@
} catch (Throwable throw_away) { } // Logging difficulties.
try {
- for (MulgaraTransaction transaction : requiresAbort) {
+ for (MulgaraTransaction transaction : requiresAbort.keySet()) {
try {
- transaction.abort("Heuristic Rollback failed on session close");
+ transaction.abortTransaction("Heuristic Rollback failed on session close",
+ requiresAbort.get(transaction));
} catch (Throwable th) {
try {
logger.error("Error aborting transaction after heuristic rollback failure on session close", th);
@@ -206,12 +210,6 @@
throw new IllegalStateException("Attempt to release mutex without holding mutex");
}
- FIXME!: Need to figure out how to handle reservation here!
- if (mutex.getHoldCount() == 1 && Thread.currentThread().equals(reservingThread)) {
- reservingThread = null;
- reserveCondition.signal();
- }
-
mutex.unlock();
}
More information about the Mulgara-svn
mailing list