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

История коммерческого распространения Java начинается в 1995 году. Незадолго до этого в Sun Microsystems было решено создать среду, которая упростила бы развертывание приложений по сети. Обеспечить кроссплатформенность на уровне скомпилированного кода можно путем создания виртуальной машины или промежуточного языка, который бы «докомпилировался» в машинный код конкретной платформы. Развитие Java идет и по первому, и по второму пути. Первоначально в качестве гетерогенной среды распространения Java-приложений рассматривались клиенты и серверы компьютерных сетей, с развитием мобильных технологий выяснилось, что виртуальные машины Java хорошо подходят и для этой категории устройств — в первую очередь, благодаря кроссплатформенности. Может показаться, что Java — не лучший выбор для мобильных платформ, ведь виртуальная машина «съедает» значительную часть ресурсов системы, а на мобильных платформах ограниченность ресурсов ощущается особенно остро. Но низкая ресурсоемкость — не единственное достоинство программы. Спектр процессоров, аппаратных конфигураций и программных сред в мире мобильных устройств гораздо шире, чем среди «больших» компьютеров. Поэтому разработчики заинтересованы в возможности создавать программы, готовые к работе на широком спектре платформ. Ну а пользователи мобильных устройств — в том, чтобы программ для выбранной ими модели было как можно больше.

В настоящее время Java развивается по трем направлениям. Основная платформа, Java Standard Edition, предназначена для широкого спектра настольных систем; это самая универсальная и самая доступная Java-платформа. Java Enterprise Edition — платформа, ориентированная на корпоративное программное обеспечение; ее отличительная черта — наличие компонентов, специально предназначенных для решения распространенных задач построения корпоративных систем. Платформа Java Micro Edition рассчитана на разработку и развертывание приложений для мобильных устройств; ее отличает облегченный набор компонентов с низкими требованиями к ресурсам и ориентация на разработку клиентских программ. Все три варианта Java пересекаются, и значительное число Java-приложений может выполняться на всех трех платформах.

Java Enterprise

Официальное определение данной платформы звучит так. Java 2 Platform, Enterprise Edition (J2EE) представляет собой набор взаимосвязанных спецификаций и технологий, предназначенных для разработки, развертывания и управления многозвенными приложениями, ориентированными на серверную архитектуру.

Что J2EE дает разработчикам? Прежде всего — надежную кроссплатформенную среду с богатым набором готовых компонентов. Кроссплатформенные возможности могут пригодиться при решении самых разных задач, от создания графического интерфейса пользователя (так, Java используется для построения графических интерфейсов СУБД Oracle) до возможности разработки клиентских приложений баз данных и распределенных приложений в гетерогенных сетях.

Java чрезвычайно упрощает распространение приложений с закрытыми исходными тестами на платформе Linux. Проблемы, возникающие при распространении коммерческих приложений для различных дистрибутивов Linux, связаны с тем, что, в то время как компиляция программ из исходных текстов выполняется без затруднений, распространение приложений в двоичной форме затруднено несовместимостью различных компонентов системы в разных дистрибутивах на двоичном уровне. В случае выбора в качестве платформы для развертывания приложений J2EE, у разработчика появляется возможность создавать приложения, готовые к развертыванию в средах Windows, Solaris и Linux, причем на всех процессорных архитектурах, ими поддерживаемых. (В связи с этим уместно отметить J2EE Deployment API, специальный программный интерфейс, предназначенный для решения задач развертывания приложений.) К тому же, в то время как несовместимость скомпилированных программ с разными дистрибутивами Linux часто вызвана отсутствием обратной совместимости между разными версиями одних и тех же библиотек, в Java обратная совместимость среды времени исполнения — обязательное требование.

Кроме того, поскольку Java изначально создавалась как сетевая технология, проблемам построения приложений, взаимодействующих друг с другом по сети, уделялось особое значение. Сервисы сообщений Java позволяют организовывать взаимодействие между слабо связанными компонентами в асинхронном режиме. С помощью технологий CORBA и RPC компоненты приложений могут быть объединены в более тесные структуры. Технология J2EE Connectors позволяет связывать Java-приложения с корпоративными серверными решениями, например с ERP-системами.

Еще одно серьезное преимущество Java Enterprise — прозрачный и унифицированный доступ к базам данных, осуществляемый с помощью JDBC. Унифицированные средства доступа к различным СУБД являются существенным компонентом многих систем разработки.

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

Sun Java System Application Server

Sun Java System Application Server — это сервер приложений на платформе J2EE в составе Sun Java enterprise System. Перечень его возможностей чрезвычайно широк как в сфере готовых решений (от Web-публикации до управления транзакциями в масштабе предприятия), так и в области технологий разработки приложений. Использование среды Java позволяет организовать управление сервером через Web-интерфейс, что делает потенциально возможным удаленное администрирование сервера с любого устройства, поддерживающего среду Java, включая карманные компьютеры. Впрочем, если соображения безопасности не позволяют использовать Web-интерфейс, существует возможность управлять сервером с помощью утилиты командной строки.

Основой Web-функциональности Sun Java System AS является Web-сервер Tomcat. Он поддерживает сервис сообщений на базе MDB, почтовый сервер, а также средства контроля безопасности, управления и развертывания приложений.

Sun Java System AS реализует несколько типов контейнеров серверных приложений.

  • Web-контейнеры создают среду для Web-приложений, размещенных на сервере. К приложениям этого типа относятся сервлеты и страницы JSP. Контейнер управляет временем жизни сервлетов и JSP, организует взаимодействие с клиентами, а также организует взаимодействие сервлетов и JSP с компонентами EJB с использованием сервиса имен JNDI.
  • EJB-контейнеры создают среду для EJB-компонентов точно так же, как Web-контейнеры создают среду выполнения для сервлетов и JSP. Кроме управления временем жизни компонентов EJB-контейнеры решают задачи управления транзакциями, безопасности, взаимодействия с базами данных, управления состоянием компонентов между транзакциями, многопоточностью и т. д. EJB-контейнеры могут управлять компонентами MDB, реализуя взаимодействие с помощью JMS.

Следуя современным тенденциям в области безопасности, Sun Java System AS позволяет организовывать административные домены, которые представляют собой объединенные общими правилами безопасности группы экземпляров сервера приложений. В рамках одной системы несколько доменов могут разделять один физический сервер.

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

Sun Java System AS поддерживает безопасные транзакции при использовании Web-страниц, протокола Authorization Contract for Containers (ACC), Web-сервисов и сервиса сообщений JMS. С точки зрения обеспечения безопасности архитектура сервера приложений выглядит так: Web-клиенты (браузеры и клиенты Web-сервисов) взаимодействуют с сервером приложений, используя Web-сервер в качестве промежуточного слоя. Клиенты, реализующие механизм ACC, взаимодействуют с контейнерами EJB, а клиенты, реализующие взаимодействие посредством JMS, — с компонентами, управляемыми сообщениями.

Важной концепцией сервера приложений являются домены безопасности, которые представляют собой группы сервисов сервера приложений, объединенные общей «политикой безопасности». Администратор сервера приложений сам устанавливает домен безопасности для каждого экземпляра сервера.

Система развертывания приложений на платформе J2EE основана на концепции модулей — специальных файлов-архивов, содержащих компоненты Java-приложений. J2EE поддерживает три типа модулей. Архивы Web-приложений предназначены для распространения приложений-сервлетов и страниц JSP. Архивы этого типа обычно включают сервлеты, страницы HTML, файлы классов Java и другие файлы, составляющие Web-приложение. Модули EJB JAR представляют собой расширение формата JAR для J2EE. Эти архивы содержат компоненты EJB, вспомогательные классы Java, а также файлы-дескрипторы развертывания. Клиентские модули JAR предназначены для распространения клиентских Java-приложений, использующих технологии RMI или IIOP для организации взаимодействия с сервером. Архивы ресурсов (RAR-файлы) применяются для распространения коннекторов J2EE.

Некоторые средства развертывания приложений предназначены для того, чтобы упростить управление их жизненным циклом. Например, сервер приложений позволяет «отключить», то есть сделать недоступным то или иное приложение, не удаляя его с сервера. Другая важная особенность развертывания приложений на Java-серевере позволяет обновлять компоненты приложения динамически, без переустановки приложения. (Подобная схема реализована и в .Net.)

Богатые и обеспеченные

Появление в числе контейнеров сервера приложений контейнеров, предназначенных для приложений-клиентов не случайно. Одна из технологий, способная эффективно использовать размещение клиентских программ на сервере, получила название «обеспечение клиентов» (client provisioning). Технология эта находится в начальной стадии разработки. Технология обеспечения клиентов вызвана к жизни прежде всего распространением большого числа мобильных и встроенных клиентских систем, обладающих широким набором функций, в том числе в сфере мультимедиа (такие клиенты получили название «богатых клиентов»). С одной стороны, богатые клиенты позволяют реализовать новые возможности взаимодействия с сервером (например, передача мультимедиа-контента), с другой стороны, уже упоминавшееся разнообразие платформ делает использование единообразного клиентского программного обеспечения недостаточно эффективным для решения задач подобного рода. Действительно, подача мультимедиа-контента в наибольшей степени зависит от возможности устройства, и использование единой мультимедийной платформы неизбежно приводит к «уравниловке», при которой устройства с более богатой функциональностью не могут задействовать все свои возможности, а менее богатые устройства расходуют часть ресурсов на прием данных, которые они не в состоянии отобразить. С другой стороны, распространение вместе с устройствами большого числа клиентов, адаптированных каждый под своего устройство, затрудняет решение задачи централизованного управления и развертывания клиентов и в конечном счете опять-таки снижает эффективность взаимодействия с сервером.

Технология обеспечения клиентов решает указанную проблему путем передачи серверу, предоставляющему контент, задачи развертывания клиентских приложений, адаптированных к различным типам мобильных устройств. На сервере J2EE, поддерживающем обеспечение клиентов (такой сервер называется «портал обеспечения») организуется репозитарий клиентских приложений, предназначенных для платформ J2SE, J2ME и даже для «не-Java»-платформ. Эти приложения передаются клиентам, требующим определенные сервисы с использованием средств динамического развертывания. Таким образом, сервер, реализующий обеспечение клиентов, получает возможность не только предоставлять свои сервисы клиентам различных типов, но и вести централизованное управление клиентами, обновление версий и т. п. Кроме того, сервер может взять на себя дополнительные функции, такие как управление профилями пользователей и биллинг.

Основой технологии обеспечения клиентов является интерфейс Service Provider Interface, который реализует функции обслуживания различных типов устройств (в том числе устройств, не поддерживающих Java) и новый формат модулей развертывания Provisioning Archive. Данный формат предполагается применять для распространения не только приложений, но и контента.

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


Особенности J2EE

Основными отличительными чертами J2EE, делающими функциональность этой среды привлекательной для разработки серверных приложений, являются мощные механизмы управления транзакциями и компоненты Enterprise JavaBeans.

В рамках платформы J2EE предусмотрено три основных типа транзакций — транзакции с базами данных, транзакции JMS и транзакции, выполняемые с помощью коннекторов J2EE.

Взаимодействие с базами данных выполняется на платформе J2EE с помощью JDBC API, интерфейса программирования, реализующего унифицированное взаимодействие с различными источниками данных. Первые версии JDBC API поддерживали работу только с SQL-СУБД, но начиная с версии JDBC 3.0 стало возможным также взаимодействие с «обычными» файлами, содержащими таблицы. JDBC API реализует двухзвенную и трехзвенную модель взаимодействия с базами данных.

JMS представляет собой метод взаимодействия компонентов системы с использованием сообщений. Главная его отличительная черта — асинхронность. Участниками обмена данными с помощью JMS являются сервлеты, страницы JSP и Enterprise Beans.

Коннекторы J2EE позволяют организовать взаимодействие с компонентами Enterprise JavaBeans в синхронном режиме. Их можно рассматривать как «драйверы Java», предоставляющие унифицированный интерфейс для взаимодействия с системами категории «не-Java».

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

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

Начиная с версии EJB 2.0 появилась еще одна категория компонентов — Message Driven Beans (MDB). Введение MDB было связано с развитием сервисов сообщений JMS: c их помощью была решена одна из серьезных проблем традиционного механизма взаимодействия «бобов» — синхронность вызова методов. MDB позволяют обрабатывать сообщения в асинхронном режиме. Стоит отметить, что проблема асинхронного взаимодействия в той или иной форме возникает во всех структурах, основанных на компонентах, так что технологии MDB могут пригодиться не только в клиент-серверных системах.

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

Формирование контейнеров возлагается на сервер приложений. Взаимодействие клиента с серверным EJB-приложением в общем случае происходит так: клиент, который не обязательно должен быть Java-приложением, посылает запрос серверу, используя одну из технологий взаимодействия (CORBA, DCOM, RMI, Web-сервисы). Сервер управляет взаимодействием, основываясь на методах обработки транзакций J2EE, и передает данные компонентам приложения, выполняющимся в контейнере. Точно так же сервер берет на себя формирование ответа приложения. Таким образом, с одной стороны, клиентское приложение не обязательно должно быть приложением Java, достаточно того, чтобы оно поддерживало один из стандартных протоколов, с другой стороны, благодаря серверу компоненты EJB изолированы от деталей реализации взаимодействия. Компоненты, главная задача которых заключается в том, чтобы реализовать бизнес-логику приложения, логически изолированы не только от клиентских приложений, но и от нижележащих серверных систем, так как сервер инкапсулирует механизмы взаимодействия приложения с такими ресурсами, например, как базы данных.


Механизмы безопасности

Sun Java System AS поддерживает безопасные транзакции при использовании Web-страниц, протокола Authorization Contract for Containers (ACC), Web-сервисов и сервиса сообщений JMS


Механизм взаимодействия

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