Опубликован: 10.10.2010 | Уровень: специалист | Доступ: платный
Дополнительный материал 2:

EJB (Enterprise JavaBeans)

Аннотация: В лекции дается общее описание технологии EJB

Говорить о создании распределенных приложений с использованием технологии Java и не упомянуть о технологии EJB ( Enterprise JavaBeans ) невозможно.

Enterprise JavaBeans - это высокоуровневая, базирующаяся на использовании компонентов технология создания распределенных приложений, которая использует низкоуровневый API для управления транзакциями. Первый вариант спецификации Enterprise JavaBeans появился в марте 1998 г., в настоящий момент актуальна версия 3.0 - технология прошла за это время большой путь и продолжает развиваться.

Enterprise JavaBeans - больше, чем просто технологическая подложка. Ее использование подразумевает еще и технологию (процесс) создания распределенного приложения - навязывает определенную архитектуру приложения, а также определяет стандартные роли для участников разработки. Действительно, анализ того, что такое создание масштабируемых и эффективных серверов приложений с использованием Java, приводит к необходимости рассмотрения следующих стандартных проблем:

  • организация удаленных вызовов между объектами, работающими под управлением различных виртуальных машин Java ;
  • управление потоками на стороне сервера;
  • управление циклом жизни серверных объектов (создание, взаимодействие с пользователем, уничтожение);
  • оптимизация использования ресурсов (время процессора, память, сетевые ресурсы);
  • создание схемы взаимодействия контейнеров и операционных сред;
  • создание схемы взаимодействия контейнеров и клиентов, включая универсальные средства создания разработки компонентов и включения их в состав контейнеров;
  • создание средств администрирования и обеспечение их взаимодействия с существующими системами;
  • создание универсальной системы поиска клиентом необходимых серверных компонентов;
  • обеспечение универсальной схемы управления транзакциями;
  • обеспечение требуемых прав доступа к серверным компонентам;
  • обеспечение универсального взаимодействия с СУБД.

Технология Enterprise JavaBeans как раз определяет некоторый набор универсальных и предназначенных для многократного использования компонентов, которые называются Enterprise beans (далее - компоненты EJB).При создании распределенной системы ее бизнес-логика будет реализована в этих компонентах. Каждый компонент EJB состоит из удаленного интерфейса, собственного интерфейса и реализации EJB-компонента.Удаленный интерфейс ( remote -интерфейс) определяет бизнес-методы, которые может вызывать клиент EJB. Собственный (домашний) интерфейс ( home -интерфейс) предоставляет методы create для создания новых экземпляров компонентов EJB, методы поиска (finder) для нахождения экземпляров компонентов EJB и методы remove для удаления экземпляров EJB. Реализация EJB -компонента определяет бизнес-методы, объявленные в удаленном интерфейсе, и методы создания, удаления и поиска собственного интерфейса.

После завершения их кодирования наборы компонентов EJB помещаются в специальные файлы (архивы, jar ), по одному или более компонентов, вместе со специальными параметрами поставки ( deployment ). Затем они устанавливаются в специальной операционной среде, в которой запускается контейнер EJB. Контейнер EJB предоставляет окружение выполнения и средства управления жизненным циклом EJB -компонентам. Клиент осуществляет поиск компонентов в контейнере с помощью home -интерфейса соответствующего компонента. После того, как компонент создан и/или найден, клиент выполняет обращение к его методам с помощью remote -интерфейса.

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

Все экземпляры компонентов EJB выполняются под управлением контейнера EJB. Контейнер предоставляет системные сервисы размещенным в нем компонентам и управляет их (компонентов) жизненным циклом. В общем случае контейнер предназначен для решения следующих задач:

  • обеспечение безопасности - дескриптор поставки ( deployment descriptor ) определяет права доступа клиентов к бизнес-методам компонентов. Обеспечение защиты данных обеспечивается за счет предоставления доступа только для авторизованных клиентов и только к разрешенным методам;
  • обеспечение удаленных вызовов - контейнер берет на себя все низкоуровневые вопросы обеспечения взаимодействия и организации удаленных вызовов, полностью скрывая все детали как от разработчика компонентов, так и от клиентов, которые пишут код точно так же, как если бы система работала в локальной конфигурации, т.е. вообще без использования удаленных вызовов;
  • управление циклом жизни - клиент создает и уничтожает экземпляры компонентов, однако контейнер для оптимизации ресурсов и повышения производительности системы может самостоятельно выполнять различные действия, например, активизацию и деактивацию этих компонентов, создание их пулов и т.д.;
  • управление транзакциями - все параметры, необходимые для управления транзакциями, помещаются в дескриптор поставки. Все вопросы по обеспечению управления распределенными транзакциями в гетерогенных средах и взаимодействия с несколькими базами данных берет на себя контейнер EJB. Контейнер обеспечивает защиту данных и гарантирует успешное подтверждение внесенных изменений; в противном случае транзакция откатывается.

Существуют два типа компонентов EJB: Session - и Entity -компоненты.

Session-компоненты

Session -компонент представляет собой объект, созданный для обслуживания запросов одного клиента. В ответ на удаленный запрос клиента контейнер создает экземпляр такого компонента. Session -компонент всегда сопоставлен с одним клиентом, и его можно рассматривать как "представителя" клиента на стороне EJB -сервера. Такие компоненты могут "знать" о наличии транзакций - они могут отвечать за изменение информации в базах данных, но сами они непосредственно не связаны с представлением данных в БД.

Session -компоненты являются временными объектами. Обычно Session -компонент существует, пока создавший его клиент поддерживает с ним сеанс связи. После завершения связи с клиентом компонент уже никак не сопоставлен с ним. Объект считается временным, так как в случае завершения работы или краха сервера клиент должен будет создать новый компонент.

Обычно Session -компонент содержит параметры, которые характеризуют состояние его взаимодействия с клиентом, т.е. он сохраняет некоторое состояние между вызовами удаленных методов в процессе сеанса связи с клиентом.

Entity-компоненты

Entity -компоненты представляют собой объектное представление данных из базы данных. Например, Entity -компонент может моделировать одну запись из таблицы реляционной базы данных (или набор записей из связанных таблиц). Ключевым отличием от Session -компонента является то, что несколько клиентов могут одновременно обращаться к одному экземпляру такого компонента. Entity -компоненты изменяют состояние сопоставленных с ними баз данных в контексте транзакций.

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

Составные части EJB-компонента

EJB -компонент физически состоит из нескольких частей, включая сам компонент, реализацию некоторых интерфейсов и информационный файл. Все это собирается вместе в специальный jar -файл - модуль развертывания.

Enterprise Bean

Сам Enterprise Bean является Java -классом, разработанным поставщиком Enterprise Bean. Он реализует интерфейс Enterprise Bean и обеспечивает реализацию бизнес-методов, которые выполняет компонент. Класс не реализует никаких авторизации, многопоточности или кода транзакции.

Домашний интерфейс

Каждый создающийся Enterprise Bean должен иметь ассоциированный домашний интерфейс. Домашний интерфейс применяется как фабрика для компонента EJB. Клиент использует домашний интерфейс для нахождения экземпляра компонента EJB или создания нового экземпляра компонента EJB.

Удаленный интерфейс

Удаленный интерфейс является Java -интерфейсом, который отображает через рефлексию те методы Enterprise Bean, которые необходимо показывать внешнему миру. Удаленный интерфейс играет ту же роль, что и IDL -интерфейс в CORBA, и обеспечивает возможность обращения клиента к компоненту.

Описатель развертывания

Описатель развертывания является XML -файлом, который содержит информацию относительно компонента EJB. Использование XML позволяет установщику легко менять атрибуты компонента. Конфигурационные атрибуты, определенные в описателе развертывания, включают:

  • имена домашнего и удаленного интерфейса;
  • имя JNDI для публикации домашнего интерфейса компонента;
  • транзакционные атрибуты для каждого метода компонента;
  • контрольный список доступа для авторизации.

EJB-Jar-файл

EJB-Jar -файл - это обычный java-jar -файл, который содержит компонент (компоненты) EJB, домашний и удаленный интерфейсы, а также описатель развертывания.

Роли EJB

Использование Enterprise JavaBeans предполагает разбиение процесса создания распределенного приложения на шесть отдельных этапов, с каждым из которых сопоставлены свои задачи и, соответственно, обязанности (роли) исполнителей. Эти роли можно разбить на три группы: инфраструктура, собственно разработка приложений и их поставка и настройка.

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

Роли обеспечения инфраструктуры

Server Provider создает платформу для разработки распределенного приложения и среду для его выполнения ( EJB -сервер).

Container Provider предоставляет средства для поставки компонентов EJB и среду выполнения для установленных экземпляров компонентов ( EJB -контейнер).

Роли разработки приложений

Bean Provider собственно разрабатывает компоненты - определяет remote- и home -интерфейсы компонента, реализует его бизнес-методы, а также создает дескриптор поставки ( Deployment Descriptor ) компонента. При разработке он не заботится о таких вещах, как обеспечение удаленного взаимодействия, управление транзакциями и безопасностью и прочими не имеющими к бизнес-логике конкретного компонента аспектами, так как эти проблемы должен решать Container Provider.

Application Assembler - это эксперт в прикладной области, который выполняет сборку приложения из готовых блоков (компонентов EJB ) и добавляет некоторые другие элементы, например, апплеты или сервлеты для создания готового приложения. В процессе своей работы он имеет дело с интерфейсами компонентов EJB (а не с кодом его бизнес-методов), а также с дескриптором поставки. Результатом его работы может быть как готовое приложение, так и более сложный составной компонент EJB.

Роли поставки и настройки

Задача Deployer - настроить приложение, собранное из компонентов EJB, для его выполнения к конкретной операционной среде. Достигается это путем изменения свойств компонента. Например, deployer определяет поведение транзакций или профили безопасности путем установки тех или иных значений для свойств, находящихся в дескрипторе поставки. Его задачей также является интеграция приложения с существующими программными средствами управления корпоративной системой.

System Administrator работает с уже установленным приложением. Его задача - задание конфигурации и администрирование информационной инфраструктуры EJB -сервера и контейнеров. Administrator отслеживает поведение системы, определяя ее узкие места. Обычно при этом используются корпоративные средства контроля, с которыми (посредством специальных средств на уровне контейнера) интегрировано конкретное приложение.

В соответствии с такой схемой традиционный прикладной программист - это, как правило, bean provider и, возможно, application assembler. Эти роли позволяют такому разработчику сфокусировать свое внимание на разработке и реализации бизнес-логики системы. Deployer определяет значения параметров поставки в процессе установки компонента. Сложные вопросы реализации требований поставки берет на себя специально подготовленный поставщик программных средств. Хотя процесс создания распределенных приложений остается достаточно сложным, существенно облегчается работа обычного прикладного программиста - за счет делегирования многих вопросов разработчикам EJB -серверов и контейнеров.

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

Инфраструктура Enterprise JavaBean

Создатели серверов и контейнеров EJB реализуют инфраструктуру EJB. Инфраструктура обеспечивает удаленное взаимодействие объектов, управление транзакциями и безопасность приложения. Спецификация EJB оговаривает требования к элементам инфраструктуры и определяет Java Application Programming Interface ( API ); она не касается вопросов выбора платформ, протоколов и других аспектов, связанных с реализацией.

Ниже (рис. 15.1) показаны различные элементы инфраструктуры EJB. Она должна обеспечивать канал связи с клиентом и другими компонентами EJB. Инфраструктура должна также обеспечить соблюдение прав доступа к компонентам EJB.

Компоненты, контейнеры и серверы EJB

Рис. 15.1. Компоненты, контейнеры и серверы EJB

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

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

Более подробно со спецификацией EJB можно познакомиться на официальной странице Enterprise JavaBeans по адресу java.sun.com/pro-ducts/ejb/.

Алмаз Мурзабеков
Алмаз Мурзабеков
Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type"


Java version 1.7.0_05
Игорь Шаталов
Игорь Шаталов
Украина, Донецк, Донецкий национальный университет, 2012