Как лучше всего начать работу с OSGI?[закрыто]
Вопрос
Что делает модуль/сервис/часть функциональности приложения особенно хорошим кандидатом на роль модуля OSGi?
Я заинтересован в использовании ОСГи в моих приложениях.Мы — магазин Java, и мы довольно широко используем Spring, поэтому я склоняюсь к использованию Динамические модули Spring для сервисных платформ OSGi(tm).Я ищу хороший способ включить немного OSGi в приложение в качестве пробной версии.Кто-нибудь здесь использовал эту или подобную технологию OSGi?Есть ли подводные камни?
@Николас - Спасибо, я видел это.Это хороший учебник, но я больше ищу идеи о том, как создать свой первый «настоящий» пакет OSGi, а не пример Hello World.
@david - Спасибо за ссылку!В идеале, с новым приложением, я бы сделал все это динамичным.Однако сейчас я хочу представить это в небольшой части существующего приложения.Предполагая, что я могу выбрать любую часть приложения, какие факторы следует учитывать, чтобы сделать эту часть лучше или хуже в качестве подопытного кролика OSGi?
Решение
Что ж, поскольку вы не можете иметь одну часть OSGi и одну часть не-OSGi, вам нужно будет создать все приложение OSGi.В простейшей форме вы создаете один пакет OSGi из всего вашего приложения.Очевидно, что это не лучшая практика, но может быть полезно получить представление о развертывании пакета в контейнере OSGi (Equinox, Felix, Knoplerfish и т. д.).
Чтобы перейти на следующий уровень, вам нужно начать разбивать свое приложение на компоненты. Компоненты обычно должны иметь набор обязанностей, которые можно изолировать от остальной части вашего приложения с помощью набора интерфейсов и зависимостей классов.Их выявление вручную может варьироваться от довольно простого для хорошо спроектированного, связного, но слабосвязанного приложения до кошмара для взаимосвязанного исходного кода, с которым вы не знакомы.
Некоторую помощь могут оказать такие инструменты, как JDepend который может показать вам связь пакетов Java с другими пакетами/классами в вашей системе.Пакет с низкой эфферентной связью должно быть легче извлечь в пакет OSGi, чем пакет с высокой эфферентной связью.Еще больше архитектурного понимания можно получить с помощью профессиональных инструментов, таких как Структура 101.
Чисто на техническом уровне, ежедневно работая с приложением, состоящим из 160 пакетов OSGi, и используя Spring DM, я могу подтвердить, что переход от «обычного» Spring к Spring DM практически безболезненный.Дополнительное пространство имен и тот факт, что вы можете (и должны) изолировать конфигурацию Spring, специфичную для OSGi, в отдельных файлах, еще больше упрощает использование сценариев развертывания как с OSGi, так и без него.
OSGi — это глубокая и широкая компонентная модель, рекомендую документацию:
- Спецификация OSGi R4:Получите PDF-файлы спецификации ядра и компендиума, они каноничны, авторитетны и очень читабельны.Всегда имейте под рукой ярлык к ним, вы будете обращаться к ним.
- Прочтите о лучших практиках OSGi, есть большой набор вещей, которые вам нужны. может делай лишь несколько меньший набор вещей, которые ты должен делай, и есть кое-что, что тебе следует сделать никогда не делай (ДинамическийИмпорт:* например).
Некоторые ссылки:
- Лучшие практики OSGi и использование Apache Felix
- Питер Криенс и Би Джей Харгрейв на презентации Sun о лучших практиках OSGi
- Одной из ключевых концепций OSGi являются службы. Узнайте, почему и как они заменяют шаблон прослушивателя шаблоном Шаблон доски
Группа Google Spring DM по моему опыту очень отзывчивый и дружелюбный
Группа Google Spring DM является больше не активен и переехал на Eclipse.org как проект Gemini Blueprint, в котором есть форум здесь.
Другие советы
При изучении новой технологии богатый инструментарий поможет вам освоиться без большой головной боли.На данный момент сообщество в ops4j.org предоставляет богатый набор инструментов под названием «PAX», который включает в себя:
- Пакс Бегун:Легко запускайте и переключайтесь между Felix, Equinox, Knopflerfish и Concierge.
- Пакс Конструкт:Легко создавайте, организуйте и создавайте проекты OSGi с помощью maven.
- Пакс Дрон:Протестируйте свои пакеты OSGi с помощью Junit, будучи независимыми от платформы (использует PaxRunner).
Кроме того, существует множество реализаций компендиум-сервисов OSGi:
- Пакс (Ведение журнала),
- Пакс Веб (http-сервис),
- Веб-расширитель Пакс (военная поддержка),
- Пакс Монета (конфигурация),
- Пакс Шелл (реализация оболочки, часть следующего выпуска osgi)
- и многое другое.
..и есть полезное, независимое от фреймворка сообщество, но теперь это реклама ;-)
Этот ответ приходит почти через 3 года после того, как был задан вопрос, но связь Я только что нашел это действительно хорошо, особенно для начинающих использовать maven.Пошаговое объяснение.
Является ли ваше существующее приложение монолитным или разделенным на отдельные процессы/уровни?
При многоуровневом использовании вы можете преобразовать средний уровень/уровень приложений для запуска в контейнере OSGi.
По опыту моей команды, мы обнаружили, что попытки создавать веб-материалы в OSGi болезненны.Другими болевыми точками являются Hibernate и Jakarta Commons Logging.
Я считаю, что спецификации OSGi довольно читабельны, и я рекомендую вам распечатать блок-схему, показывающую алгоритм загрузки классов.Я гарантирую, что у вас возникнут вопросы: «Почему я получаю NoClassDefFoundError?»:блок-схема расскажет вам, почему.
Пытаться http://neilbartlett.name/blog/osgibook/.В книге приведены практические примеры лучших практик OSGi.
Пытаться http://njbartlett.name/files/osgibook_preview_20091217.pdf
ИЛИ
Вторую книгу я не читал сам, но слышал о ней хорошие отзывы.
Первое было для меня очень полезно.Сначала он знакомит вас с архитектурой, а затем переходит к OSGi.
Если вы начинаете работать с OSGi, следует учитывать несколько моментов.
Как уже упоминалось в другом месте этой темы, знание о загрузке классов действительно важно.По моему опыту, каждый рано или поздно сталкивается с этим.
Еще одна важная вещь, которую следует помнить:никогда не храните ссылки!Взгляните на шаблон доски, на котором построена концепция сервисов OSGi (см. ссылку в одном из других ответов).
По моему опыту, не следует пытаться преобразовать монолитное приложение в приложение на базе OSGi.Обычно это приводит к ужасному и неуправляемому беспорядку.Начать все заново.
Загрузите одну из свободно доступных автономных реализаций OSGi.Knopflerfish мне показался довольно хорошим и стабильным (я использую его во многих проектах).Он также поставляется с большим количеством исходного кода.Вы можете найти это здесь: http://www.knopflerfish.org
Еще один хороший урок можно найти здесь. https://pro40.abac.com/deanhiller/cgi-bin/moin.cgi/OsgiTutorial
Питер Криенс из OSGi Alliance дал хорошее интервью: http://www.infoq.com/interviews/osgi-peter-kriens.Его домашнюю страницу и блог (которые всегда приятно читать) можно найти здесь: http://www.aqute.biz
мне очень нравится Учебные пособия по Apache Felix.Однако я думаю, что в целом использование OSGi в вашем приложении не является решением типа «давайте использовать эту платформу, потому что это реклама».Это скорее вопрос дизайна, но все, что OSGi дает вам с точки зрения дизайна, вы можете получить и с помощью ванильной Java.
Что касается среды выполнения, вы не можете просто добавить существующее приложение и включить для него OSGi.Дизайн должен быть динамичным.Spring DM позволяет легко скрыть это от вас, но оно все еще существует, и вам нужно об этом знать.