Вы должны объединить свой доступ JPA в DAO или сервисный уровень того или иного вида, если по какой-либо другой причине вы можете затем заглушить этот уровень DAO для модульных тестов.Все ваши бины, управляемые JSF, затем направят свой доступ к JPA через этот класс.Таким образом, всякий раз, когда вы получаете доступ к JPA из ваших управляемых компонентов JSF, вы можете смоделировать одиночный вызов метода DAO, а не индивидуально EntityManager
, Query
и т. Д.
Теперь сложный вопрос: должен ли DAO / уровень обслуживания быть другим управляемым компонентом JSF, EJB или чем-то еще вообще?В некотором смысле это менее важно, чем признание того, что вы хотите разделить доступ к JPA.
Лично я начал делать DAO как еще один вариант управляемых компонентов JSF, использующих @ManagedProperty
для инъекции.Затем я обнаружил CDI в Java EE 6 и сделал их POJO с @Named
/ @Inject
.
Если вы делаете записи, а не просто читаете, вы должны рассмотреть возможность создания отдельного уровня сервиса,вы можете объявлять транзакции - вероятно, @Stateless
EJB-компоненты имеют смысл, если вы используете JSF.
Надеюсь, это поможет!