Технологии корпоративных приложений

Обзор

Под категорию корпоративных приложений подпадают многие технологии, которые не претерпели никаких изменений с выходом версии Java EE 5 или являются слишком прикладными для того, чтобы рассматривать их в этой статье. Здесь мы сосредоточим внимание на двух основных усовершенствованиях: простоте разработки EJB и новых возможностях хранения данных.

EJB 3.0

Спецификация EJB — это основа платформы Java EE. Она определяет способ инкапсуляции бизнес-логики приложений и позволяет распределить ее способом, учитывающим масштабируемость, безопасность и поддержку транзакций так, что одновременный доступ к данным не приводит к нарушению целостности данных.

EJB делятся на 3 основных типа:
Session Beans (сеансовые компоненты) — эти компоненты бывают двух видов: не запоминающие свое состояние (stateless) и запоминающие свое состояние (stateful). Stateless EJB-компоненты используются для решения задач бизнес-логики и обслуживают одиночные запросы из клиентского кода. Stateful EJB-компоненты помнят о состоянии «диалога» с клиентом и удобны для решения наборов взаимосвязанных задач, которые охватывают множество клиентских запросов. Сеансовые EJB-компоненты не могут использоваться клиентами совместно. Они, как правило, управляют одним или несколькими Entity-компонентами.

Entity Beans (компоненты, представляющие сущности) представляют собой данные длительного хранения, которые обычно загружаются из базы данных. Entity-компоненты могут использоваться пользователями совместно, а спецификация EJB предусматривает транзакционно-безопасный механизм, который обеспечивает обработку множества одновременных клиентских запросов без опасности повреждения данных. Entity-компонент может сам управлять своей синхронизацией с базой данных или позволить управлять ею контейнеру (управляемая контейнером синхронизация — container managed persistence, CMP).

Message-driven Beans (компоненты, управляемые сообщениями) обрабатывают клиентские запросы, не заставляя клиента ждать ответа. Они, как правило, взаимодействуют с очередями Java Message Service (JMS) — еще одна технология корпоративных приложений в Java EE 5, — но также обслуживают асинхронных клиентов, даже тех, которые не написаны на Java.

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

EJB 3.0 предоставляет значительные улучшения в модели программирования EJB и является одним из крупнейших потенциальных источников повышения производительности для разработчиков Java EE 5. Теперь EJB-компонент может быть аннотированным простым Java-объектом (POJO — Plain Old Java Object), который не обязан наследовать определенным классам. Он только должен реализовать удаленный (remote) интерфейс, который можно определить самостоятельно или поручить его автоматическое создание IDE-среде. Дескрипторы развертывания больше не требуются, поскольку EJB-контейнер может извлечь все, что ему необходимо знать, из аннотаций.

В этой статье в разделе «Пример приложения: The RideSynergy» представлен пример кода, в котором содержатся конкретные примеры таких усовершенствований. Читатели, жаждущие более глубоких подробностей, смогут найти в разделе «Ресурсы» ссылки на две статьи, которые дают убедительные примеры того, насколько улучшились EJB в последней версии.

Java Persistence API (JPA 1.0)

JPA — это каркас для объектно-реляционного преобразования (ORM — object-relational mapping) для сохранения Java-объектов в реляционных СУБД. Он был разработан специально для использования с EJB, но может использоваться и для любых других объектов Java. Используя аннотации, можно указать, какие объекты и поля будут сохраняться и к каким таблицам и столбцам базы данных их необходимо прикрепить. JPA поддерживает богатый язык запросов, похожий на SQL. Язык запросов позволяет:
Определять параметры запросов в виде списков: упорядоченного (обращение к элементам по индексу) или именованного (обращение по именам параметров).

Определять запросы для установления отношений между постоянными сущностями без использования конструкции JOIN (хотя при желании можно использовать и такую конструкцию).

Применять обычные SQL-подобные средства в критериях поиска (операторы сравнения, операция LIKE, операция BETWEEN и т.д.) и определять, каким образом обрабатывать результирующее множество (с помощью таких операторов, как DISTINCT, ORDER BY, GROUP BY и т.д.)

JPA вносит новые функциональные возможности в платформу Java EE, избавляя разработчиков от головной боли, которая возникала при работе с самодельными средствами сохранения объектов или применении подходов, зависимых от контейнера. Статья «Design enterprise applications with the EJB 3.0 Java Persistence API» является хорошей отправной точкой для более глубокого изучения этой темы.