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

ronald at mulgara.org ronald at mulgara.org
Sat Feb 23 14:07:58 UTC 2008


Author: ronald
Date: 2008-02-23 06:07:43 -0800 (Sat, 23 Feb 2008)
New Revision: 651

Modified:
   branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraExternalTransactionFactory.java
Log:
Really fix memory leak: [650] didn't cut it because the values in the map
(MulgaraXAResourceContext) also had a reference to the session, and hence
there always was a strong reference to the session. Instead, hook into
closingSession() and clean up at that time. Things are stable now across
100's of 1000's of session creations and closures.


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-23 09:19:31 UTC (rev 650)
+++ branches/mgr-73/src/jar/resolver/java/org/mulgara/resolver/MulgaraExternalTransactionFactory.java	2008-02-23 14:07:43 UTC (rev 651)
@@ -23,7 +23,6 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import java.util.WeakHashMap;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
 
@@ -61,7 +60,7 @@
 
     this.associatedTransaction = new HashMap<DatabaseSession, MulgaraExternalTransaction>();
     this.sessionXAMap = new Assoc1toNMap<DatabaseSession, MulgaraExternalTransaction>();
-    this.xaResources = new WeakHashMap<DatabaseSession, MulgaraXAResourceContext>();
+    this.xaResources = new HashMap<DatabaseSession, MulgaraXAResourceContext>();
   }
 
   public MulgaraTransaction getTransaction(final DatabaseSession session, boolean write)
@@ -151,6 +150,14 @@
     }
   }
 
+  public void closingSession(DatabaseSession session) throws MulgaraTransactionException {
+    try {
+      super.closingSession(session);
+    } finally {
+      xaResources.remove(session);
+    }
+  }
+
   public void transactionComplete(MulgaraExternalTransaction xa)
       throws MulgaraTransactionException {
     acquireMutex();




More information about the Mulgara-svn mailing list