[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