| java.lang.Object com.sleepycat.collections.TransactionRunner
All known Subclasses: com.sleepycat.collections.test.NullTransactionRunner,
TransactionRunner | public class TransactionRunner (Code) | | Starts a transaction, calls
TransactionWorker.doWork , and handles
transaction retry and exceptions. To perform a transaction, the user
implements the
TransactionWorker interface and passes an instance of
that class to the
TransactionRunner.run method.
A single TransactionRunner instance may be used by any number of threads
for any number of transactions.
The behavior of the run() method depends on whether the environment is
transactional, whether nested transactions are enabled, and whether a
transaction is already active.
- When the run() method is called in a transactional environment and no
transaction is active for the current thread, a new transaction is started
before calling doWork(). If DeadlockException is thrown by doWork(), the
transaction will be aborted and the process will be repeated up to the
maximum number of retries. If another exception is thrown by doWork() or
the maximum number of retries has occurred, the transaction will be aborted
and the exception will be rethrown by the run() method. If no exception is
thrown by doWork(), the transaction will be committed. The run() method
will not attempt to commit or abort a transaction if it has already been
committed or aborted by doWork().
- When the run() method is called and a transaction is active for the
current thread, and nested transactions are enabled, a nested transaction is
started before calling doWork(). The transaction that is active when
calling the run() method will become the parent of the nested transaction.
The nested transaction will be committed or aborted by the run() method
following the same rules described above. Note that nested transactions may
not be enabled for the JE product, since JE does not support nested
transactions.
- When the run() method is called in a non-transactional environment, the
doWork() method is called without starting a transaction. The run() method
will return without committing or aborting a transaction, and any exceptions
thrown by the doWork() method will be thrown by the run() method.
- When the run() method is called and a transaction is active for the
current thread and nested transactions are not enabled (the default) the
same rules as above apply. All the operations performed by the doWork()
method will be part of the currently active transaction.
In a transactional environment, the rules described above support nested
calls to the run() method and guarantee that the outermost call will cause
the transaction to be committed or aborted. This is true whether or not
nested transactions are supported or enabled. Note that nested transactions
are provided as an optimization for improving concurrency but do not change
the meaning of the outermost transaction. Nested transactions are not
currently supported by the JE product.
author: Mark Hayes |
Field Summary | |
final public static int | DEFAULT_MAX_RETRIES The default maximum number of retries. |
Constructor Summary | |
public | TransactionRunner(Environment env) Creates a transaction runner for a given Berkeley DB environment. | public | TransactionRunner(Environment env, int maxRetries, TransactionConfig config) Creates a transaction runner for a given Berkeley DB environment and
with a given number of maximum retries.
Parameters: env - is the environment for running transactions. Parameters: maxRetries - is the maximum number of retries that will beperformed when deadlocks are detected. Parameters: config - the transaction configuration used for callingEnvironment.beginTransaction, or null to use the defaultconfiguration. |
DEFAULT_MAX_RETRIES | final public static int DEFAULT_MAX_RETRIES(Code) | | The default maximum number of retries.
|
TransactionRunner | public TransactionRunner(Environment env, int maxRetries, TransactionConfig config)(Code) | | Creates a transaction runner for a given Berkeley DB environment and
with a given number of maximum retries.
Parameters: env - is the environment for running transactions. Parameters: maxRetries - is the maximum number of retries that will beperformed when deadlocks are detected. Parameters: config - the transaction configuration used for callingEnvironment.beginTransaction, or null to use the defaultconfiguration. The configuration object is not cloned, andany modifications to it will impact subsequent transactions. |
getAllowNestedTransactions | public boolean getAllowNestedTransactions()(Code) | | Returns whether nested transactions will be created if
run() is called when a transaction is already active for
the current thread.
By default this property is false.
Note that this method always returns false in the JE product, since
nested transactions are not supported by JE.
|
getMaxRetries | public int getMaxRetries()(Code) | | Returns the maximum number of retries that will be performed when
deadlocks are detected.
|
getTransactionConfig | public TransactionConfig getTransactionConfig()(Code) | | Returns the transaction configuration used for calling
Environment.beginTransaction .
If this property is null, the default configuration is used. The
configuration object is not cloned, and any modifications to it will
impact subsequent transactions.
the transaction configuration. |
run | public void run(TransactionWorker worker) throws DatabaseException, Exception(Code) | | Calls the
TransactionWorker.doWork method and, for transactional
environments, may begin and end a transaction. If the environment given
is non-transactional, a transaction will not be used but the doWork()
method will still be called. See the class description for more
information.
throws: DeadlockException - when it is thrown by doWork() and themaximum number of retries has occurred. The transaction will have beenaborted by this method. throws: Exception - when any other exception is thrown by doWork(). Theexception will first be unwrapped by calling ExceptionUnwrapper.unwrap. The transaction will have been aborted bythis method. |
setAllowNestedTransactions | public void setAllowNestedTransactions(boolean allowNestedTxn)(Code) | | Changes whether nested transactions will be created if
run() is called when a transaction is already active for
the current thread.
Calling this method does not impact transactions already running.
Note that true may not be passed to this method in the JE product,
since nested transactions are not supported by JE.
|
setMaxRetries | public void setMaxRetries(int maxRetries)(Code) | | Changes the maximum number of retries that will be performed when
deadlocks are detected.
Calling this method does not impact transactions already running.
|
setTransactionConfig | public void setTransactionConfig(TransactionConfig config)(Code) | | Changes the transaction configuration used for calling
Environment.beginTransaction .
If this property is null, the default configuration is used. The
configuration object is not cloned, and any modifications to it will
impact subsequent transactions.
Parameters: config - the transaction configuration. |
|
|