пятница, 27 августа 2010 г.

Сервлеты и OSGi: разворачиваем бандлы на GlassFish v3


В ноябре 2008-го года тогда еще живая SUN Microsystems выпустила новую экспериментальную версию сервера приложений с открытым исходным кодом - GlassFish v3 Prelude. С тех пор вышло несколько стабильных версий данного сервера, последней из которых на сегодняшний день является 3.0.1. Отличительными чертами GlassFish v3 являются модульность и расширяемость, обеспечиваемые использованием технологии OSGi (в реализации Apache Felix). Соответственно, с одной стороны GlassFish v3 предоставляет сервлет-контейнер (как часть спецификации JavaEE 6.0), а с другой - OSGi-фреймворк (Apache Felix или Eclipse Equinox), что позволяет добавлять свои бандлы, в которых можно регистрировать сервлеты.

Подробно вопрос регистрации сервлетов с помощью сервиса HttpService рассматривался в предыдущих статьях серии, поэтому сейчас мы сконцентрируемся только на вопросах развертывания бандлов, содержащих сервлеты, на GlassFish v3.

Прежде всего, необходимо скачать модуль osgi-http-3.0-SNAPSHOT.jar, расположенный в репозитории Apache Felix. Именно данный бандл содержит реализацию сервиса HttpService для GlassFish v3. Скачанный файл нужно поместить в каталог $GlassFish_HOME/domains/domain1/autodeploy/bundles. Бандлы, расположенные в данном каталоге будут автоматически установлены в используемый OSGI-фреймворк и стартованы. Строго говоря, данный способ установки бандлов не является единственным, однако он наиболее простой.

После установки сервиса HttpService достаточно поместить экспортированный в JAR-архив бандл, в котором регистрируются сервлеты, в тот же каталог $GlassFish_HOME/domains/domain1/autodeploy/bundles. Если все прошло успешно, то при обращении в браузере по адресу http://localhost:8080/osgi/welcome (напомню, что в предыдущих статьях серии были рассмотрены примеры регистрации сервлетов по адресу /welcome) будет показана следующая страница:



Следует обратить внимание, что все сервлеты, регистрируемые из OSGi-бандлов, доступны по адресу http://адрес-сервера/osgi/путь-регистрации-сервлета.

Регистрация сервлетов с помощью декларативных сервисов имеет свои особенности. Прежде всего, в поставку GlassFish v3 входит реализация спецификации Declarative Services 1.0, а не 1.1, сервисы, соответствующие которой, создаются с помощью Eclipse PDE версии 3.5 и выше. Спецификация Declarative Services 1.1 является частью спецификации OSGi 4.2 и включает в себя ряд существенных расширений, например позволяет указывать методы, которые будут вызываться при активации/деактивации декларативного сервиса, обновлении его настроек и другие. Признаком используемой сервисом версии спецификации является указанное в его определении пространство имен XML. Пространство имен xmlns:scr="http://www.osgi.org/xmlns/scr/v1.0.0" соответствует версии 1.0, а xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" - версии 1.1, соответственно. Если пространство имен не указано, то считается, что сервис удовлетворяет спецификации 1.0.

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

  • Настроить запуск сервера на OSGi-фреймворке Equinox.

  • Установить Equinox DS, поместив в каталог $GlassFish_HOME/domains/domain1/autodeploy/bundles бандлы org.eclipse.equinox.ds, org.eclipse.equinox.util и org.eclipse.osgi.services. Взять данные бандлы можно, например, из поставки Eclipse Galileo/Helios.


После данных манипуляций сервисы, удовлетворяющие спецификации 1.1, будут регистрироваться с помощью Equinox DS, а сервисы, удовлетворяющие спецификации 1.0, - с помощью Felix SCR. Если это вносит путаницу, необходимо отключить, а лучше - удалить Felix SCR, удалив файл $GlassFish_HOME/modules/autostart/org.apache.felix.scr.jar, после чего все декларативные сервисы будут регистрироваться с помощью Equinox DS. Следует отметить, что стартовать Equinox DS на Apache Felix не получится, поэтому и необходимо настроить запуск сервера приложений на фреймворке Equinox.

Примером использования сервлетов, регистрируемых из OSGi-бандов с помощью сервиса HttpService, является Apache Felix Web Console, которая, несмотря на то, что является Apache Felix ..., работает и на Eclipse Equinox. Данное приложение позволяет управлять жизненным циклом фреймворка и бандлов, а так же получать подробную информацию по каждому модулю и выставленных им сервисах, в том числе и декларативных. В состав консоли включен и набор служебных компонентов, в частности - удобный shell, позволяющий управлять банлами и сервисами из командной строки, если это необходимо пользователю.



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

Понравилось сообщение - подпишитесь на блог или читайте меня в twitter

2 комментария:

smikesh комментирует...

а что мешает просто положить в веб апп папку мета инф с манифестом??? глассфиш 3 это прекрасно поддерживает...у них там много блог постов на эту тему есть :))

Pavel Samolisov комментирует...

Ничего не мешает, только веб-апп надо еще создать и развернуть, а так закинул бандл и радуйся.

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

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