Компонентно-ориентированная технология — это технология создания больших программных комплексов, в том числе таких как АСУ, выделяемая среди объектно-ориентированных технологий благодаря большей функциональной законченности используемых компонентов. Различные компоненты, которые могут использоваться в приложениях, распределены по различным узлам сети
J2EE (Java 2 Enterprise Edition) — комплекс взаимодействующих объектно- и компонентно-ориентированных технологий, который можно рассматривать как стандарт и платформу для создания прикладных программных комплексов (в том числе и распределенных систем) на основе использования языка Java. Подразумевается, что при этом используется среда JDK версии 1.2 или старше, что отражено цифрой "2" в названии.
Приложения, удовлетворяющие стандарту J2EE, состоят из компонентов, которые в процессе выполнения приложений взаимодействуют друг с другом. Спецификация определяет компоненты следующих типов:
Технология J2EE создана в 1999 г. В состав J2EE входят [1,2] в качестве основных технологии EJB (Enterprise JavaBeans), сервлетов, JSP. Кроме того, в J2EE используются технология удаленного вызова объектов RMI, служба управления транзакциями в распределенных системах JTS, стандарт взаимодействия J2EE с реляционными базами данных JDBC.
В соответствии со спецификацией EJB процесс разработки распределенной системы включает следующие этапы:
Обычно под сервером приложений (application server) понимают любое приложение, которое в рамках распределенной системы способно получать и обслуживать запросы клиентов. Далее термин "Application Server" будет применяться только к серверным приложениям, созданным в соответствии с технологией J2EE.
Важное место в технологиях распределенных вычислений занимают контейнеры приложений. В J2EE все компоненты разворачиваются и выполняются также в специальных контейнерах, управляемых сервером приложений. Контейнеры являются интерфейсом между компонентом и низкоуровневыми платформно-зависимыми функциональными возможностями, поддерживающими компонент.
Контейнер компонентов EJB служит для управления циклом жизни экземпляров (instances) компонентов — их установкой, созданием, активизацией/деактивизацией, сохранением состояния, доставкой клиентских запросов, уничтожением. Для своего выполнения компонент должен быть скомпонован в J2EE-приложение и размещен внутри своего контейнера. Процесс компоновки включает в себя определение установок контейнера для каждого компонента в J2EE-приложении и для самого J2EE-приложения. Установки контейнера касаются таких сервисов как безопасность, управление транзакциями, JNDI-поиск и удаленная связь.
Аналогичные функции по отношению к сервлетам и компонентам JSP выполняет Web-контейнер, а по отношению к аплетам — контейнер аплетов.
Компонент в J2EE- представляет собой законченный функциональный программный модуль, встроенный в приложение J2EE с соответствующими классами и файлами и взаимодействующий с другими компонентами. Разделяют компоненты клиентские (встроенные в HTML- и XML-документы, Java-аплеты, браузер) и серверные (Web-компоненты и бизнес-компоненты, реализующие прикладную логику). Web-компоненты могут быть либо сервлетами, либо страницами JSP. Сервлеты — это классы языка Java, которые динамически управляют запросами и конструируют ответы. JSP-страницы являются текстовыми документами, которые исполняются так же, как и сервлеты, но предлагают более естественный подход к созданию статического содержания. Компоненты JavaBeans используются для управления потоком данных между клиентскими и серверными компонентами или между компонентами сервера и базой данных (рис. 1).
Рис. 1.  Структура распределенной системы на основе J2EE
Бизнес-компоненты, иначе называемые корпоративными, подразделяются на сессионные, управления данными и управляемые сообщениями. Сессионные компоненты предназначены для кратковременного общения с клиентом. Когда клиент заканчивает работу, сессионный компонент и его данные исчезают. Данные из компонентов управления данными сохраняются в БД. Управляемые сообщениями компоненты комбинируют особенности сессионного компонента и службы сообщений JMS , позволяя бизнес-компоненту получать сообщения JMS асинхронно.
JMS (Java Message Service) — это набор интерфейсов и стандарт обмена сообщениями, позволяющий компонентам J2EE-приложения создавать, посылать, принимать и читать сообщения. Он обеспечивает двустороннее, надежное, асинхронное распределенное соединение, допускает взаимодействие с существующими MOM (Message-Oriented Middleware) системами. JMS поддерживает работу как в стиле "отправитель-получатель", так и в режиме "рассылка-подписка".
Другие средства, входящие в J2EE:
1. JDBC (Java DataBase Connectivity) — стандарт взаимодействия J2EE с реляционными базами данных, позволяющий "соединить" Java-программы и SQL. API JDBC позволяет вызывать SQL-команды из модулей, написанных на языке Java. Основными частями технологии JDBC являются JDBC API (набор классов и методов, к которым обращается прикладной программист) и JDBC-драйверы, которые транслируют эти вызовы в команды API конкретной СУБД. JDBC поддерживает распределенные базы данных и двухфазное завершение транзакций.
2. JNDI (Java Naming and Directory Interface) — набор Java-интерфейсов, описывающих функции, характерные для так называемых "служб имен" и "служб каталогов". Под "службой имен" понимают структуры, обеспечивающие хранение некоторых ресурсов и доступ к ним по сопоставленным с этими ресурсами произвольным именам (например, файловые системы операционных сред). "Служба каталогов" (Directory Service) может рассматриваться как расширение служб имен за счет сопоставления с ресурсами дополнительных атрибутов (помимо имен) и управления ими.
3. JTS (Java Transaction Service) — служба управления транзакциями в распределенных системах (не путать с транзакциями на уровне систем управления базами данных), в том числе созданных в соответствии со стандартами J2EE. Для использования JTS взаимодействие объектов в рамках распределенной системы должно происходить с использованием протокола IIOP — базового протокола CORBA. В качестве транзакционного API для работы с JTS используется JTA.
4. JTA (Java Transaction API) — набор классов и методов, который обеспечивает основную функциональность для управления транзакциями — начать транзакцию, завершить ее с подтверждением или с откатом, получить ее статус. Вызовы JTA обычно транслируются в вызовы JTS (или сразу в вызовы API конкретной реализации JTS).
5. Java API for XML Processing (JAXP)- средство, предназначенное для обработки XML-документов с использованием спецификаций DOM, SAX и XSLT. JAXP позволяет приложениям анализировать и преобразовывать XML-документы.
6. J2EE Connector Architecture — продукт для создания адаптеров, поддерживающих доступ к информационным системам предприятий. Адаптер ресурса — это программный компонент, позволяющий компонентам J2EE-приложения иметь доступ и взаимодействовать с базовым менеджером ресурса.
7. RMI (Remote Method Invocation) — технология обеспечения удаленного взаимодействия объектов в распределенных системах, написанных на Java. Концептуально очень похожа на CORBA. Для RMI (в отличие от CORBA) характерна передача объектов "по значению" — с использованием механизма сериализации Java.
Технология RMI сравнительно проста. Программирование с использованием RMI не вызывает проблем, если разработчик приобрел определенный опыт создания распределенных приложений и программирования на языке Java. При этом не требуется использование абстрактных языков (таких как IDL) для описания удаленного серверного объекта, не создается никаких сервисов, как это было в случае с CORBA. Но все эти аспекты должны учитываться разработчиками. Для использования RMI необходимо наличие Java-машин на обеих сторонах соединения.
Для технологии J2EE характерно теснейшее взаимодействие технологий RMI и CORBA. В частности, механизмом выполнения удаленных вызовов в J2EE (EJB) является RMI, но с использованием протокола CORBA IIOP, и транзакционность такого взаимодействия обеспечивается в соответствии со спецификацией CORBA OTS, "отображенной" стандартным образом на Java (JTS).
Формально такое взаимодействие определено с помощью введения некоторого подмножества возможностей, характерных как для RMI, так и для CORBA. Это подмножество получило название RMI/IIOP (или RMI/IDL).
Список литературы
1. К.Амриш, Х.Ахмед. Разработка корпоративных Java-приложений с использованием J2EE и UML. — М.: Изд. дом "Вильямс", 2002.
2. http://www.jbuilder.ru/glossary/j2ee.htm
3. Monica Pawlan. Учебное пособие по J2EE. — http://www.TrueMind.ru