Варианты использования для BMC и BMT в EJB 3.1 - PullRequest
2 голосов
/ 07 декабря 2011

Я анализирую возможные варианты использования, в которых могут использоваться управляемые бином транзакции (BMT) и управляемый бином параллелизм (BMC).Ниже приведен результат моей наземной работы над BMT:

  1. Транзакции, которые могут выполняться в непредсказуемое время
    • Контейнер налагает тайм-аут (даже если он настраивается)на транзакции.
    • Для некоторых транзакций (например, передача файлов по FTP стороннему поставщику, сохранение результатов распределения очереди jms или фиксация между двумя различными источниками данных) время транзакции может быть совершенно непредсказуемым.
    • В таких случаях Bean Provider может контролировать управление транзакциями с помощью BMT.
    • Придерживание CMT в таких случаях может привести к множеству исключений и сбоев транзакций.
  2. Несколько транзакций в одном методе компонента
    • CMT допускает только одну транзакцию для метода компонента.
    • В случае, если нам нужно использовать много транзакций, мынеобходимо использовать BMT - конечно, в большинстве случаев возможно иметь обходной путь в CMT.Но временное решение иногда может быть неоптимальным.
  3. Одна транзакция, охватывающая несколько вызовов метода EJB
    • Если необходимо вызвать несколько методов с областью действияВ той же транзакции можно использовать BMT.

Однако я не нашел ни одного интересного варианта использования BMC.Единственная информация, которую я смог получить, - это Enterprise JavaBeans 3.1 (6-е издание), в которой говорится

"... параллелизм, управляемый контейнером, не охватывает весь спектр проблем, которые должен решать многопоточный код. В этих случаяхспецификация делает доступными все возможности параллельных инструментов языка Java, предлагая управляемый бином режим параллелизма. "

Было бы очень приятно, если бы вы могли поделиться своим опытом в конкретных случаях использования BMT или BMC.

1 Ответ

2 голосов
/ 08 декабря 2011

BMT также полезен, если вы хотите начать / зафиксировать транзакции несколько раз из одного метода бина.Это также полезно, если вам нужен точный контроль над исключениями, генерируемыми во время beforeCompletion;например, оптимистическая блокировка JPA может вызвать исключение во время принятия, которое может быть обработано только из EJB, если вы используете BMT.

BMC полезно, если ваши методы делегируют другой службе, которая уже обрабатывает параллелизмНапример, если у вас есть синглтон, управляющий данными с помощью ConcurrentHashMap, вам не нужен контейнер для дополнительной синхронизации.

...