Это зависит от вашего атрибута транзакции - который вы можете установить с помощью аннотации @TransactionAttribute на одно из:
- REQUIRED
- REQUIRES_NEW
- SUPPORTS
- ОБЯЗАТЕЛЬНО
- NOT_SUPPORTED
- НИКОГДА
НЕОБХОДИМО по умолчанию и начнет новую транзакцию, если транзакция отсутствует, в противном случае контейнер используетсуществующая транзакция.
REQUIRES_NEW указывает контейнеру всегда начинать новую транзакцию.
В моем опыте другие параметры используются реже, но все они определены в спецификации EJB.
Например:
@Stateless
public class EjbA {
@EJB
private ejbB;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void methodA() {
for (int i=0; i<100; i++) {
ejbB.methodB();
}
}
}
... сделает метод A () всегда запущенным в новой транзакции.