EJB3 против объектов доступа к данным - PullRequest
2 голосов
/ 10 февраля 2011

Я работаю над проектом, в котором нам нужно решить, как мы будем демонстрировать наш уровень персистентности.

В настоящее время в таблице есть два варианта:

1) Использовать простые DAO.Они будут реализовывать интерфейс и внедряться (возможно, с использованием Weld) в бизнес-компоненты, которые являются EJB-компонентами.Внутренне они будут использовать JPA / Hibernate для сохранения.

2) Вместо внедрения DAO с использованием Weld, они будут реализованы как EJB и добавлены с помощью @EJB в бизнес-компонентах.

действительно имеет смысл использовать EJB для уровня персистентности, когда мы не используем его возможности (например, управление транзакциями - этим занимается бизнес-уровень)?

Есть ли какое-то снижение производительности при использовании EJB поверх Weld (или другогонаоборот)?

Какой вариант вы считаете лучшим?

1 Ответ

8 голосов
/ 13 февраля 2011

Использование EJB для DAO на основе JPA совершенно естественно.

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

Кроме того, если вам когда-либо понадобится одна операция в отдельной транзакции, тогда это просто, когда ваши DAO основаны на EJB.

Внедрение EJB вашего бизнеса в EJB DAO может иметь потенциальное преимущество в производительности.Поскольку вводятся только заглушки, которые делегируются в объединенные экземпляры, внедрение относительно дешево.Вы можете добавить в свой бизнес EJB множество DAO, которые могут или не могут быть необходимы для каждого вызова.Я не уверен на 100%, что CDI обладает такой же способностью.У него, конечно, есть область видимости и разговоры, но на самом деле они не являются заглушками для делегирования в пул.

Если вам когда-нибудь понадобится JPA extended persistence context, то сессионный компонент с сохранением состояния практически создан для этого, иначе сессионный компонент без сохранения состояния будетиспользуется для DAO.

Тем не менее, CDI является более современной компонентной моделью, и в настоящее время кажется, что EJB в конечном итоге будет модифицировано как набор аннотаций CDI.Начало создания кодовой базы CDI и знаний теперь может быть долгосрочным стратегическим преимуществом, и, следовательно, предвещает CDI.

Итак, чтобы ответить на ваш вопрос более прямо: да, имеет смысл использовать EJB для уровня персистентности., но ни EJB, ни CDI не являются неправильным выбором здесь.

...