Статьи

Кнаппсакские архетипы

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

Минимальный архетип Java EE 6

Хотя в проекте по-прежнему есть только одна веб-страница, теперь доступно еще несколько классов. Они были сгруппированы в пакеты из основной папки пакета.

пакет Описание
боб Пакет bean содержит производителя EntityManager, а также объект dao для извлечения и сохранения объектов Person в виде EJB без сохранения состояния (и локального интерфейса).
модель Содержит модель JPA для другого применения, которая в данном случае является одним классом Person
спецификатор Содержит квалификатор, используемый для указания точек впрыска для EntityManager
Посмотреть Содержит базовые компоненты для представления JSF. Эти bean-компоненты обеспечивают логику на стороне сервера для страниц JSF, обычно вызывая функции для bean-компонентов службы в пакете bean-компонентов. HelloBean принимает введенное пользователем имя и возвращает сообщение. PersonBean имеет сущность person, которая может быть изменена страницей JSF и затем сохранена в базе данных. Существует также способ вернуть список ранее сохраненных людей из базы данных.

Многоуровневый код

У нас есть довольно четкое разделение проблем с различными пакетами. EJB-компоненты в пакетах bean и qualifier не зависят от JSF, тогда как bean-компоненты в пакете view предназначены только для поддержки JSF. Такая организация означает, что вы можете поместить содержимое пакетов bean-компонентов и квалификаторов в отдельный jar-файл и повторно использовать их с другой структурой представления. Технически, поскольку они также являются POJO, вы можете использовать их в не-EJB-среде.

Создание менеджеров

EntityManager создается в bean-компоненте DataRepositoryProducer, возвращая контекст постоянства, который был внедрен в bean-компонент без сохранения состояния контейнером. Когда менеджер объекта должен быть введен в точку внедрения, этот метод используется для его создания. Он помечен как @ConversationScoped, поэтому он может участвовать в диалогах CDI. Аннотация @DataRepository — это аннотация квалификатора, используемая для обозначения того, какой тип менеджера сущностей вы создаете, и поэтому ее можно вводить только в точки внедрения с такой же аннотацией. Это полезно, если есть несколько баз данных, используемых для различения разных созданных менеджеров сущностей.

Служебные бобы

В PersonDao мы вводим EntityManager, который затем используется в других методах для сохранения и извлечения объектов. В EJB 3.1 атрибут транзакции по умолчанию является Обязательным для методов EJB, поэтому нам не нужно указывать обработку этих методов.

PersonDao внедряется в класс view / PersonBean, так что представление должно извлекать или обновлять данные, дао может использоваться для предоставления этих функций.

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

 

Модель JPA

Единственный используемый нами класс модели — это класс Person, который имеет свойства для имени, фамилии и целочисленного значения Id. В полях имени мы указали количество валидаторов, а также размер столбца с помощью аннотаций. Эти валидаторы проверяют, что поле не является пустым или имеет значение null и не имеет длину более 25 символов.

Теперь мы рассмотрели код на стороне сервера, давайте посмотрим на страницу JSF, которая использует эти компоненты в home.xhtml.

JSF Content

Одна страница в этом архетипе разделена на три разных раздела, которые тестируют разные части среды.

Первая часть создает сообщение hello из класса helloBean. Класс аннотируется @Named («helloBean»), который позволяет нам ссылаться на этот bean-компонент со страницы JSF. Метод getHelloMessage () возвращает фиксированную строку, которая отображается на странице с помощью выражения EL # {helloBean.helloMessage}. Это говорит JSF получить свойство helloMessage из bean-компонента helloBean. Имя компонента разрешается с помощью средства распознавания выражений EL, которое ищет имя компонента в компонентах, зарегистрированных в CDI, с помощью аннотации @Named.

Если вы используете JBoss Developer Tools и включили CDI для этого приложения (щелкните правой кнопкой мыши на проекте, выберите Configure-> Add CDI Support , вы можете перейти на страницу JSF и нажать Ctrl + клик по выражению (либо имя компонента, либо свойство). name) и IDE перейдет к точке в коде, в которой определено выражение.

Вы можете взаимодействовать с bean-компонентом hello CDI, введя свое имя и нажав кнопку отправки, которая отправит ваше имя обратно в bean-компонент, и когда страница будет перерисована, ваше имя появится в сообщении под кнопкой отправки. Опять же, элемент управления связан со свойством name bean-компонента helloBean, который затем используется для возврата правильного сообщения пользователю при повторной визуализации страницы.

В последнем разделе используются JSF и CDI для редактирования экземпляра объекта Person на базовом компоненте CDI, причем JPA сохраняет объект, а Bean Validation обеспечивает проверку страницы JSF. JPA также возвращает список ранее сохраненных людей. Класс PersonBean имеет аннотацию @Named, которая дает ему имя personBean, и он помечается аннотацией @RequestScoped. У bean-компонента есть экземпляр person, который используется в качестве модели для полей ввода страницы JSF. Текстовые поля определены для имени и фамилии и привязаны к объекту person в bean-компоненте personBean. Каждый вход имеет тег JSF ah: message, который сообщает об ошибках для этого входного значения. Это сообщит об ошибках в компоненте на основе тех валидаторов, которые мы указали в модели. На странице JSFкнопка Add вызывает метод savePerson для бина-объекта personBean, который использует реализацию person dao для сохранения сущности person в бэк-компоненте. JSF автоматически включает проверку, указанную в модели JPA, и будет сообщать пользователю об ошибках для неверного ввода.

Под вводом данных о человеке есть список имен, которые уже были введены. Просто введите новое имя и нажмите кнопку «Добавить», чтобы увидеть появление нового имени. Оно извлекается из компонента поддержки с помощью дао, которое вводится в него.

Используя приложение для себя

Если вы хотите создать новое приложение из этого архетипа, вы, вероятно, захотите удалить следующие элементы.

/bean/PersonDao.java
/bean/PersonDaoLocal.java
/model/Person.java
/view/HelloBean.java
/view/PersonBean.java

Хотя вы, возможно, захотите повторно использовать шаблон или его модифицированную версию, вам не потребуется содержимое в файле home.xhtml. Вы можете удалить контент, окруженный тегами <ui: define name = «content»>. Кроме того, вы можете просто создать новый проект, используя jee6-basic-archetype, который не имеет ни одного из этого дополнительного кода.

В следующем разделе мы начнем рассматривать модель JPA и предварительно определенные данные в архетипе «песочницы».

С http://www.andygibson.net/blog/article/knappsack-archetypes-part-2/