public interface TransactionDefinition
PlatformTransactionManager
modernizing it
to use enums, Slf4j and decoupling from Spring.
Interface that defines Spring-compliant transaction properties.
Based on the propagation behavior definitions analogous to EJB CMT attributes.
Note that isolation level and timeout settings will not get applied unless
an actual new transaction gets started. As only TransactionDefinition.Propagation.REQUIRED
,
TransactionDefinition.Propagation.REQUIRES_NEW
and TransactionDefinition.Propagation.NESTED
can cause
that, it usually doesn't make sense to specify those settings in 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.
The read-only flag
applies to any transaction context,
whether backed by an actual resource transaction or operating non-transactionally
at the resource level. In the latter case, the flag will only apply to managed
resources within the application, such as a Hibernate Session
.
SynchronousTransactionManager.getTransaction(TransactionDefinition)
Modifier and Type | Interface and Description |
---|---|
static class |
TransactionDefinition.Isolation
Isolation levels.
|
static class |
TransactionDefinition.Propagation
Possible propagation values.
|
Modifier and Type | Field and Description |
---|---|
static TransactionDefinition |
DEFAULT
The default transaction definition.
|
static TransactionDefinition |
READ_ONLY
A read only definition.
|
static java.time.Duration |
TIMEOUT_DEFAULT
Use the default timeout of the underlying transaction system,
or none if timeouts are not supported.
|
Modifier and Type | Method and Description |
---|---|
default TransactionDefinition.Isolation |
getIsolationLevel()
Return the isolation level.
|
default java.lang.String |
getName()
Return the name of this transaction.
|
default TransactionDefinition.Propagation |
getPropagationBehavior()
Return the propagation behavior.
|
default java.time.Duration |
getTimeout()
Return the transaction timeout.
|
default boolean |
isReadOnly()
Return whether to optimize as a read-only transaction.
|
static TransactionDefinition |
of(TransactionDefinition.Propagation propagationBehaviour)
Create a new
TransactionDefinition for the given behaviour. |
static final TransactionDefinition DEFAULT
static final TransactionDefinition READ_ONLY
static final java.time.Duration TIMEOUT_DEFAULT
@NonNull default TransactionDefinition.Propagation getPropagationBehavior()
Must return one of the PROPAGATION_XXX
constants
defined on this interface
.
The default is TransactionDefinition.Propagation.REQUIRED
.
TransactionDefinition.Propagation.REQUIRED
@NonNull default TransactionDefinition.Isolation getIsolationLevel()
Must return one of the ISOLATION_XXX
constants defined on
this interface
. Those constants are designed
to match the values of the same constants on Connection
.
Exclusively designed for use with TransactionDefinition.Propagation.REQUIRED
or
TransactionDefinition.Propagation.REQUIRES_NEW
since it only applies to newly started
transactions. Consider switching the "validateExistingTransactions" flag to
"true" on your transaction manager if you'd like isolation level declarations
to get rejected when participating in an existing transaction with a different
isolation level.
The default is TransactionDefinition.Isolation.DEFAULT
. Note that a transaction manager
that does not support custom isolation levels will throw an exception when
given any other level than TransactionDefinition.Isolation.DEFAULT
.
TransactionDefinition.Isolation.DEFAULT
@NonNull default java.time.Duration getTimeout()
Must return a number of seconds, or TIMEOUT_DEFAULT
.
Exclusively designed for use with TransactionDefinition.Propagation.REQUIRED
or
TransactionDefinition.Propagation.REQUIRES_NEW
since it only applies to newly started
transactions.
Note that a transaction manager that does not support timeouts will throw
an exception when given any other timeout than TIMEOUT_DEFAULT
.
The default is TIMEOUT_DEFAULT
.
default boolean isReadOnly()
The read-only flag applies to any transaction context, whether backed
by an actual resource transaction (TransactionDefinition.Propagation.REQUIRED
/
TransactionDefinition.Propagation.REQUIRES_NEW
) or operating non-transactionally at
the resource level (TransactionDefinition.Propagation.SUPPORTS
). In the latter case,
the flag will only apply to managed resources within the application,
such as a Hibernate Session
.
This just serves as a hint for the actual transaction subsystem; it will not necessarily cause failure of write access attempts. A transaction manager which cannot interpret the read-only hint will not throw an exception when asked for a read-only transaction.
true
if the transaction is to be optimized as read-only
(false
by default)TransactionSynchronization.beforeCommit(boolean)
,
TransactionSynchronizationManager.isCurrentTransactionReadOnly()
@Nullable default java.lang.String getName()
null
.
This will be used as the 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).
null
by default}TransactionSynchronizationManager.getCurrentTransactionName()
@NonNull static TransactionDefinition of(@NonNull TransactionDefinition.Propagation propagationBehaviour)
TransactionDefinition
for the given behaviour.propagationBehaviour
- The behaviour