Что касается сравнения между EJB Container Managed Transaction и Bean Managed Transaction?

  • Какой из них имеет лучшую производительность.
  • Лучшая практика о том, когда использовать любой из них.

Спасибо

0
Kambiz 4 Апр 2017 в 11:45

2 ответа

Лучший ответ

Выбор между BMT и CMT зависит от бизнес-решения, а не от эффективности.

На мой взгляд, нет лучших практик, однако это некоторые примеры предпочтения одного или другого.

BMT

  1. У вас есть бин Stateful, и глобальная фиксация зависит от результатов других методов. Используя BMT с Stateful, вы можете оставить транзакцию открытой и закрыть / зафиксировать ее, когда будет принято ваше бизнес-решение.
  2. По любой причине вы хотите иметь полный контроль над границами ваших транзакций

CMT

  1. У вас есть Stateful, и вы хотите реализовать интерфейс SessionSynchronization для того, чтобы знать, когда заканчивается транзакция и т. Д. В этом случае ваш бин должен использовать CMT
  2. У вас есть цепочка EJB, и вы хотите, чтобы все они были частью одной транзакции, в этом случае вам нужно использовать CMT (хотя первый ejb может инициировать и совместно использовать свою транзакцию BMT).

Есть несколько сценариев, где использование BMT имеет что-то для рассмотрения.

  1. Если вы используете BMT с MessageDriven, сообщение не является частью транзакции, поэтому сообщение подтверждается контейнером.
  2. Если вы EJB и метод с BMT, этот метод не может присоединиться к существующей транзакции.
0
Leonardo 4 Апр 2017 в 09:17

Транзакция, управляемая Бином, должна быть немного быстрее, чем Транзакция, управляемая Контейнером.

CMT нужно выполнить дополнительную работу, которую не нужно выполнять в BMT.

  • Контейнер должен проверить, запущена ли уже транзакция.
  • Контейнер должен прочитать аннотацию @TransactionAttribute метода.
  • Контейнер должен начать новую транзакцию (в случае TransactionAttributeType: Required, requireNew) перед запуском метода или вызвать исключение (в случае TransactionAttributeType: Never, обязательно).
0
Manuel Drieschmanns 4 Апр 2017 в 12:16