summaryrefslogtreecommitdiff
path: root/src/main/java/com/amazon/carbonado/txn/TransactionManager.java
diff options
context:
space:
mode:
authorBrian S. O'Neill <bronee@gmail.com>2011-08-10 17:39:53 +0000
committerBrian S. O'Neill <bronee@gmail.com>2011-08-10 17:39:53 +0000
commit312018c6ef5a3231c260e4ecdcd4c83588b56479 (patch)
treed10da20e9c35ad2b154f3a4f98ba4bf5a09b0e71 /src/main/java/com/amazon/carbonado/txn/TransactionManager.java
parent83d83766e4a82051c440996738f4249a355ca0b6 (diff)
Fix thread-local memory leaks.
Diffstat (limited to 'src/main/java/com/amazon/carbonado/txn/TransactionManager.java')
-rw-r--r--src/main/java/com/amazon/carbonado/txn/TransactionManager.java31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/main/java/com/amazon/carbonado/txn/TransactionManager.java b/src/main/java/com/amazon/carbonado/txn/TransactionManager.java
index 19aec4d..6ae3b2e 100644
--- a/src/main/java/com/amazon/carbonado/txn/TransactionManager.java
+++ b/src/main/java/com/amazon/carbonado/txn/TransactionManager.java
@@ -157,6 +157,9 @@ public abstract class TransactionManager<Txn> {
for (TransactionScope<?> scope : mAllScopes.keySet()) {
scope.close();
}
+
+ mAllScopes.clear();
+ mLocalScope.remove();
}
public synchronized boolean isClosed() {
@@ -270,4 +273,32 @@ public abstract class TransactionManager<Txn> {
* Aborts and closes the given internal transaction.
*/
protected abstract void abortTxn(Txn txn) throws PersistException;
+
+ static class Closed extends TransactionManager<Object> {
+ static final Closed THE = new Closed();
+
+ @Override
+ protected IsolationLevel selectIsolationLevel(Transaction parent, IsolationLevel level) {
+ return IsolationLevel.SERIALIZABLE;
+ }
+
+ @Override
+ protected boolean supportsForUpdate() {
+ return true;
+ }
+
+ @Override
+ protected Object createTxn(Object parent, IsolationLevel level) throws Exception {
+ throw new IllegalStateException("Transaction manager is closed");
+ }
+
+ @Override
+ protected boolean commitTxn(Object txn) throws PersistException {
+ return false;
+ }
+
+ @Override
+ protected void abortTxn(Object txn) throws PersistException {
+ }
+ }
}