2015-08-01 2 views
1

Я хотел бы задать вопрос относительно EJB. Я использую eclipselink JPA.EJB: Два объекта без гражданства используют две разные транзакции

В моем коде есть объект без гражданства в объекте без гражданства.

Возможно ли это два объекта без гражданства использовать два разных транзакции?

ответ

1

Абсолютно. Вы можете счесть полезным прочитать о transaction attributes.

Если вызываемый метод в первом классе (скажем StatelessFirst) имеет тип транзакции REQUIRED (по умолчанию) или REQUIRES_NEW, когда она называется она будет инициировать новую транзакцию. Если это затем вызывает метод во втором классе (скажем StatelessSecond) с типом транзакции REQUIRES_NEW, первая транзакция приостанавливается, и вторая транзакция инициируется во время выполнения второго метода. Когда метод в StatelessSecond завершается, вторая транзакция фиксируется, первая транзакция восстанавливается, а управление передается обратно на StatelessFirst.

Чтобы сделать первый транзакционный фиксацию до того, как вызывается StatelessSecond, вы можете использовать bean-managed transactions. Это дает вам полный контроль над управлением транзакциями, поэтому в StatelessFirst вы можете начать транзакцию, а затем совершить вызов StatelessSecond. Если вы пойдете с таким подходом, обратите внимание, что вы в can't perform nested transactions в BMT.

Еще один вариант, который позволяет вам оставаться внутри CMT, заключается в том, чтобы вывести транзакционное поведение из StatelessFirst в третий EJB, с REQUIRES_NEW. Затем картина:

  • Клиент называет StatelessFirst, который инициирует транзакцию на
  • StatelessFirst вызовы NewBean, который инициирует транзакцию B, и выполняет некоторую работу
  • NewBean совершает сделку B и возвращает
  • StatelessFirst вызовов StatelessSecond , который инициирует транзакцию C и выполняет свою работу
  • StatelessSecond совершает транзакцию C и возвращает
  • StatelessFirst завершается, и совершает сделки A (который не имеет каких-либо изменений в любом случае)
+0

Ладно, я на самом деле объявлен как метод Java require_new 1 день назад. Однако. я надеюсь, что statelessfirst должен зафиксировать, прежде чем выставлять безстоящие лица. Не похоже на то, что было написано вами ---> первая транзакция приостановлена, и вторая транзакция инициируется во время выполнения второго метода. –

+0

А, ок, тогда вам понадобятся операции, управляемые бобами. Я отредактирую это в своем ответе. – hugh

 Смежные вопросы

  • Нет связанных вопросов^_^