Spring Transaction Managers
Platform-specific Transaction Implementations
PlatformTransactionManager
public interface PlatformTransactionManager {
TransactionStatus
getTransaction(TransactionDefinition definition)
throws
TransactionException;
Return a currently active transaction or create a new one, according to
the specified propagation behavior.
void commit(TransactionStatus status) throws TransactionException;
Commit the given transaction, with regard to its status.
void rollback(TransactionStatus status) throws TransactionException;
Perform a rollback of the given transaction.
}
TransactionStatus Interface
A TransactionStatus is associated
with a thread of execution. The TransactionStatus
interface provides a normal and simple way for transactional code to control
transaction execution and query transaction status. They are common to all
transaction APIs:
public interface TransactionStatus {
boolean
isNewTransaction();
Return whether the present transaction is new (else participating in an existing transaction, or potentially not running in an actual transaction in the first place).
boolean hasSavepoint();
Return whether this transaction internally carries a savepoint, that is, has been created as nested transaction based on a savepoint.
Return whether the present transaction is new (else participating in an existing transaction, or potentially not running in an actual transaction in the first place).
boolean hasSavepoint();
Return whether this transaction internally carries a savepoint, that is, has been created as nested transaction based on a savepoint.
void
setRollbackOnly();
Set the transaction rollback-only.
boolean isRollbackOnly();
Return whether the transaction has been marked as rollback-only (either by the application or by the transaction infrastructure).
boolean isCompleted();
Return whether this transaction is completed, that is, whether it has already been committed or rolled back.
}
TransactionDefinition interface
The TransactionDefinition interface specifies:
- Transaction isolation: It is applied to transactions in general and is directly related with the ACID transaction properties. For example, can this transaction see uncommitted writes from other transactions?
- Transaction propagation: All code executed within a transaction scope will run in that transaction and there are several options specifying propagation behavior if a transactional method is executed when a transaction context already exists: For example, simply running in the existing transaction or suspending the existing transaction and creating a new transaction.
- Transaction timeout: How long this transaction may run before timing out (automatically being rolled back by the underlying transaction infrastructure).
- Read-only status: A read-only transaction does not modify any data.
public
interface TransactionDefinition{
int
getIsolationLevel();
Return the isolation level.
String
getName();
Return the name of this
transaction. Can be null.
int
getTimeout();
Return the transaction
timeout.
boolean
isReadOnly();
Return whether to optimize
as a read-only transaction.
int getIsolationLevel();
String getName();
int getTimeout();
boolean isReadOnly();
Transaction State
There are few different possible Transaction states and they are:
Active – The initial state of transaction
and transaction stays in this state while executing.
Failed – When the failed state is
determined then the normal execution can no longer proceed.
Aborted – The state of the transaction when it has been roll-backed and the database taken back to its initial state.
Partially Committed – The state of the transaction after the final statement has been executed.
Committed – The state of the transaction
after successful completion.
No comments:
Post a Comment