The javax.transaction.Transactional annotation provides the application the ability to declaratively control transaction boundaries on CDI managed beans, as well as classes defined as managed beans by the Java EE specification, at both the class and method level where method level annotations override those at the class level.
See the EJB specification for restrictions on the use of @Transactional with EJBs.
This support is provided via an implementation of CDI interceptors that conduct the necessary suspending, resuming, etc. The Transactional interceptor interposes on business method invocations only and not on lifecycle events. Lifecycle methods are invoked in an unspecified transaction context.
If an attempt is made to call any method of the UserTransaction interface from within the scope of a bean or method annotated with @Transactional and a Transactional.TxType other than NOT_SUPPORTED or NEVER, an IllegalStateException must be thrown. The use of the UserTransaction is allowed within life cycle events. The use of the TransactionSynchronizationRegistry is allowed regardless of any @Transactional annotation.
The Transactional interceptors must have a priority of Interceptor.Priority.PLATFORM_BEFORE+200. Refer to the Interceptors specification for more details.
The TxType element of the annotation indicates whether a bean method is to be executed within a transaction context. TxType.REQUIRED is the default.
By default checked exceptions do not result in the transactional interceptor marking the transaction for rollback and instances of RuntimeException and its subclasses do. This default behavior can be modified by specifying exceptions that result in the interceptor marking the transaction for rollback and/or exceptions that do not result in rollback.
The rollbackOn element can be set to indicate exceptions that must cause the interceptor to mark the transaction for rollback.
Conversely, the dontRollbackOn element can be set to indicate exceptions that must not cause the interceptor to mark the transaction for rollback.
When a class is specified for either of these elements, the designated behavior applies to subclasses of that class as well. If both elements are specified, dontRollbackOn takes precedence.
| Modifier and Type | Class and Description |
|---|---|
| public static enum | Transactional.TxType
The TxType element of the annotation indicates whether a bean method is to be executed within a transaction context where the values provide the following corresponding behavior. |
| Modifier and Type | Method and Description |
|---|---|
| public Class | Returns: Class[] of ExceptionsThe dontRollbackOn element can be set to indicate exceptions that must not cause the interceptor to mark the transaction for rollback. |
| public Class | Returns: Class[] of ExceptionsThe rollbackOn element can be set to indicate exceptions that must cause the interceptor to mark the transaction for rollback. |
| public Transactional. | value()
The TxType element of the Transactional annotation indicates whether a bean method is to be executed within a transaction context. |
| dontRollbackOn | back to summary |
|---|---|
| public Class The dontRollbackOn element can be set to indicate exceptions that must not cause the interceptor to mark the transaction for rollback. Conversely, the rollbackOn element can be set to indicate exceptions that must cause the interceptor to mark the transaction for rollback. When a class is specified for either of these elements, the designated behavior applies to subclasses of that class as well. If both elements are specified, dontRollbackOn takes precedence.
| |
| rollbackOn | back to summary |
|---|---|
| public Class The rollbackOn element can be set to indicate exceptions that must cause the interceptor to mark the transaction for rollback. Conversely, the dontRollbackOn element can be set to indicate exceptions that must not cause the interceptor to mark the transaction for rollback. When a class is specified for either of these elements, the designated behavior applies to subclasses of that class as well. If both elements are specified, dontRollbackOn takes precedence.
| |
| value | back to summary |
|---|---|
| public Transactional. The TxType element of the Transactional annotation indicates whether a bean method is to be executed within a transaction context. | |
| Modifier and Type | Field and Description |
|---|---|
| public static final Transactional. | MANDATORY
If called outside a transaction context, a TransactionalException with a nested TransactionRequiredException must be thrown. |
| public static final Transactional. | NEVER
If called outside a transaction context, managed bean method execution must then continue outside a transaction context. |
| public static final Transactional. | NOT_SUPPORTED
If called outside a transaction context, managed bean method execution must then continue outside a transaction context. |
| public static final Transactional. | REQUIRED
If called outside a transaction context, the interceptor must begin a new JTA transaction, the managed bean method execution must then continue inside this transaction context, and the transaction must be completed by the interceptor. |
| public static final Transactional. | REQUIRES_NEW
If called outside a transaction context, the interceptor must begin a new JTA transaction, the managed bean method execution must then continue inside this transaction context, and the transaction must be completed by the interceptor. |
| public static final Transactional. | SUPPORTS
If called outside a transaction context, managed bean method execution must then continue outside a transaction context. |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public static Transactional. | |
| public static Transactional. |
| MANDATORY | back to summary |
|---|---|
| public static final Transactional. If called outside a transaction context, a TransactionalException with a nested TransactionRequiredException must be thrown. If called inside a transaction context, managed bean method execution will then continue under that context. | |
| NEVER | back to summary |
|---|---|
| public static final Transactional. If called outside a transaction context, managed bean method execution must then continue outside a transaction context. If called inside a transaction context, a TransactionalException with a nested InvalidTransactionException must be thrown. | |
| NOT_SUPPORTED | back to summary |
|---|---|
| public static final Transactional. If called outside a transaction context, managed bean method execution must then continue outside a transaction context. If called inside a transaction context, the current transaction context must be suspended, the managed bean method execution must then continue outside a transaction context, and the previously suspended transaction must be resumed by the interceptor that suspended it after the method execution has completed. | |
| REQUIRED | back to summary |
|---|---|
| public static final Transactional. If called outside a transaction context, the interceptor must begin a new JTA transaction, the managed bean method execution must then continue inside this transaction context, and the transaction must be completed by the interceptor. If called inside a transaction context, the managed bean method execution must then continue inside this transaction context. | |
| REQUIRES_NEW | back to summary |
|---|---|
| public static final Transactional. If called outside a transaction context, the interceptor must begin a new JTA transaction, the managed bean method execution must then continue inside this transaction context, and the transaction must be completed by the interceptor. If called inside a transaction context, the current transaction context must be suspended, a new JTA transaction will begin, the managed bean method execution must then continue inside this transaction context, the transaction must be completed, and the previously suspended transaction must be resumed. | |
| SUPPORTS | back to summary |
|---|---|
| public static final Transactional. If called outside a transaction context, managed bean method execution must then continue outside a transaction context. If called inside a transaction context, the managed bean method execution must then continue inside this transaction context. | |
| TxType | back to summary |
|---|---|
| private TxType() | |
| valueOf | back to summary |
|---|---|
| public static Transactional. | |
| values | back to summary |
|---|---|
| public static Transactional. | |