Вопрос по transactions – EJB 3.0 - вложенная транзакция! = Требуется новая?
Я только что прочитал главу «Транзакции» (10) «Мастеринг EJB 3.0». и теперь я запутался во вложенных транзакциях.
Книга говорит
"The EJB-defined transaction manager does not support nested transactions; it requires support for only flat transactions." (Site 278, Note)
Этот факт описан не только этой книгой, я нашел это утверждение в других книгах / сайтах.
Но если я назову «Требуется новый» аннотированный метод от, скажем, «Обязательный» Аннотированный метод, я имею в виду вложенную транзакцию, не так ли? Я могу откатить внутреннюю транзакцию или зафиксировать ее, не затрагивая внешнюю транзакцию. И если я хочу, чтобы внешняя транзакция была прервана, я возвращаю исключение EJBException, и вся транзакция будет откатываться.
Так это просто, что это поведениеnot required по спецификации EJB 3.0 или я что-то не так понял? Я просто не могу понять разницу между вложенными транзакциями и описанным поведением.
С уважением Норман
потому что первая транзакция приостановлена во время выполнения второй транзакции. Вложенная транзакция выглядит так:
Nested transaction example
> method1 - begin tran1
> method2 - begin tran2
workA
< method2 - commit tran2
< method1 - rollback tran1 (tran2 also rolled back because it's nested)
Instead, ТребуетсяНовое выглядит так:
EJB RequiresNew example
> method1 - begin tran1
> method2 - suspend tran1, begin tran2
workA
< method2 - commit tran2, resume tran1
< method1 - rollback tran1 (tran2 remains committed)