To specify either Containter Managed Transactions or Bean Managed Transactions use this annotation at class level:
@TransactionManagement( TransactionManagementType.CONTAINER | TransactionManagementType.BEAN)
For example:
@Stateful(name = "PlaceOrder", mappedName = "PlaceOrder")
// This will default to CONTAINER, but is here as a helpful hint
@TransactionManagement(TransactionManagementType.CONTAINER)
public class PlaceOrderBean implements PlaceOrder {
If you don’t specify this annotation, I believe that the container defaults to TransactionManagementType.CONTAINER.
Having specified your transaction management, you can add more fine grained control to individual methods in your EJB by using the @TransactionAttribute annotation.
@TransactionAttribute( TransactionAttributeType.REQUIRED | TransactionAttributeType.REQUIRES_NEW | TransactionAttributeType.SUPPORTS | TransactionAttributeType.MANDATORY | TransactionAttributeType.NEVER | TransactionAttributeType.NOT_SUPPORTED)
You apply the @TransactionAttribute annotation in the following way:
@Override
@Remove
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public Long confirmOrder() {
The default value for a @TransactionAttribute is TransactionAttributeType.REQUIRED
The table below defines in simple English what the TransactionAttributeType values are all about:
Attribute Type | Description |
REQUIRED | If a caller transaction exists then join it else create a new transaction. |
REQUIRES_NEW | Create a new transaction, suspending the caller's transaction if one exists. |
SUPPORTS | If a caller transaction exists then join it else run without using a transaction. |
MANDATORY | If a caller transaction exists then join it else throw an EJBTransactionRequiredException. |
NEVER | If a caller transaction exists then throw an EJBException. |
NOT_SUPPORTED | If a caller transaction exists then suspend it. Run without a transaction. |
Finally, just discovered that JEE 6 javadoc does add some explanation of these values - but it's not very good!
No comments:
Post a comment