|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface TransactionDefinition
Interface for classes that define transaction properties. Base interface for TransactionAttribute.
Note that isolation level, timeout and read-only settings will not get applied unless a new transaction gets started. As only PROPAGATION_REQUIRED and PROPAGATION_REQUIRES_NEW can actually cause that, it usually doesn't make sense to specify those settings in all other cases. Furthermore, be aware that not all transaction managers will support those advanced features and thus might throw corresponding exceptions when given non-default values.
PlatformTransactionManager.getTransaction(TransactionDefinition)
,
DefaultTransactionDefinition
,
TransactionAttribute
Field Summary | |
---|---|
static String |
ISOLATION_CONSTANT_PREFIX
|
static int |
ISOLATION_DEFAULT
Use the default isolation level of the underlying datastore. |
static int |
ISOLATION_READ_COMMITTED
A constant indicating that dirty reads are prevented; non-repeatable reads and phantom reads can occur. |
static int |
ISOLATION_READ_UNCOMMITTED
A constant indicating that dirty reads, non-repeatable reads and phantom reads can occur. |
static int |
ISOLATION_REPEATABLE_READ
A constant indicating that dirty reads and non-repeatable reads are prevented; phantom reads can occur. |
static int |
ISOLATION_SERIALIZABLE
A constant indicating that dirty reads, non-repeatable reads and phantom reads are prevented. |
static String |
PROPAGATION_CONSTANT_PREFIX
|
static int |
PROPAGATION_MANDATORY
Support a current transaction, throw an exception if none exists. |
static int |
PROPAGATION_NESTED
Execute within a nested transaction if a current transaction exists, behave like PROPAGATION_REQUIRED else. |
static int |
PROPAGATION_NEVER
Execute non-transactionally, throw an exception if a transaction exists. |
static int |
PROPAGATION_NOT_SUPPORTED
Execute non-transactionally, suspend the current transaction if one exists. |
static int |
PROPAGATION_REQUIRED
Support a current transaction, create a new one if none exists. |
static int |
PROPAGATION_REQUIRES_NEW
Create a new transaction, suspend the current transaction if one exists. |
static int |
PROPAGATION_SUPPORTS
Support a current transaction, execute non-transactionally if none exists. |
static int |
TIMEOUT_DEFAULT
Use the default timeout of the underlying transaction system, or none if timeouts are not supported. |
Method Summary | |
---|---|
int |
getIsolationLevel()
Return the isolation level. |
String |
getName()
Return the name of this transaction. |
int |
getPropagationBehavior()
Return the propagation behavior. |
int |
getTimeout()
Return the transaction timeout. |
boolean |
isReadOnly()
Return whether to optimize as read-only transaction. |
Field Detail |
---|
static final String PROPAGATION_CONSTANT_PREFIX
static final String ISOLATION_CONSTANT_PREFIX
static final int PROPAGATION_REQUIRED
This is typically the default setting of a transaction definition.
static final int PROPAGATION_SUPPORTS
Note: For transaction managers with transaction synchronization, PROPAGATION_SUPPORTS is slightly different from no transaction at all, as it defines a transaction scopp that synchronization will apply for. As a consequence, the same resources (JDBC Connection, Hibernate Session, etc) will be shared for the entire specified scope. Note that this depends on the actual synchronization configuration of the transaction manager.
AbstractPlatformTransactionManager.setTransactionSynchronization(int)
,
Constant Field Valuesstatic final int PROPAGATION_MANDATORY
static final int PROPAGATION_REQUIRES_NEW
Note: Actual transaction suspension will not work on out-of-the-box
on all transaction managers. This in particular applies to JtaTransactionManager,
which requires the javax.transaction.TransactionManager
to be
made available it to it (which is server-specific in standard J2EE).
JtaTransactionManager.setTransactionManager(javax.transaction.TransactionManager)
,
Constant Field Valuesstatic final int PROPAGATION_NOT_SUPPORTED
Note: Actual transaction suspension will not work on out-of-the-box
on all transaction managers. This in particular applies to JtaTransactionManager,
which requires the javax.transaction.TransactionManager
to be
made available it to it (which is server-specific in standard J2EE).
JtaTransactionManager.setTransactionManager(javax.transaction.TransactionManager)
,
Constant Field Valuesstatic final int PROPAGATION_NEVER
static final int PROPAGATION_NESTED
Note: Actual creation of a nested transaction will only work on specific transaction managers. Out of the box, this only applies to the JDBC DataSourceTransactionManager when working on a JDBC 3.0 driver. Some JTA providers might support nested transactions as well.
DataSourceTransactionManager
,
Constant Field Valuesstatic final int ISOLATION_DEFAULT
Connection
,
Constant Field Valuesstatic final int ISOLATION_READ_UNCOMMITTED
Connection.TRANSACTION_READ_UNCOMMITTED
,
Constant Field Valuesstatic final int ISOLATION_READ_COMMITTED
Connection.TRANSACTION_READ_COMMITTED
,
Constant Field Valuesstatic final int ISOLATION_REPEATABLE_READ
Connection.TRANSACTION_REPEATABLE_READ
,
Constant Field Valuesstatic final int ISOLATION_SERIALIZABLE
ISOLATION_REPEATABLE_READ
and further prohibits the situation
where one transaction reads all rows that satisfy a WHERE
condition, a second transaction inserts a row that satisfies that
WHERE
condition, and the first transaction rereads for the
same condition, retrieving the additional "phantom" row in the second read.
Connection.TRANSACTION_SERIALIZABLE
,
Constant Field Valuesstatic final int TIMEOUT_DEFAULT
Method Detail |
---|
int getPropagationBehavior()
PROPAGATION_REQUIRED
,
TransactionSynchronizationManager.isActualTransactionActive()
int getIsolationLevel()
Only makes sense in combination with PROPAGATION_REQUIRED or PROPAGATION_REQUIRES_NEW.
Note that a transaction manager that does not support custom isolation levels will throw an exception when given any other level than ISOLATION_DEFAULT.
ISOLATION_DEFAULT
int getTimeout()
Only makes sense in combination with PROPAGATION_REQUIRED or PROPAGATION_REQUIRES_NEW.
Note that a transaction manager that does not support timeouts will throw an exception when given any other timeout than TIMEOUT_DEFAULT.
TIMEOUT_DEFAULT
boolean isReadOnly()
Intended to be used in combination with PROPAGATION_REQUIRED or PROPAGATION_REQUIRES_NEW. Beyond optimizing such actual transactions accordingly, a transaction manager might also pass the read-only flag to transaction synchronizations, even outside an actual transaction.
A transaction manager that cannot interpret the read-only hint will not throw an exception when given readOnly=true.
TransactionSynchronization.beforeCommit(boolean)
,
TransactionSynchronizationManager.isCurrentTransactionReadOnly()
String getName()
null
.
This will be used as transaction name to be shown in a
transaction monitor, if applicable (for example, WebLogic's).
In case of Spring's declarative transactions, the exposed name will be the fully-qualified class name + "." + method name (by default).
TransactionAspectSupport
,
TransactionSynchronizationManager.getCurrentTransactionName()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |