Интеграция JSF с JPA - PullRequest
       1

Интеграция JSF с JPA

2 голосов
/ 04 января 2012

Я провел некоторые исследования JSF и JPA. Прочитайте несколько уроков и следуйте некоторым примерам. До этого я создавал управляемые компоненты, модели и службы для обработки своего приложения.

Как лучше всего включать JPA в этот шаблон? Стоит ли включать запросы JPQL и вызовы базы данных в одни и те же классы обслуживания? В каком-то примере я видел JPA, реализованный в том же управляемом компоненте, что и методы, вызываемые на этапе приложения Invoke, или я видел JPA, реализованный в других управляемых компонентах? Какова общая практика работы с этими двумя?

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Я - самообучающийся, поэтому, пожалуйста, прости мою формулировку, которая может быть неуместной.

Если вы посмотрите на этот ответ , есть ссылка на мастер NetBeans для созданияRESTful веб-сервисы.Это, безусловно, выходит за рамки вашего вопроса, но сгенерированные классы DAO действительно полезны и могут использоваться для проектов JSF.Если вы хотите, вы можете удалить аннотацию JAX-RS RESTful, но оставить остальные.

Затем я внедряю в свои Beans автоматически созданные классы Facade (используя аннотации EJB).В этих классах Facade и Entity базовые JPA-запросы уже написаны.

Если вам нужно создавать более сложные запросы, вы также можете использовать тип-безопасный Criteria API вместо JPQL.Первоначальное усилие больше, но Criteria API позволяет писать сложные запросы OO способом, который также может быть полезен в конкретных ситуациях, таких как использование нескольких условий в операторе «WHERE» (число которого генерируется динамически, как в Advanced Search).

2 голосов
/ 04 января 2012

Вы должны объединить свой доступ 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.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...