Как лучше всего начать работу с OSGI?[закрыто]

StackOverflow https://stackoverflow.com/questions/16140

  •  08-06-2019
  •  | 
  •  

Вопрос

Что делает модуль/сервис/часть функциональности приложения особенно хорошим кандидатом на роль модуля 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, есть большой набор вещей, которые вам нужны. может делай лишь несколько меньший набор вещей, которые ты должен делай, и есть кое-что, что тебе следует сделать никогда не делай (ДинамическийИмпорт:* например).

Некоторые ссылки:

Другие советы

При изучении новой технологии богатый инструментарий поможет вам освоиться без большой головной боли.На данный момент сообщество в 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

ИЛИ

http://www.manning.com/hall/

Вторую книгу я не читал сам, но слышал о ней хорошие отзывы.

Первое было для меня очень полезно.Сначала он знакомит вас с архитектурой, а затем переходит к 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 позволяет легко скрыть это от вас, но оно все еще существует, и вам нужно об этом знать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top