Поддержка вложенных транзакций в J2EE 1.4 - PullRequest
1 голос
/ 28 января 2010

Я читал, что спецификация EJB 2.x не поддерживает вложенные транзакции. Но логично подумать, что мы можем вызвать метод EJB с атрибутом txn REQUIRES_NEW из другого метода EJB, который начал транзакцию Разве это не действительный случай. Если действительно, это не то, что называется вложенными транзакциями.

Пожалуйста, укажите мне, если я что-то здесь упускаю.

1 Ответ

1 голос
/ 28 января 2010

Распространение REQUIRES_NEW означает:

Создать новую транзакцию, приостановить текущая транзакция, если таковая существует.

Таким образом, транзакции не будут вложенными - первая будет приостановлена, удалена, и будет запущена новая, не связанная транзакция.

Вам не нужно вкладывать сами транзакции, вам просто нужно убедиться, что каждый раз, когда вы проходите границу транзакции, вы наследуете существующую транзакцию (или начинаете новую). Распространение по умолчанию PROPAGATION_REQUIRED обычно достаточно хорошее.

Интересно, что в JDBC 3.0 была введена концепция вложенных транзакций, но спецификации EBJ еще предстоит наверстать упущенное.

...