EJB 3.0 – Вложенная транзакция! = Требуется Новое?

Я только что прочитал раздел «Операции» (10) «Освоение EJB 3.0», и теперь я смущен о вложенных транзакциях.

В книге говорится:

«Управляемый транзакцией EJB не поддерживает вложенные транзакции, для этого требуется поддержка только плоских транзакций». (Сайт 278, примечание)

Этот факт описан не только в этой книге, я нашел это заявление в других книгах / веб-сайтах.

Но если я называю «Требуется новый» аннотированный метод из a, допустим, «Required» аннотированный Methode, то, что у меня есть вложенная транзакция, не так ли? Я могу откатить внутреннюю транзакцию или зафиксировать ее, не затрагивая внешнюю транзакцию. И если я хочу, чтобы внешняя транзакция была прервана, я возвращаю EJBException обратно, и вся транзакция будет отброшена.

Так просто, что это поведение не требуется в спецификации EJB 3.0 или я что-то не понял? Я просто не могу получить разницу между вложенными транзакциями и описанным поведением.

С уважением, Норман

RequiresNew не создает вложенную транзакцию, потому что первая транзакция приостановлена ​​во время выполнения второй транзакции. Вложенная транзакция выглядит следующим образом:

Nested transaction example > method1 - begin tran1 > method2 - begin tran2 workA < method2 - commit tran2 < method1 - rollback tran1 (tran2 also rolled back because it's nested) 

Вместо этого RequiresNew выглядит так:

 EJB RequiresNew example > method1 - begin tran1 > method2 - suspend tran1, begin tran2 workA < method2 - commit tran2, resume tran1 < method1 - rollback tran1 (tran2 remains committed) 

Простой ответ: «внешняя» транзакция приостанавливается до начала новой транзакции. Судьбы двух транзакций никоим образом не связаны между собой, поэтому по всем целям и целям один не вложен в другой.

Если метод REQUIRES_NEW выбрасывает EJBException это новая транзакция, которую она создала, которая будет откат, а не «внешняя» транзакция.

  • TransactionScope с файлами в C #
  • Что произойдет, если вы не совершаете транзакцию с базой данных (скажем, SQL Server)?
  • Вам нужна транзакция базы данных для чтения данных?
  • Использование транзакций или SaveChanges (false) и AcceptAllChanges ()?
  • javax.transaction.Transactional vs org.springframework.transaction.annotation.Transactional
  • Каков «лучший» способ делать распределенные транзакции в нескольких базах данных с использованием Spring и Hibernate
  • Как использовать TransactionScope в C #?
  • Понимание транзакций Spring. Что происходит, когда транзакционный метод вызывает другой транзакционный метод?
  • Как откатить транзакцию базы данных при тестировании служб с помощью Spring в JUnit?
  • Каков уровень изоляции транзакций по умолчанию для SQL Server с ADO.NET?
  • Как TransactionScope откатывает транзакции?
  • Давайте будем гением компьютера.