[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