EJB против CDI и шаблон «Контроль границы объекта» - PullRequest
7 голосов
/ 21 декабря 2011

Я пытаюсь разобраться с CDI и EJB и паттерном Entity Boundary Control (ECB). Мое понимание модели ЕЦБ заключается в том, что Граница является началом и концом границы транзакции. В дополнение к этому, CDI не обеспечивает поддержку транзакций, как EJB.

Так что, если я хочу успешно реализовать шаблон ECB, то верно следующее:

  1. Я могу реализовать граничную часть с EJB (т.е. @stateless, @stateful, @singleton) и контрольный уровень с CDI или EJB.
  2. Я могу реализовать часть Boundary and Control с CDI, но реализовать поддержку транзакций в Boundary, аналогичную (http://smokeandice.blogspot.com/2009/12/cdi-and-declarative-transactions.html)
  3. Я не могу реализовать Границу с CDI, а затем начать использовать EJB на уровне управления.

Спасибо

1 Ответ

13 голосов
/ 06 января 2012

Я успешно внедрил шаблон ECB в JavaEE 6, используя EJB исключительно для границ и CDI для контроллеров.Типичный стек в моей архитектуре использует

  • EJB без сохранения с аннотациями JAX-RS для реализации службы REST в виде Boundary
  • управляемых компонентов CDI для бизнес-логики в области @Dependent в качестве контроллера
  • Управляемые компоненты CDI в области @Dependent для объектов доступа к данным, которые используют JPA EntityManager для взаимодействия с базой данных
  • Объектные объекты JPA

EJB-компоненты без состояния, которые формируютГраница всегда помечается @TransactionAttribute (REQUIRED), который используется по умолчанию.Я не использую другие атрибуты транзакции.Таким образом, вы можете гарантировать, что каждое взаимодействие с границей будет происходить ровно в одной транзакции.

Используя только область @Dependent для управляемых bean-компонентов CDI, вы можете гарантировать, что каждый поток имеет свой собственный экземпляр этогофасоль.Таким образом, у вас никогда не бывает более одного потока, одновременно обращающегося к управляемому компоненту CDI.Это избавит вас от типичных проблем параллелизма.

Использование сочетания более тяжелого веса, объединенных в пул EJB для управляемых bean-компонентов Boundary и облегченного CDI для остальной части приложения работает очень хорошо для меня.

...