[Mulgara-svn] r649 - branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver

ronald at mulgara.org ronald at mulgara.org
Sat Feb 23 05:55:07 UTC 2008


Author: ronald
Date: 2008-02-22 21:55:06 -0800 (Fri, 22 Feb 2008)
New Revision: 649

Modified:
   branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraExternalTransactionFactory.java
Log:
Added missing synchronization around some of the accesses to
'associatedTransaction' and 'sessionXAMap' maps so all access is now within the
lock. This fixes spurious "No externally mediated transaction associated with
session" exceptions.


Modified: branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraExternalTransactionFactory.java
===================================================================
--- branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraExternalTransactionFactory.java	2008-02-18 13:58:52 UTC (rev 648)
+++ branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraExternalTransactionFactory.java	2008-02-23 05:55:06 UTC (rev 649)
@@ -126,8 +126,13 @@
   }
 
   public Set<MulgaraExternalTransaction> getTransactionsForSession(DatabaseSession session) {
-    Set<MulgaraExternalTransaction> xas = sessionXAMap.getN(session);
-    return xas != null ? xas : new HashSet<MulgaraExternalTransaction>();
+    acquireMutex();
+    try {
+      Set<MulgaraExternalTransaction> xas = sessionXAMap.getN(session);
+      return xas != null ? xas : new HashSet<MulgaraExternalTransaction>();
+    } finally {
+      releaseMutex();
+    }
   }
 
   public XAResource getXAResource(DatabaseSession session, boolean writing) {
@@ -167,26 +172,46 @@
   }
 
   public boolean hasAssociatedTransaction(DatabaseSession session) {
-    return associatedTransaction.get(session) != null;
+    acquireMutex();
+    try {
+      return associatedTransaction.get(session) != null;
+    } finally {
+      releaseMutex();
+    }
   }
 
   public boolean associateTransaction(DatabaseSession session, MulgaraExternalTransaction xa) {
-    if (associatedTransaction.get(session) != null) {
-      return false;
-    } else {
-      associatedTransaction.put(session, xa);
-      return true;
+    acquireMutex();
+    try {
+      if (associatedTransaction.get(session) != null) {
+        return false;
+      } else {
+        associatedTransaction.put(session, xa);
+        return true;
+      }
+    } finally {
+      releaseMutex();
     }
   }
 
   public MulgaraExternalTransaction getAssociatedTransaction(DatabaseSession session) {
-    return associatedTransaction.get(session);
+    acquireMutex();
+    try {
+      return associatedTransaction.get(session);
+    } finally {
+      releaseMutex();
+    }
   }
 
   public void disassociateTransaction(DatabaseSession session, MulgaraExternalTransaction xa) 
       throws MulgaraTransactionException {
-    if (associatedTransaction.get(session) == xa) {
-      associatedTransaction.remove(session);
+    acquireMutex();
+    try {
+      if (associatedTransaction.get(session) == xa) {
+        associatedTransaction.remove(session);
+      }
+    } finally {
+      releaseMutex();
     }
   }
 




More information about the Mulgara-svn mailing list