Введение в технологию Java EE 5
Среда IDE NetBeans 6.0 разработана в тесном сотрудничестве с
группами Java EE и Glassfish и предоставляет тесную интеграцию и
максимальную простоту использования спецификации Java EE 5. Среда IDE
NetBeans 6.0 – идеальный способ быстрого изучения программирования на
Java EE 5 и повышения производительности.
В настоящем документе приводится введение в основные принципы
спецификации Java EE 5 и их применения на практике. Охватываются
следующие темы:
Для получения дополнительных сведений о разработке и развертывании
приложений Java EE 5 на сервере приложений Sun Java System Application
Server Platform Edition 9 см. руководство Java EE 5
Tutorial.
Аннотации вместо дескрипторов развертывания
Платформа Java EE 5 упрощает развертывание приложений за счет
устранения необходимости в дескрипторах развертывания за исключением
дескриптора развертывания, требуемого спецификацией сервлета, – файла web.xml.
Другие дескрипторы развертывания, например ejb-jar.xml, и
записи, связанные с веб-службами в web.xml, устарели.
Дескрипторы развертывания J2EE 1.4 часто оказывались слишком сложными,
и при их заполнении было нетрудно ошибиться. Вместо них в платформе
Java EE 5 используются "аннотации". Аннотации представляют собой
модификаторы Java, подобные public и private,
указываемые в коде. Например, в спецификации EJB 3, которая является
частью спецификации Java EE 5, аннотации определяются для типа
компонента, типа интерфейса, ссылок на ресурсы, атрибутов транзакции,
безопасности и проч. Аналогичный набор аннотаций для веб-служб
предоставляется спецификацией JAX-WS 2.0. Одни аннотации используются
для создания артефактов. Другие аннотации используются для
документирования кода. Третий вид предоставляет расширенные
возможности, такие как безопасность или логика на этапе выполнения. В
целом, аннотации в платформе Java EE 5 предназначены для решения
следующих задач (среди прочих):
- определение и использование веб-служб;
- разработка программных приложений EJB;
- привязка классов технологии Java к XML;
- привязка классов технологии Java к базам данных;
- привязка методов к операциям;
- указание внешних зависимостей;
- указание информации для развертывания, в т.ч. атрибутов
безопасности.
Аннотации отмечаются символом @. При создании типа, в
котором используются аннотации Java EE 5, в среде IDE в создаваемом
коде предоставляются соответствующие метки-заполнители. Например, при
создании в среде IDE сеансного компонента без сохранения состояния
создается следующий код, в который входит аннотация @Stateless():
package mypackage;
import javax.ejb.*;
@Stateless()
public class HelloWorldSessionBean implements mypackage.HelloWorldSessionLocal {
}
ПРи использовании автозавершения кода возможен доступ к атрибутам
аннотации, специфичным для элемента под курсором. Например, при нажатии
Ctrl-Space в скобках аннотации @WebService() выводятся
следующие данные:
У каждого атрибута есть значение по умолчанию. Следовательно,
указывать атрибуты не требуется, если не планируется использовать
значение, отличное от значения по умолчанию. В простых случаях
достаточно значения по умолчанию, т.е. атрибуты можно вообще не
указывать.
Упрощение разработки программного обеспечения EJB
Новый интерфейс API EJB 3.0 позволяет упростить процесс разработки
путем сокращения и упрощения списка задач разработчика. Другими
словами, требуется меньше классов и меньше кода. Это возможно благодаря
тому, что значительная часть работы теперь выполняется контейнером.
Ниже приведен список некоторых функциональных возможностей и
преимуществ нового интерфейса API EJB 3.0:
- Меньшее количество требуемых классов и интерфейсов. Для
компонентов EJB более не требуются домашние интерфейсы и интерфейсы
объектов, поскольку за видимость необходимых методов теперь отвечает
контейнер. Достаточно указать бизнес-интерфейс. Для объявления
компонентов EJB можно пользоваться аннотациями, причем управление
транзакциями в таком случае выполняется контейнером.
- Упразднены дескрипторы развертывания. Аннотации можно
использовать непосредственно в классе для предоставления контейнеру
данных о зависимостях и настройке, определявшихся ранее в дескрипторах
развертывания. При отсутствии особых указаний для управления наиболее
общими ситуациями контейнер использует правила по умолчанию.
- Простой поиск.
EJBContext позволяет
выполнять поиск объектов в пространстве имен JNDI непосредственно из
класса.
- Упрощенная реляционная привязка объектов. Новый инетрфейс
API Java Persistence упрощает реляционную привязку объектов и повышает
ее прозрачность, позволяя привязывать исходные файлы Java к реляционным
базам данных c помощью аннотаций в POJO.
В среде IDE можно создавать компоненты уровня предприятия так же,
как и другие классы Java, причем для реализации необходимых методов и
поддержания синхронизации классов с интерфейсами используется
автозавершение кода и подсказки редактора. Для создания бизнес-методов
или операций веб-службы не требуется использование специальных команд
или диалоговых окон, однако эти команды могут применяться для упрощения
знакомства с синтаксисом Java EE 5.
Использование вложения зависимостей для доступа к ресурсам
Вложение зависимости позволяет объекту напрямую запрашивать
внешние ресурсы с помощью аннотаций. В результате исходный код
становится чище, поскольку исчезает необходимость в коде создания или
поиска ресурсов. Вложение ресурсов можно использовать в компонентах
EJB, веб-контейнерах и клиентах.
Для запроса вложения ресурса в компоненте используется аннотация @Resource
или, в случае некоторых специализированных ресурсов, аннотации @EJB
и @WebServiceRef. В число ресурсов, которые могут быть
вложены, входят следующие:
- объект
SessionContext;
- объект
DataSources;
- интерфейс
EntityManager;
- другие компоненты уровня предприятия;
- веб-службы;
- очереди сообщений и темы;
- фабрики подключений для адаптеров ресурсов.
Редактор исходного кода в среде IDE обеспечивает полное
автозавершение кода для аннотаций вложения ресурсов, предоставляемых
платформой Java EE 5. Кроме того, среда IDE позволяет автоматически
вкладывать ресурсы в файлы при запуске команд наподобие Call EJB или
Use Database.
Модель интерфейса API Java Persistence
В платформе Java EE 5 введен новый интерфейс API Java Persistence,
разработанный в рамках JSR-220. Интерфейс API Java Persistence также
может использоваться вне компонентов EJB, например, в веб-приложениях и
в клиентах приложений, а также вне платформы Java EE – в приложениях
Java SE.
API Java Persistence обладает следующими главными особенностями:
- Объекты являются POJO. В отличие от компонентов EJB, в
которых используется устойчивость, управляемая контейнером (CMP),
объекты, использующие новые интерфейсы API, более не являются
компонентами, и они не обязательно должны входить в модуль EJB.
- Стандартизованное объектно-реляционное сопоставление. В
новой спецификации стандартизирована работа с объектно-реляционным
сопоставлением, что избавляет разработчика от необходимости изучения
стратегий, специфичных для определенного поставщика. В интерфейсе API
Java Persistence для указания сведений объектно-реляционного
сопоставленния используются аннотации, однако поддержка дескрипторов
формата XML сохранена.
- Именованные запросы. Именованные запросы теперь являются
статическими запросами, выраженными в метаданных. Они могут быть либо
запросами интерфейса API Java Persistence, либо запросами в чистом SQL.
При этом многократное использование запросов существенно упрощается.
- Простые правила пакетирования. Поскольку компоненты
объектов являются простыми классами технологии Java, их можно
упаковывать практически из любого места в приложении Java EE. Например,
компоненты объектов могут быть частью файла
JAR EJB,
файла JAR клиента приложения, библиотеки WEB-INF/lib,WEB-INF/classes
или даже частью служебного файла JAR в файле архива
приложения уровня предприятия (EAR). Благодаря этим простым правилам
пакетирования теперь отсутствует необходимость в создании файла EAR для
использования компонентов объектов из веб-приложения или прикладного
клиента.
- Отсоединенные объекты. Поскольку компоненты объектов
являются POJO, они могут быть сериализованы и переданы по сети в другое
адресное пространство, где возможно их использование в среде, не
поддерживающей сохранение. В результате использование объектов передачи
данных (DTO) больше не требуется.
- Интерфейс API EntityManager. Прикладным программистам
теперь доступен стандартный интерфейс API EntityManager, позволяющий
выполнять операции
Create Read Update Delete (CRUD) с
участием объектов.
В среду IDE входят средства для работы с новым интерфейсом API Java
Persistence. Классы объектов можно создавать автоматически из базы
данных или создавать для них код вручную. В среде IDE также
предусмотрены шаблоны и графические редакторы для создания и
поддержания блоков сохранения.
Веб-службы
В платформе Java EE 5 использование аннотаций позволило значительно
оптимизировать и упростить поддержку веб-служб. В этом отношении
необходимо упомянуть следующие спецификации: JSR 224, Java API for
XML-Based Web Services (JAX-WS) 2.0; JSR 222, Java Architecture for XML
Binding (JAXB) 2.0; и JSR 181, Web Services Metadata for the Java
Platform.
JAX-WS 2.0
JAX-WS 2.0 представляет собой новый интерфейс API платформы Java EE
5 для веб-служб. JAX-WS 2.0, являющийся преемником JAX-RPC 1.1,
сохраняет естественную модель программирования RPC, усовершенствованную
по нескольким направлениям: связывание данных, независимость от
протокола и транспорта, поддержка стиля веб-служб REST и
простота разработки.
Определяющее отличие от JAX-RPC 1.1 состоит в том, что все
связывание теперь делегировано в JAXB 2.0. Это позволяет веб-службам на
основе JAX-WS на 100% использовать схемы XML, что приводит к повышению
совместимости и простоты использования. Эти две технологии отлично
интегрированы, так что отпадает необходимость в жонглировании двумя
наборами средств. Начиная с классов технологии Java, JAXB 2.0 позволяет
создавать документы схемы XML, автоматически внедренные в документ WDSL
(язык описания веб-служб), в результате чего пользователи избавлены от
выполнения этой процедуры интеграции вручную, что нередко приводит к
возникновению ошибок.
В JAX-WS 2.0 без дополнительной настройки поддерживаются протоколы
SOAP 1.1, SOAP 1.2 и XML/HTTP. Расширяемости протоколов с самого начала
уделялось огромное внимание, и JAX-WS 2.0 позволяет поставщикам
поддерживать дополнительные протоколы и кодировки для повышения
производительности – например, FAST Infoset – или для
специализированных областей применения. Веб-службы, в которых
используются вложения для оптимизации передачи и приема крупных объемов
двоичных данных, выигрывают от использования стандарта MTOM/XOP
(механизм оптимизации передачи сообщений/упаковка XML с оптимизацией
для двоичных данных) от W3C без отрицательного воздействия на модель
программирования. (Для получения информации о MTOM/XOP см. эту страницу) До технологии Java EE 5
для определения веб-служб требовались длинные, громоздкие дескрипторы.
Теперь достаточно разместить аннотацию @WebService в
классе технологии Java. Все общедоступные методы класса автоматически
публикуются в виде операций веб-службы, и все их аргументы
привязываются к типам данных схемы XML с помощью JAXB 2.0.
Асинхронные веб-службы
Поскольку вызовы веб-служб происходят по сети, время их исполнения
предсказать невозможно. Производительность многих клиентов, особенно
интерактивных, таких как настольные приложения на базе JFC/Swing,
значительно снижается из-за необходимости ожидания ответа сервера. Во
избежание снижения производительности в JAX-WS 2.0 предусмотрен новый
асинхронный интерфейс API клиента. Этот интерфейс API позволяет
прикладным программистам отказаться от самостоятельного создания
потоков. Вместо этого управление удаленными вызовами с длительным
временем выполнения возлагается на JAX-WS.
Асинхронные методы могут использоваться в сочетании с любыми
интерфейсами, создаваемыми WSDL, а также с более динамичным интерфейсом
API Dispatch. Для удобства программиста при импорте
документа WSDL можно запроситьсоздание асинхронных методов для любых
операций, определенных для веб-службы.
Существуют две модели использования:
- В модели опроса сначала выполняется вызов. Затем по мере
готовности запрашиваются результаты.
- В модели обратного вызова сначала регистрируется обработчик. По
мере прибытия ответов выдается оповещение.
Следует отметить, что поддержка асинхронных вызовов реализована
полностью на стороне клиента, таким образом, какие-либо изменения
целевой веб-службы не требуются.
В среду IDE входят инструменты для работы с JAX-WS. Для создания
артефактов JAX-WS можно использовать шаблоны в мастере создания файла.
Асинхронные веб-службы можно создавать с помощью редактора настройки
веб-служб. В функциональные возможности дополнения кода входят
аннотации, пригодные для веб-служб.
Что дальше?
Для получения дополнительной информации об использовании среды IDE
NetBeans 6.0 для разработки приложений Java EE см. следующие материалы: