Использование 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 не являются неправильным выбором здесь.