Изучаем Java EE 7 | страница 14



Аннотации и дескрипторы развертывания

В парадигме программирования существует два подхода: императивное и декларативное программирование. Первое устанавливает алгоритм для достижения цели (что должно быть сделано), тогда как второе определяет, как достичь цели (как это должно быть сделано). В Java EE декларативное программирование выполняется с помощью метаданных, а именно аннотаций и/или дескрипторов развертывания.

Как вы могли видеть на рис. 1.2, компоненты выполняются в контейнере, который, в свою очередь, дает компоненту набор сервисов. Метаданные используются для объявления и настройки этих сервисов, а также для ассоциирования с ними дополнительной информации, наряду с Java-классами, интерфейсами, конструкторами, методами, полями либо параметрами.

Начиная с Java EE 5, количество аннотаций в корпоративной платформе неуклонно растет. Они декорируют метаданными ваш код (Java-классы, интерфейсы, поля, методы). Листинг 1.1 показывает простой Java-объект в старом стиле (POJO), объявляющий определенное поведение с использованием аннотаций к классу и к атрибуту (подробнее о компонентах EJB, контексте хранения и аннотациях — в следующих главах).


Листинг 1.1. Компонент EJB с аннотациями

>@Stateless

>@Remote(ItemRemote.class)

>@Local(ItemLocal.class)

>@LocalBean

>public class ItemEJB implements ItemLocal, ItemRemote {

>··@PersistenceContext(unitName = "chapter01PU")

>··private EntityManager em;

>··public Book findBookById(Long id) {

>····return em.find(Book.class, id);

>··}

>}

Второй способ объявления метаданных — использование дескрипторов развертывания. Дескриптор развертывания (DD) означает файл XML-конфигуратора, который развертывается в контейнере вместе с компонентом. Листинг 1.2 показывает дескриптор развертывания компонента EJB. Как и большинство дескрипторов развертывания в Java EE 7, он определяет пространство имен http://xmlns.jcp.org/xml/ns/javaee и содержит атрибут версии с указанием версии спецификации.


Листинг 1.2. Дескриптор развертывания компонента EJB

>

>·········xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" 

>·········xsi: schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 

>·······················http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd" 

>·········version="3.2" >


>··

>····

>······ItemEJB

>······org.agoncal.book.javaee7.ItemRemote

>······org.agoncal.book.javaee7.ItemLocal