среда, 26 января 2011 г.

Введение в OSGi: Среда исполнения (Execution Environment)


Среда исполнения (Execution Environment) в мире OSGi - это символьное представление версии JRE, т.е. указание платформе с какой версией JRE совместимы классы, составляющие бандл.

Понятие "среда исполнения" становится необходимо, когда бандл разрабатывается на одной JRE, но предполагается, что использоваться он будет на другой JRE или, что более характерно, нескольких JRE. Возникновение данного понятия имеет глубокие исторические причины, т.к. OSGi изначально создавалась для использования во встроенных решениях, для которых имеется довольно широкое многообразие различных версий Java-платформы.

В общих чертах идея использования среды исполнения заключается в следующем: при разработке бандла указывается в каких версиях JRE предполагается его использовать, в зависимости от этого становятся доступными те или иные API. Во время исполнения же, если среда исполнения бандла не совместима со средой, в которой запущена платформа OSGi, он не будет загружаться.

В данной статье мы подробно рассмотрим следующие вопросы:
- Стандартные среды исполнения.
- Конфигурирование среды исполнения в Eclipse SDK.
- Настройка Eclipse PDE для верификации API, доступных в той или иной среде исполнения.
- Создание бадла и использование информации о среде исполнения при его разработке.
- Запуск бандлов в различных средах исполнения.

Стандартные среды исполнения


К стандартным средам исполнения, с которыми может взаимодействовать Eclipse SDK, относятся:

OSGi/Minimum-1.0 - Минимальная среда исполнения, необходимая для запуска OSGi (версия 1.0). Является подмножеством библиотеки классов J2ME Foundation 1.0, разработанным для базовой реализации OSGi.

OSGi/Minimum-1.1 - Минимальная среда исполнения, необходимая для запуска OSGi (версия 1.1). Является подмножеством библиотеки классов J2ME Foundation 1.1, разработанным для базовой реализации OSGi.

OSGi/Minimum-1.2 - Минимальная среда исполнения, необходимая для запуска OSGi (версия 1.2). Является подмножеством библиотеки классов J2ME Foundation, разработанным для базовой реализации OSGi.

CDC-1.0/Foundation 1.0 - Connected Device Configuration/J2ME Foundation 1.0, за исключением некоторых MicroEdition IO классов. Является подмножеством J2SE 1.3.

CDC-1.1/Foundation 1.1 - Connected Device Configuration/J2ME Foundation 1.1, за исключением некоторых MicroEdition IO классов, a так же классов для работы с регулярными выражениями. Является подмножеством J2SE 1.4.

JRE-1.1 - Java Runtime Environment 1.1.

J2SE-1.2 - Java Runtime Environment 1.2.

J2SE-1.3 - Java Runtime Environment 1.3.

J2SE-1.4 - Java Runtime Environment 1.4.

J2SE-1.5 - Java Runtime Environment 5 .

JavaSE-1.6 - Java Runtime Environment 6.

JavaSE-1.7 - Разрабатываемая в настоящее время Java Runtime Environment 7.

Конфигурирование среды исполнения в Eclipse SDK


При работе в интегрированной среде разработки Eclipse SDK необходимо настроить соответствие каждой используемой среде исполнения соответствующую этой среде JDK/JRE. По-умолчанию, Eclipse SDK выбирает для каждой ненастроенной среды исполнения JRE, используемую по-умолчанию в заданном рабочем пространстве. Такой выбор не всегда оптимален и корректен, например, для среды исполнения CDC-1.x/Foundation 1.x требуется JDK специфичная для JavaME.

Прежде чем настраивать соответствие JRE и среды исполнения, необходимо указать Eclipse'у где искать соответствующие Java-машины. Для этого следует перейти в настройки Window -> Preferences -> Java -> Installed JREs.



На данной странице можно выбрать JRE, используемую по-умолчанию, отметив ее галочкой, а так же добавить новую JRE или сразу описание среды исполнения, используя кнопку Add...:



Внимание! После добавления интересующей JRE перед непосредственно настройкой сред исполнения необходимо нажать кнопку OK на странице со списком JRE, иначе вновь добавленная JRE не будет доступна! Это можно считать небольшой ошибкой в работе Eclipse.

Непосредсвенно конфигурирование сред исполнения производится на странице Window -> Preferences -> Java -> Installed JREs -> Execution Environments. На данной странице представлен список всех доступных для Eclipse сред исполнения. Если выбрать определенную среду из списка, то в правой части окна появится список JRE, совместимых с данной средой. При этом JRE, идеально подходящая для среды исполнения, будет выделена полужирным шрифтом. Идеально подходящей считается, в частности, JRE, имеющая номер версии полностью совпадающий с версией среды исполнения. В нижней части окна будет выведено краткое описание выбранной среды исполнения.

Например,



Для среды исполнения J2SE-1.5 идеальной считается jdk1.5.0_22.



Для среды исполнения JavaSE-1.6 идеальными считаются HotSpot и JRockit от Oracle и J9 от IBM.



Совместимые же со средой исполнения JavaSE-1.7 JRE в системе автора отсутствуют.

Настройка Eclipse PDE для верификации API, доступных в той или иной среде исполнения


Как правило с ростом версии JRE добавляются новые API, недоступные при исполнении кода на предыдущих версиях JRE. При этом возможна ситуация, когда при разработке бандла используется более новая версия JRE, чем та, на которой предполагается его использование. Необходимо контролировать набор API, доступный при разработке такого бандла. Входящий в состав платформы Eclipse инструмент Eclipse Plugins Development Environment содержит механизмы такого контроля, однако, его необходимо предварительно настроить.

Настройка реакции PDE на несовместимые API производится на странице Window -> Preferences -> Plug-in Development -> API Errors/Warnings с помощью переключателя Invalid references to system libraries.



На данной странице расположен блок Supported Environments, который по-умолчанию пуст. Необходимо установить дескрипторы поддерживаемых сред исполнения, для чего перейти по ссылке install them now - откроется стандартное окно пользовательского интерфейса системы p2.



В данном окне необходимо указать репозиторий (рекомендуется Helios) и выбрать для установки компонент PDE/API Tools Environment Descriptions. Установленные дескрипторы отобразятся в блоке Supported Environments.



После сохранения изменений на странице API Errors/Warnings Eclipse PDE готов к работе с поддержкой ограничений сред исполнения.

Использование информации о среде исполнения при разработке бандлов


Для демонстрации работы Eclipse PDE необходимо создать бандл. Для создания бандлов служит мастер, доступный из меню New -> Project... -> Plug-in Development -> Plug-in Project. На первой странице бандла следует указать название проекта, расположение каталога с исходными кодами бандла, настройки проекта и целевой платформы, после чего перейти на вторую страницу мастера по кнопке Next. На данной странице необходимо выбрать среду исполнения и обязательно установить флажок Enable API Analisis, для того, чтобы при разработке бандла были доступны ограничения выбранной среды исполнения, настроенные ранее.



Если нажать на кнопку Environments..., то откроется рассмотренный ранее диалог настройки сред исполнения.



Среда исполнения указывается в манифесте бандла в качестве значения параметра Bundle-RequiredExecutionEnvironment:



Во вновь созданном бандле проставляются настройки Java-компилятора и системные библиотеки в зависимости от выбранной среды исполнения.





Теперь можно продемонстрировать работу PDE API-анализатора. Необходимо поменять настройки среды исполнения J2SE-1.5, указав в качестве JRE какую-либо из реализаций Java 6. Теперь, несмотря на то, что в качестве JRE используется Java 6, никакие новые API, появившиеся в Java 6, не будут доступны при компиляции бандла (важно отметить, что проверка API происходит только при компиляции). Например, будет недоступен для использования класс ConcurrentSkipListSet, несмотря на то, что в Java 6 данный класс присутствует.



Если при создании бандла не был установлен флажок Enable API Analisis, то добавить анализ API для такого бандла можно следующим образом: выбрать в контекстном меню бандла пункт PDE Tools -> API Tooling Setup....



В появившемся окне нужно выбрать бандлы, для которых требуется включить анализ API, после чего нажать Next или Finish.



Появится диалоговое окно, уведомляющее о том, что для бандла не установлен API baseline. Если требуется только добавить проверку API на соответствие ограничениям среды исполнения, данное окно следует проигнорировать.



Запуск бандлов в различных средах исполнения


Рассмотрим вопрос работы бандла в зависимости от среды исполнения. Основная логика проста: если бандл требует среду исполнения не совместимую с той, на которой запущена платформа OSGi, то он работать не будет.

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

Для OSGi-бандлов данные настройки задаются в Run As -> Run Configurations... -> OSGi Framework -> Settings блок Java Runtime Environment:



Для Eclipse RCP приложений данные настройки задаются в Run As -> Run Configurations... -> Eclipse Application -> Main блок Java Runtime Environment:



При создании бандла name.samolisov.demo была выбрана среда исполнения J2SE-1.5. Соответственно, если запустить данный бандл в среде не совместимой с данной, например, - в J2SE-1.4, то будет сгенерирована ошибка:

!ENTRY org.eclipse.osgi 2 0 2011-01-27 16:49:57.004
!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:
!SUBENTRY 1 org.eclipse.osgi 2 0 2011-01-27 16:49:57.004
!MESSAGE Bundle name.samolisov.demo_1.0.0.qualifier [15] was not resolved.
!SUBENTRY 2 name.samolisov.demo 2 0 2011-01-27 16:49:57.004
!MESSAGE Missing Constraint: Bundle-RequiredExecutionEnvironment: J2SE-1.5


Если же запустить бандл в среде отличной от требуемой, но совместимой с нею, например, в JavaSE-1.6, то бандл будет работать корректно:

osgi> ss

Framework is launched.

id State Bundle
0 ACTIVE org.eclipse.osgi_3.6.1.R36x_v20100806
15 ACTIVE name.samolisov.demo_1.0.0.qualifier


Ссылки


Приведенный в статье минимум достаточен для понимания концепции сред исполнения и механизмов их использования с помощью Eclipse PDE. Более подробную информацию можно получить из следующих источников:

- Execution Environments - статья в официальной Eclipse WiKi (Eng).
- PDE/Resources/Execution Environments - руководство по настройке дескрипторов сред исполнения в PDE (Eng).
- Execution Environment Descriptions - описание понятия "Дескриптор среды исполнения" (Eng).

Понравилось сообщение - подпишитесь на блог

Комментариев нет:

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!