Да. Если вы следуете передовым методам и не пытаетесь делать глупости, транзакции и откаты будут распространяться. Это именно то, для чего предназначены EJB! Если вам нужна помощь в том, как правильно вводить EJB-файлы с помощью @EJB, отличным руководством будет освоение EJB3.1 или краткая рефкартная запись EJB3.0 из JavaLobby.
EJB-компоненты используют декларативное управление транзакциями, поэтому вам необходимо убедиться, что вы поместили правильную декларацию в свой Бин:
@Stateless
@Remote({MyService.class})
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyServiceBean implements MyService {
...awesome code here
}
EDIT
Одно важное замечание: вам нужно, чтобы EJB верхнего уровня запускал для вас транзакцию и связывал все вызовы с другими EJB, или вам нужно вручную запустить транзакцию перед вызовом нескольких EJB.
Если вы находитесь в сервлете и вызываете 6 EJB, помеченных REQUIRED
, вы получите 6 транзакций, потому что граница транзакции начинается при каждом вызове EJB и заканчивается существующим методом.
Если вы находитесь в EJB и вызываете 6 дополнительных EJB, помеченных REQUIRED
, вы получите одну транзакцию, потому что граница транзакции уже начата.