|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
public interface Transaction
Transactions define atomic operations which can be committed or aborted as a
unit. Transactions are entered by calling Repository.enterTransaction().
Transactions are thread-local, and so no special action needs to be taken to
bind operations to them. Cursors which are opened in the scope of a
transaction are automatically closed when the transaction is committed or
aborted.
Transactions do not exit when they are committed. The transaction is still valid after a commit, but new operations are grouped into a separate atomic unit. The exit method must be invoked on every transaction. The following pattern is recommended:
Transaction txn = repository.enterTransaction();
try {
// Make updates to storage layer
...
// Commit the changes up to this point
txn.commit();
// Optionally make more updates
...
// Commit remaining changes
txn.commit();
} finally {
// Ensure transaction exits, aborting uncommitted changes if an exception was thrown
txn.exit();
}
Transactions may be nested. Calling commit or abort on an outer transaction will recursively apply the same operation to all inner transactions as well. All Cursors contained within are also closed.
Transaction instances are mutable, but they are thread-safe.
| Method Summary | |
|---|---|
void |
attach()
Attaches this transaction to the current thread, if it has been detached. |
void |
commit()
If currently in a transaction, commits all changes to the storage layer since the last commit within the transaction. |
void |
detach()
Detaches this transaction from the current thread. |
void |
exit()
Closes the current transaction, aborting all changes since the last commit. |
IsolationLevel |
getIsolationLevel()
Returns the isolation level of this transaction. |
boolean |
isForUpdate()
Returns true if this transaction is in update mode, which is adjusted by calling setForUpdate(boolean). |
void |
setDesiredLockTimeout(int timeout,
TimeUnit unit)
Specify a desired timeout for aquiring locks within this transaction. |
void |
setForUpdate(boolean forUpdate)
Set to true to force all read operations within this transaction to acquire upgradable or write locks. |
| Method Detail |
|---|
void commit()
throws PersistException
PersistException - if storage layer throws an exception
void exit()
throws PersistException
PersistException - if storage layer throws an exceptionvoid setForUpdate(boolean forUpdate)
boolean isForUpdate()
setForUpdate(boolean).
void setDesiredLockTimeout(int timeout,
TimeUnit unit)
Also, the range of lock timeout values supported might be small. For example, only a timeout value of zero might be supported. In that case, the transaction is configured to not wait at all when trying to acquire locks. Expect immediate timeout exceptions when locks cannot be granted.
Nested transactions inherit the desired lock timeout of their parent. Top transactions always begin with the default lock timeout.
timeout - Desired lock timeout. If negative, revert lock timeout to
default value.unit - Time unit for timeout. If null, revert lock timeout to
default value.IsolationLevel getIsolationLevel()
void detach()
Detaching a transaction also detaches any parent and nested child transactions. Attaching any of them achieves the same result as attaching this transaction.
IllegalStateException - if transaction is attached to a different
threadvoid attach()
IllegalStateException - if current thread has a different
transaction already attached
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||