From 96d2600cff43f72700c00473bb813ee5c01c30ca Mon Sep 17 00:00:00 2001 From: Adam Vandenberg Date: Wed, 5 Mar 2014 15:55:08 -0800 Subject: Implement AutoCloseable --- src/main/java/com/amazon/carbonado/Cursor.java | 3 ++- src/main/java/com/amazon/carbonado/Transaction.java | 8 +++++++- .../com/amazon/carbonado/repo/logging/LoggingTransaction.java | 5 +++++ .../amazon/carbonado/repo/replicated/ReadOnlyTransaction.java | 7 ++++++- src/main/java/com/amazon/carbonado/txn/TransactionPair.java | 5 +++++ src/main/java/com/amazon/carbonado/txn/TransactionScope.java | 11 ++++++++--- 6 files changed, 33 insertions(+), 6 deletions(-) (limited to 'src/main/java/com/amazon/carbonado') diff --git a/src/main/java/com/amazon/carbonado/Cursor.java b/src/main/java/com/amazon/carbonado/Cursor.java index c7e4404..2740611 100644 --- a/src/main/java/com/amazon/carbonado/Cursor.java +++ b/src/main/java/com/amazon/carbonado/Cursor.java @@ -48,11 +48,12 @@ import java.util.NoSuchElementException; * @author Brian S O'Neill * @author Don Schneider */ -public interface Cursor { +public interface Cursor extends AutoCloseable { /** * Call close to release any resources being held by this cursor. Further * operations on this cursor will behave as if there are no results. */ + @Override void close() throws FetchException; /** diff --git a/src/main/java/com/amazon/carbonado/Transaction.java b/src/main/java/com/amazon/carbonado/Transaction.java index 876c7be..d9b0014 100644 --- a/src/main/java/com/amazon/carbonado/Transaction.java +++ b/src/main/java/com/amazon/carbonado/Transaction.java @@ -61,7 +61,7 @@ import java.util.concurrent.TimeUnit; * * @author Brian S O'Neill */ -public interface Transaction { +public interface Transaction extends AutoCloseable { /** * If currently in a transaction, commits all changes to the storage layer * since the last commit within the transaction. @@ -159,4 +159,10 @@ public interface Transaction { * @return false if transaction has exited */ boolean preCommit() throws PersistException; + + /** + * Calls exit(), for compatibility with AutoCloseable. + * @throws PersistException + */ + void close() throws PersistException; } diff --git a/src/main/java/com/amazon/carbonado/repo/logging/LoggingTransaction.java b/src/main/java/com/amazon/carbonado/repo/logging/LoggingTransaction.java index e2b080c..5141d6e 100644 --- a/src/main/java/com/amazon/carbonado/repo/logging/LoggingTransaction.java +++ b/src/main/java/com/amazon/carbonado/repo/logging/LoggingTransaction.java @@ -102,6 +102,11 @@ class LoggingTransaction implements Transaction { return mTxn.preCommit(); } + @Override + public void close() throws PersistException { + exit(); + } + private String idChain() { if (mParent == null) { return String.valueOf(mID); diff --git a/src/main/java/com/amazon/carbonado/repo/replicated/ReadOnlyTransaction.java b/src/main/java/com/amazon/carbonado/repo/replicated/ReadOnlyTransaction.java index 1666bf4..d3649ba 100644 --- a/src/main/java/com/amazon/carbonado/repo/replicated/ReadOnlyTransaction.java +++ b/src/main/java/com/amazon/carbonado/repo/replicated/ReadOnlyTransaction.java @@ -25,7 +25,7 @@ import com.amazon.carbonado.PersistException; import com.amazon.carbonado.Transaction; /** - * ReadOnlyTransaction wraps an another transaction. It's only function is to + * ReadOnlyTransaction wraps an another transaction. Its only function is to * serve as a marker for the ReplicatedStorage triggers that no write * operations are allowed. * @@ -87,5 +87,10 @@ class ReadOnlyTransaction implements Transaction { public String toString() { return "ReadOnlyTransaction wrapping { " + mTxn.toString() + " }"; } + + @Override + public void close() throws PersistException { + exit(); + } } diff --git a/src/main/java/com/amazon/carbonado/txn/TransactionPair.java b/src/main/java/com/amazon/carbonado/txn/TransactionPair.java index f719a79..e247661 100644 --- a/src/main/java/com/amazon/carbonado/txn/TransactionPair.java +++ b/src/main/java/com/amazon/carbonado/txn/TransactionPair.java @@ -110,4 +110,9 @@ public class TransactionPair implements Transaction { public boolean preCommit() throws PersistException { return mPrimaryTransaction.preCommit() ? mSecondaryTransaction.preCommit() : false; } + + @Override + public void close() throws PersistException { + exit(); + } } diff --git a/src/main/java/com/amazon/carbonado/txn/TransactionScope.java b/src/main/java/com/amazon/carbonado/txn/TransactionScope.java index 6e94b91..6061c62 100644 --- a/src/main/java/com/amazon/carbonado/txn/TransactionScope.java +++ b/src/main/java/com/amazon/carbonado/txn/TransactionScope.java @@ -216,7 +216,7 @@ public class TransactionScope { mLock.unlock(); } } - + /** * Returns the implementation for the active transaction, only if it exists. * (does not create a transaction like getTxn() @@ -323,10 +323,10 @@ public class TransactionScope { mLock.unlock(); return; } - + Map, CursorList>> cursors; try { - cursors = mCursors; + cursors = mCursors; // Ensure that map is freed promptly. Thread-local reference to // this scope otherwise keeps map and its contents lingering around @@ -427,6 +427,11 @@ public class TransactionScope { } } + @Override + public void close() throws PersistException { + exit(); + } + public void commit() throws PersistException { TransactionScope scope = mScope; scope.mLock.lock(); -- cgit v1.2.3