Л. П. Василенко, А. С. Ремизов
Саратовский государственный университет им. Н. Г. Чернышевского, Саратов, Россия
Введение
При проектировании и разработке приложений часто возникает необходимость обеспечить модульность приложения. Модульность позволяет разбить приложение на компоненты-модули, каждый из которых реализует некоторую узкую часть функционала приложения. При этом, в случае удачно спроектированного приложения, сами модули дложны слабо зависеть друг от друга, то есть, не зависеть от деталей реализации других модулей, а взаимодействовать с ними посредством лишь простых интерфейсов. Модульная организация приложения, как правило, должна обеспечивать возможность заменять и обновлять отдельные модули, тем самым позволяя исправлять и улучшать программное обеспечение, затрагивая не всё приложение целиком, а только необходимые части.
Очередным важным требованием для приложений, а в особенности, для серверных приложений, является обеспечение продолжительной и непрерывной работы. Однако, нередки ситуации, когда приложение приходится завершать лишь для обновления или замены одного или нескольких модулей, например, после исправления найденных в них ошибок или других изменений. В этом случае приложение завершается, заменяются необходимые модули, после чего приложение запускается вновь. Часто такое прерывание работы приложения недопустимо или сопряжено с накладными расходами, вплоть до денежных убытков, из-за недоступности услуг приложения клиентам.
Вышеуказанные требования, а также и некоторые другие, призвана удовлетворить компонентная платформа OSGi при разработке приложений для среды Java.
Что такое OSGi?
OSGi (Open Services Gateway initiative) — компонентная платформа для Java [1]. Платформа OSGi оперирует модулями (bundle).
Каждый модуль в OSGi – это логически завершённый программный компонент, реализующий некоторую часть функционала приложения. Платформа OSGi позволяет управлять модулями, предоставляя им такие возможности и механизмы:
-
Добавление модулей в систему. Добавить модуль можно как на этапе сборки приложения, так и во время работы приложения.
-
Разрешение зависимостей модулей с учётом их версий. В среде OSGi каждый модуль имеет свой номер версии, благодаря чему другие модули могут заявлять зависимость от конкретной версии модуля или от некоторого диапазона версий. Следует подчеркнуть, что в системе одновременно могут работать несколько версий одного модуля.
-
Запуск и останов модулей. Модули, добавленные в систему, могут быть запущены и остановлены без перезапуска всей системы. Сервисы, предоставляемые запущенным модулем, доступны другим модулям. При запуске и останове модулей платформа OSGi отслеживает зависимости модулей друг от друга и от сервисов, предоставляемых модулями. В случае останова модуля, предоставляющего некоторый сервис, зависимые от него модули также будут остановлены, или, если другой запущенный модуль предоставляет аналогичный сервис, зависимые модули получат другой экземпляр сервиса из запущенного модуля.
-
Механизм управления пользователями (User Admin Service) предоставляет интерфейсы для аутентификации и авторизации пользователей в приложении, а также обеспечивает возможность создания пользователей, ролей, групп пользователей. Модули OSGi, поддерживающие авторизацию пользователей через User Admin Service, проверяют наличие у пользователя прав на выполнение тех или иных действий.
-
Сервис протоколирования событий в приложении (Log Service) позволяет модулям сообщать о внутренних событиях в общем журнале приложения.
-
Централизованный механизм конфигурирования модулей (Configuration Admin Service) позволяет гибко настраивать приложение, создавая и конфигурируя необходимые экземпляры сервисов, предоставляемых модулями.
-
Сервис хранения свойств модулей (Preferences Service). Модули имеют возможность сохранять внутренние параметры в постоянном хранилище, предоставляемом платформой OSGi. Данные, сохраненные таким образом, будут доступны и после перезапуска всего приложения.
-
С минимумом затрат модуль может обрабатывать веб-запросы, воспользовавшись сервисом HTTP (HTTP Service). Данный севрис даёт возможность любому модулю зарегистрироваться в качестве обработчика HTTP-запросов. HTTP Service представляет собой веб-сервер, вызывающий зарегистрированные OSGi модули в соответствии с полученным запросом.
Кроме вышеперечисленных, существует множество других стандартных сервисов, вместе составляющие набор сервисов OSGi (OSGi Service Compendium).
Благодаря открытости платформы OSGi, создание модулей, предоставляющих приложению всевозможные сервисы, является простой задачей. Поэтому, помимо сервисов, описанных в спецификации платформы OSGi, доступны различные сторонние модули, реализующие необходимый функционал.
Модуль (в терминологии OSGi – bundle) представляет собой обычный для среды Java Jar-архив. В описании Jar-архива модуля кроме стандартного описания архива должна присутствовать информация, идентифицирующая модуль и его версию, а также сообщающая платформе OSGi о внутренней организации модуля и зависимостях модуля от других компонентов приложения. Также в описании Jar-архива может содержаться информация о сервисах, которые модуль предоставляет другим модулям.
Описание (или метаданные) Jar-архива с информацией, относящейся к OSGi, находятся в стандартном файле манифеста архива, META-INF/MANIFEST.MF [2]. Платформа OSGi обращается к полям манифеста, конфигурируя модуль и устанавливая его связи с другими модулями и сервисами.
Реализации платформы OSGi
Спецификация платформы OSGi описывает интерфейсы и поведение стандартных сервисов, предоставляемых платформой. Реализаций этой спецификации существует несколько:
-
Equinox [3]. Активно разрабатывается, поскольку лежит в основе популярной среды разработки Eclipse IDE. Эта реализация является одной из наиболее полных, поскольку содержит все необходимые и большинство необязательных сервисов из спецификации платформы OSGi.
-
Apache Felix [4]. Компактная реализация, проста в использовании. Предоставляет веб интерфейс для управления и просмотра состояния платформы через браузер.
-
Knopflerfish [5]. В комплекте присутствует графическая консоль для управления модулями.
-
Concierge OSGi [6]. Реализация платформы OSGi версии 3 (текущая версия спецификации — 4.3). Эта реализация предназначена для работы в условиях ограниченных ресурсов: например, в мобильных и встраиваемых устройствах.
Каждая из реализаций соответствует спецификации платформы OSGi, поэтому модули могут работать в любой из них.
Сервисы OSGi обычно выполнены в виде модулей, входящих в комплект реализации платформы. Такие модули в ряде случаев можно запускать и в других реализациях: например, веб-консоль Apache Felix можно добавить в Equinox.
Разработка приложений для платформы OSGi
На текущий момент, наиболее приспособленной средой для разработки приложений на основе платформы OSGi является Eclipse IDE. Эта среда разработки позволяет с удобством создавать модули OSGi, настраивать среду выполнения модулей, проводить отладку приложения. Для удобства разработчика Eclipse IDE предоставляет визуальный редактор манифеста OSGi модуля.
Для создания проекта модуля OSGi в Eclipse следует воспользоваться пунктом меню: File – New – Project... - Plug-in Project.
Примечательно то, что в основе самой среды разработки Eclipse IDE лежит платформа OSGi (Equinox). В частности, этим обусловлена хорошая интеграция инструментов для разработки OSGi-приложений в среду разработки.
Spring Framework – популярный фреймворк для разработки приложений на Java. Spring Framework является удобным каркасом для использования как в приложениях масштаба предприятия, так и в маленьких настольных приложениях. В основе Spring Framework лежит так называемый контейнер IoC (Inversion of Control). Принцип IoC в объектно-ориентированном программировании заключается в том, что программные компоненты связываются между собой во время выполнения, а не на этапе компиляции программы.
Компоненты в удачно спроектированной программе взаимодействуют посредством простых интерфейсов, что означает слабую связанность компонентов друг с другом. Компоненты не зависят от деталей реализации друг друга, что позволяет легко заменять один компонент другим, при условии, что новый компонент реализует все необходимые интерфейсы для взаимодействия с ним. При такой организации компонентам не обязательно быть жёстко связанными на этапе написания программного кода приложения. Вместо этого, IoC контейнер уже во время выполнения приложения может связать компоненты друг с другом, предоставляя необходимые сервисы компонентам, которые в них нуждаются.
Задачи платформы OSGi похожи на задачи Spring IoC: обеспечить компонентам необходимые им сервисы из тех, что доступны в текущий момент.
Spring Dynamic Modules [7] (Spring DM) – это интеграция платформы OSGi и Spring Framework. Spring DM позволяет модулю экспортировать и импортировать сервисы платформы OSGi, скрывая детали взаимодействия с OSGi от программного кода модуля. В результате модуль получает возможности Spring Framework, такие, как инъекция зависимостей и обработка аннотаций Java для связывания объектов, причём связывание возможно с объектами и сервисами, реализованными в других модулях.
Все действия для экспорта и импорта необходимых сервисов в среде OSGi выполняет Spring DM, принимая во внимание возможность запуска и завершения сервисов в любой момент во время работы приложения, и изолируя программный код модуля от сложностей, сопряжённых с обработкой этих событий.
Настройка экспортируемых и импортируемых сервисов осуществляется в XML-файлах, задающих конфигурацию контекста приложения Spring Framework.
Заключение
Платформа OSGi представляет собой мощную основу для большого круга приложений. Поддержка OSGi в средствах разработки, наличие интеграции с популярными программными продуктами, такими, как Spring Framework, а также успешные примеры приложений, построенных на этой платформе, делают платформу OSGi ещё более привлекательной для разработчика.
СПИСОК ЛИТЕРАТУРЫ
-
OSGi Alliance Specifications [Электронный ресурс]. URL: http://www.osgi.org/Specifications/HomePage (дата обращения: 10.05.2012).
-
Jar Manifest [Электронный ресурс]. URL: http://docs.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#JAR%20Manifest (дата обращения: 10.05.2012).
-
Equinox [Электронный ресурс]. URL: http://www.eclipse.org/equinox/ (дата обращения: 10.05.2012).
-
Apache Felix [Электронный ресурс]. URL: http://felix.apache.org/site/index.html (дата обращения: 10.05.2012).
-
Knopflerfish OSGi – open source OSGi service platform [Электронный ресурс]. URL: http://www.knopflerfish.org/index.html (дата обращения: 10.05.2012).
-
Concierge OSGi - An optimized OSGi R3 implementation for mobile and embedded systems[Электронный ресурс]. URL: http://concierge.sourceforge.net/userguide.html (дата обращения: 10.05.2012).
-
Spring Dynamic Modules [Электронный ресурс]. URL: http://www.springsource.org/osgi (дата обращения: 10.05.2012).
Достарыңызбен бөлісу: |