Java EE 5: Мощь и производительность при меньшей сложности

FoxPro

Технология Java EE является расширением языковой платформы Java, которое позволяет создавать масштабируемые, мощные и переносимые корпоративные приложения. В ней определено четыре типа контейнеров для компонентов приложения: Web, Enterprise JavaBean (EJB), клиентские приложения и аплеты. Эти контейнеры и поддерживаемые ими Java API подробно описаны в спецификации сервера приложений, что создает и поддерживает конкуренцию на рынке продуктов Java EE, гарантируя при этом серверную переносимость для приложений, которые придерживаются спецификации (см. врезку Краткая история Java EE).

Последняя версия платформы, Java EE 5, была выпущена в мае 2006 года. Сосредоточенная в первую очередь на производительности разработчика, Java EE 5 предоставляет простую модель программирования без ущерба для мощности и функциональности платформы. Упрощение моделей разработки обеспечивают по большей части два механизма — аннотации Java и разумные значения по умолчанию. Важнейшие функциональные усовершенствования включают расширение поддержки Web-сервисов, а также включение в платформу JavaServer Faces (JSF) и стандартной библиотеки тегов Java (JSTL — Java Standard Tag Library).
Краткая история Java EE

Java EE 5 была выпущена Сообществом разработчиков Java (Java Community Process) в виде «зонтичного» JSR (Java Specification Request), который, в свою очередь ссылается на другие спецификации, детально описывающие составляющие технологии (см. раздел Ресурсы). Ведущим разработчиком спецификации является Билл Шеннон из Sun Microsystems, руководящий экспертной группой из 31 человека, включающей как представителей крупнейших ИТ-компаний, так и индивидуальных экспертов. Предшественниками Java EE 5 были:
J2EE 1.2 (выпущена в декабре 1999 года): первая версия J2EE, вышедшая вслед за Java 2 Standard Edition (J2SE). В нее входили 10 спецификаций и API, представляющих общий Web-уровень, бизнес-логику, слой хранения данных и службу сообщений, необходимые для корпоративных приложений.

J2EE 1.3 (выпущена в сентябре 2001 года): Выпущена как JSR 28. В этой версии усовершенствованы примерно половина спецификаций версии J2EE 1.2 и добавлены XML API, архитектура коннекторов (JCA) и инфраструктура безопасности.

J2EE 1.4 (выпущена в ноябре 2003 года): В этой версии усовершенствовано 9 из 13 технологий, которые присутствуют в J2EE 1.3, и включена новая поддержка Web-сервисов и безопасности.

Java EE 5 является следующей версией после J2EE 1.4, потому что в Sun было решено убрать из названия цифру 2 (оставшуюся с тех времен, когда Java 1.2 была переименована в «Java 2»), и теперь используется слово «Java» вместо «J» в сокращенном названии технологии. Стандартное издание (Standard Edition) сейчас называется Java SE 6 (а не J2SE 1.6), а Enterprise Edition называется Java EE 5 (а не J2EE 1.5).

В данной статье рассматриваются возможности Java EE 5 и освещаются изменения, произошедшие со времени последнего релиза J2EE. (Здесь не рассматриваются такие нововведения, как StAX API — API для анализа XML с предварительной загрузкой, и некоторые мелкие или средние улучшения во многих API.) В статье приводится комплексный обзор четырех основных категорий: Web-сервисы, Web-приложения, корпоративные приложения, управление и безопасность. Также, кроме теории, в статье рассматривается небольшое приложение, которое использует возможности Java EE 5 и демонстрирует простоту модели разработки Web-приложений, которые используют сервис-ориентированную архитектуру (SOA).

Эта статья предназначена для читателей, знакомых с программными корпоративными системами, которые хотят всесторонне, на высоком уровне рассмотреть Java EE 5. Для обзора возможностей платформы знания языка программирования Java и J2EE будут полезны, но не обязательны. При обсуждении примера приложения мы углубляемся в технические детали, которые, вероятно, будут более актуальными для тех, кто уже знаком с внутренностями J2EE (или по крайней мере с программированием на Java).

Технологии Web-сервисов

С введением аннотаций в Java EE 5 разработчикам стало легче создавать сложные Web-сервисы и клиентские приложения с наименьшими затратами на написание кода и короткой кривой обучения, чем это было возможно с более ранними версиями Java EE. Аннотации — впервые введенные в Java SE 5, — это модификаторы, которые можно добавлять в код как метаданные. Они не влияют на семантику программы напрямую, но компилятор, средства разработки и библиотеки времени выполнения могут использовать их для создания дополнительных исходных файлов на языке Java, XML-документов и других артефактов, а также добавлять новое поведение в код, содержащий аннотации (см. раздел Ресурсы). Ниже в этой статье будет показано, насколько легко можно, просто добавив аннотации, превратить обычный Java-класс в Web-сервис.

Прорыв в поддержке Web-сервисов

Краеугольным камнем в поддержке Web-сервисов в Java EE 5 является JAX-WS 2.0, представляющий собой дополнение к JAX-RPC 1.1. Обе эти технологии позволяют создавать Web-сервисы, основанные на архитектурах REST или SOAP, без непосредственной утомительной обработки XML и привязки данных, необходимых для Web-сервисов. Разработчики могут свободно продолжать использовать JAX-RPC (поддержка которого по-прежнему обязательна для Java EE 5 контейнеров), однако настоятельно рекомендуется перейти на JAX-WS. Новички в Web-сервисах могут не изучать JAX-RPC, а сразу сосредоточиться на JAX-WS. Тем не менее стоит помнить, что оба они поддерживают SOAP 1.1 через HTTP 1.1 и полностью совместимы: клиент Web-сервиса JAX-WS может получить доступ к конечной точке Web-сервиса JAX-RPC, и наоборот.

JAX-WS обладает убедительным преимуществами перед JAX-RPC, а именно:
Поддерживает стандарт SOAP 1.2 (в дополнение к SOAP 1.1).

Поддерживает XML поверх HTTP. При желании можно обойтись вообще без SOAP (более подробно см. статью «Use XML directly over HTTP for Web services (where appropriate)»).

Использует архитектуру Java Architecture for XML Binding (JAXB) для привязки данных к модели. JAXB полностью поддерживает XML Schema и имеет высокую производительность (об этом будет рассказано далее).

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

Поддерживает механизм оптимизации передачи сообщений (MTOM — Message Transmission Optimization Mechanism). MTOM рекомендован W3C для оптимизации передачи и формата SOAP-сообщений.

Предоставляет усовершенствованную поддержку кросс-платформенного взаимодействия Web-сервисов (WS-I — Web services interoperability). (Поддерживается Basic Profile 1.1; JAX-WS поддерживает только Basic Profile 1.0.).

Предоставляет усовершенствованную поддержку вложений SOAP. (Используется SOAP with Attachments API for Java [SAAJ] 1.3; JAX-WS поддерживает только SAAJ 1.2.).

Узнать больше о различиях можно из статьи «JAX-RPC versus JAX-WS».

Инструмент wsimport в JAX-WS автоматически берет на себя многие детали разработки Web-сервиса и легко встраивается в процесс сборки на любой платформе, позволяя разработчику сосредоточиться на реализации логики приложения, которое реализует или использует службу. Он генерирует такие артефакты, как сервисы, интерфейсы конечной точки сервисов (SEI), код для асинхронного ответа, исключительные ситуации, основанные на ошибках WSDL, а также классы Java, привязанные к типам схемы с помощью JAXB.

JAX-WS также позволяет создавать высокопроизводительные Web-сервисы. См. статью «Implementing High Performance Web Services Using JAX-WS 2.0» в разделе Ресурсы, которая представляет сравнительное исследование эквивалентных реализаций Web-сервисов, основанных на новом стеке JAX-WS (который использует две другие возможности Java EE 5 для Web-сервисов- JAXB и StAX) и стеке JAX-RPC, включенном в J2EE 1.4. В ходе исследования было установлено, что с JAX-WS увеличение производительности составляет от 40% до 1000% в зависимости от функциональной области и нагрузки.

В начало

Технологии Web-приложений

В Java EE 5 к технологиям для разработки внешнего интерфейса Web-приложений вдобавок к существующим спецификациям JavaServer Pages и Servlet были добавлены два важных фрагмента — JSF и JSTL. JSF представляет собой набор программных интерфейсов (API), которые позволяют применять компонентно-ориентированный подход при разработке пользовательских интерфейсов. JSTL — это набор библиотек тегов, которые поддерживают встраивание процедурной логики, доступ к JavaBeans и командам SQL, локализованные инструкции форматирования, а также обработку XML в JSP. Самые последние версии JSF, JSTL и JSP поддерживают единый язык выражений (EL), что позволяет легко интегрировать эти технологии (см. раздел «Ресурсы»).

JSF 1.2

JSF имеет встроенную поддержку для решения общих проблем построения пользовательского интерфейса, таких как управление состоянием компонента, обработка событий, навигация, валидация пользовательского ввода, интернационализация. Опытные разработчики могут создавать собственные мощные и многократно используемые компоненты и правила отображения для клиентских устройств, отличающихся от Web-браузера. Менее технически подкованные пользователи могут повторно использовать пользовательские компоненты, включенные по умолчанию в библиотеку тегов JSF для интерфейсов HTML, в визуальных средах программирования, таких как Sun Java Studio Creator. Это позволяет начинающим программистам создавать современные Web-интерфейсы.

Появляется все больше компонентов JSF, написанных сторонними разработчиками, как сообществами Open Source, так и представителями индустрии лицензионного программного обеспечения. В Интернете можно найти множество библиотек, поискав по запросам «JSF components» или «JSF component libraries». Многие из этих компонентов работают с технологией Asynchronous JavaScript + XML (AJAX), которая является движущей силой Web 2.0-подхода. Web-программисты могут использовать их для создания приложений с более широкими возможностями, чем у традиционных Web-приложений, избегая при этом лишней работы по написанию Ajax-компонентов с нуля.

JSP 2.1

Технология JSP входит в состав J2EE с версии 1.2. Она расширяет спецификацию Java Servlet возможностями декларативного программирования пользовательских интерфейсов. JSP предоставляет поддержку программирования пользовательских интерфейсов как документов, которые транслируются в Java-сервлеты, компилируются и вызываются контейнером Web-приложения для обработки запросов. Эти документы, как правило, сочетают в себе директивы JSP и скриптлеты с языком разметки, таким как HTML. В JSP-документах можно использовать старый синтаксис, который основан на специальных тегах, начинающихся с , или новый синтаксис — корректно сформированный XML. Они, как правило, выступают как часть «Вид» в UI-каркасах, основанных на шаблоне «модель-вид-контроллер» (MVC).

JSP 2.1 и JSF 1.2 более совместимы между собой, чем предыдущие версии, в первую очередь благодаря интеграции синтаксиса их языков выражений в унифицированный EL. Этот EL позволяет выполнять такие операции, как:
Доступ к свойствам JavaBeans в контекстах запроса, пользовательской сессии и всего приложения.
Проверка логических условий, которые определяют, скрыть или показать конкретный элемент.
Выполнение расчетов, влияющих на числа и строки, которые отображаются в пользовательском интерфейсе.

В прошлом существовали различия между в синтаксисе EL в JSP и JSF и в том, как контейнеры обрабатывали их. Унифицированный EL устраняет эти различия, а также добавляет такие функции, как:
Модифицируемый каркас для настройки интерпретации EL.
Поддержка отложенных выражений, которые могут выполняться по мере необходимости обработчиком JSP-тегов.
Поддержка операций присваивания, которые могут, например, использовать выражения EL для установки значения свойства JavaBean-компонента из кода JSP.

Большим подарком для разработчиков библиотек JSP-тегов является поддержка подключения ресурсов в обработчики тегов с помощью аннотаций. Это позволяет значительно упростить теги, которые раньше требовали конфигурирования ресурсов и кода для выполнения поиска в JNDI.