Default Attributes in EJB Transactions

arjacsoh picture arjacsoh · Dec 31, 2013 · Viewed 11.2k times · Source

I ma reading the java ee docs and I would like to ask a couple of question to be sure I have understood well what is going on with EJB-Transactions.

1) The docs state that the defaalt TransactionManagement value is CONTAINER and the the default TransactionAttribute value is REQUIRED: If so, am I right that the following (Session) Bean executes all its methods in with CONTAINER managed Transactions and the attribute REQUIRED?

@Stateless
public class MyBean{

public void methodA(){
...
}

public void methodB(){
...
}

}

2) The docs state: Container-managed transactions do not require all methods to be associated with transactions. When developing a bean, you can set the transaction attributes to specify which of the bean’s methods are associated with transactions.

If I omit however the TransactionAttributeType, is it not automatically set to REQUIRED? Is the methodB in the following Bean not associated with a Transaction?

@Stateless
@TransactionManagement(CONTAINER)
public class MyBean{

@TransactionAttribute(MANDATORY)
public void methodA(){
...
}

public void methodB(){
...
}

}

Answer

Brett Kail picture Brett Kail · Jan 1, 2014
  1. Yes, CONTAINER and REQUIRED are the default.

  2. The quote you gave seems to come from The Java EE 5 Tutorial. I agree that sentence is somewhat confusingly worded. Here's a possible rewriting that might help.

Container-managed transactions do not require all methods to use the default REQUIRED transaction semantics. When developing a bean, you can change the transaction semantics by setting the transaction attributes. For example, you can specify that a method should run without any transaction by using the NEVER transaction attribute,