Liferay и OSGi

Медленно, но верно продолжается интеграция Liferay и OSGi. Увидеть первые результаты можно будет уже в версии Liferay 6.2.0. А пока посмотреть и попробовать OSGi, встроенный в Liferay, можно в LR 6.2.0-M4 или собрав портал из ветки trunk версии 6.2.0.

Причины и необходимость интеграции

Основной разработчик этого направления Ray Auge, он же периодиески публикует в своем блоге достаточно подробные и интересные статьи о ходе разработки, а также рассказывает почему решено было начать работы в этом направлении.

Чтобы ответить на вопрос "Для чего потребовалось это объединение?", нужно вспомнить, что это за OSGi и зачем было придумано. Если говорить вкратце, то OSGi – это набор спецификаций, которые помогают упростить сложные, неповоротливые системы за счет создания модульной архитектуры.

А теперь, если подумать о Liferay с его собственной системой плагинов (портлетов, тем и пр.), о том, как быстро и разнонаправлено он развивается, то становится понятно, что управлять всей этой системой с каждым следующим этапом развития все сложнее.

Здесь-то и может выручить модульность, которую предлагает OSGi. Только представьте насколько проще и быстрее стала бы разработка и поддержка Liferay:

  • простая и быстрая установка исправлений ошибок и уязвимостей системы (скажем "Нет" четырехлетним багам);

  • регулярное и необременительное добавление новой функциональности и обновлений;

  • меньшее количество ошибок в важных модулях, потому что основные модули всегда находятся в фокусе;

  • и многое другое.

Поэтому мы с интересом следим за тем, как идет интеграция и ждем-не дождемся выхода версии 6.2.0. Присоединяйтесь к нам!

Что уже реализовано

В одной из своих статей Рэй рассказал и том, как идет разработка. На данном этапе уже сделано следующее:

  • В качестве реализации OSGi используется Eclipse Equinox (начиная с версии 3.7). Дополнительно был протестирован Knopflerfish 3.2.0 – полет нормальный; есть уверенность, что Felix от Apache тоже приживется.

  • Сервисы и компоненты (beans) портального Spring-контекста переделаны и зарегистрированы в регистре сервисов OSGi, чтобы их могли использовать другие OSGi-модули (bundles).

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

  • Установлен AutoDeployListener класс. Он проверяет все JAR- и WAR-файлы, которые попадают в deploy-директорию портала, и, если распознает в них OSGi-модули, автоматически устанавливает их в OSGi-контейнер и пытается запустить.

  • Успешно протестированы различные сценарии изменения кода, например, такие как замещение реализаций сервисных и Util-классов.

  • Установлена и успешно используется последняя версия Gemini Blueprint (реализация OSGi Alliance Blueprint Service, которую еще называют Spring для OSGi).

  • В портал добавлена библиотека BND (упрощает создание OSGi-модулей, в частности работу с MANIFEST-файлами).

В планах на реализацию:

  • В Plugins SDK добавить возможность автоматически создавать плагины как OSGi-модули.

  • Добавить поддержку различных типов портальных плагинов, созданных как OSGi-модули.

  • Изменить в Liferay механизм хранения, чтобы он поддерживал OSGi-модули, а также автоматически отслеживал обновления, распознавал и загружал зависимости.

OSGi Admin Portlet. Список доступных модулей.

OSGi Admin Portlet. Просмотр информации о конкретном модуле.