Сведения о вопросе

rjevskii

22:19, 18th August, 2020

Теги

java   spring   osgi    

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

Просмотров: 428   Ответов: 8

Что делает module/service/bit функциональности приложения особенно хорошим кандидатом для модуля OSGi?

Я заинтересован в использовании OSGi в своих приложениях. Мы являемся магазином Java и довольно широко используем Spring, поэтому я склоняюсь к использованию динамических модулей Spring для платформ обслуживания OSGi(tm). Я ищу хороший способ включить немного OSGi в приложение в качестве пробной версии. Кто-нибудь здесь использовал эту или подобную технологию OSGi? Есть ли какие-то подводные камни?

@Nicolas-Спасибо, я это уже видел. Это хороший учебник, но я больше ищу идеи о том, как сделать мой первый "real" OSGi bundle, в отличие от примера Hello World.

@david-Спасибо за ссылку! В идеале, с приложением greenfield, я бы спроектировал все это, чтобы быть динамичным. Однако прямо сейчас я ищу, чтобы ввести его в небольшой фрагмент существующего приложения. Предполагая, что я могу выбрать любую часть приложения, какие факторы следует учитывать, чтобы сделать эту часть лучше или хуже в качестве OSGi морской свинки?



  Сведения об ответе

prince

00:26, 25th August, 2020

Ну, так как вы не можете иметь одну часть OSGi и одну часть не-OSGi, вам нужно будет сделать все ваше приложение OSGi. В самой простой форме вы делаете один OSGi bundle из всего вашего приложения. Очевидно, что это не лучшая практика, но она может быть полезна, чтобы получить представление о развертывании bundle в контейнере OSGi (Equinox, Felix, Knoplerfish и т. д.).

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

Некоторая помощь может прийти от таких инструментов, как JDepend , которые могут показать вам связь пакетов Java с другими пакетами/классами в вашей системе. Пакет с низкой эфферентной связью должен быть легче извлечь в OSGi bundle, чем пакет с высокой эфферентной связью. Еще более глубокое понимание архитектуры можно получить с помощью профессиональных инструментов, таких как Structure 101 .

Чисто на техническом уровне, работая ежедневно с приложением, которое состоит из 160 OSGi пакетов и используя Spring DM, я могу подтвердить, что переход от "normal" Spring к Spring DM в значительной степени безболезнен. Дополнительное пространство имен и тот факт, что вы можете (и должны) изолировать вашу OSGi-специфическую Spring конфигурацию в отдельных файлах, делает ее еще проще иметь как с OSGi deployment сценариями, так и без них.

OSGi-это глубокая и широкая компонентная модель, документация, которую я рекомендую:

  • Спецификация OSGi R4: получите PDFs спецификации ядра и компендиума, они каноничны, авторитетны и очень удобочитаемы. Имейте ярлык к ним под рукой в любое время, вы будете консультироваться с ними.
  • Прочитайте о OSGi лучших практиках, есть большой набор вещей, которые вы можете сделать, но несколько меньший набор вещей, которые вы должны сделать, и есть некоторые вещи, которые вы никогда не должны делать (DynamicImport: * например).

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


  Сведения об ответе

prince

09:01, 11th August, 2020

Когда вы изучаете новую технологию, богатый инструментарий позволяет вам заниматься вещами без больших головных болей. На данный момент сообщество в ops4j.org предоставляет богатый набор инструментов под названием "PAX", который включает в себя:

  • Pax Runner: бегите и легко переключайтесь между Felix, Equinox, Knopflerfish и Concierge
  • Pax Construct : построить, организовать & построить OSGi проектов с maven легко
  • Pax Drone: протестируйте свои пакеты OSGi с Junit, будучи независимым от фреймворка (использует PaxRunner)

Тогда есть много реализаций сервисов OSGi compendium:

  • Лесозаготовки Пакс (лесозаготовки ),
  • Pax Web (http сервис),
  • Веб-Пакс расширитель (военная поддержка),
  • Pax Coin (конфигурация),
  • Pax Shell (shell реализация, часть следующего выпуска osgi)
  • и многое другое. ..

а еще есть полезное, рамочное независимое сообщество, - но это сейчас реклама ;-)


  Сведения об ответе

PROGA

01:26, 25th August, 2020

Этот ответ приходит почти через 3 года после того, как был задан вопрос , но ссылка , которую я только что нашел, действительно хороша, особенно для начинающих, использующих maven. A step-by-step объяснение.


  Сведения об ответе

repe

17:33, 1st August, 2020

Ваше существующее приложение монолитного или многоуровневой в отдельных processes/layers?

Если они многоуровневые, то можно преобразовать middle/app-tier для запуска в контейнере OSGi.

По опыту моей команды, мы обнаружили, что попытки делать веб-вещи в OSGi болезненны. Другими болевыми точками являются Hibernate и Jakarta Commons Logging.

Я нахожу спецификации OSGi довольно удобочитаемыми, и я рекомендую вам распечатать блок-схему, которая показывает алгоритм загрузки класса. Я гарантирую, что у вас будут моменты: "почему я получаю NoClassDefFoundError?": блок-схема скажет вам, почему.


  Сведения об ответе

SKY

06:02, 26th August, 2020

Попробуйте http://neilbartlett.name/blog/osgibook/ . В книге есть практические примеры с OSGi лучшими практиками.


  Сведения об ответе

VCe znayu

02:30, 16th August, 2020

Попробуйте http://njbartlett.name/files/osgibook_preview_20091217.pdf

OR

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

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

Первое было очень полезно для меня. Сначала он проводит вас по архитектуре, а затем это руки на OSGi.


  Сведения об ответе

lesha

13:09, 29th August, 2020

Есть пара мыслей, которые нужно иметь в виду, если вы начинаете с OSGi.

Как уже упоминалось в другом месте этой темы, знание о загрузке классов действительно важно. По моему опыту, каждый человек рано или поздно сталкивается с проблемами, связанными с этим.

Еще одна важная вещь, которую нужно помнить: никогда не держите ссылки! Взгляните на шаблон доски, на котором построена концепция сервисов OSGi (см. ссылку в одном из других ответов).

По моему опыту, вам не следует пытаться преобразовать монолитное приложение в приложение на основе OSGi. Это обычно приводит к плохому и неуправляемому беспорядку. Начать заново.

Загрузите одну из свободно доступных автономных реализаций OSGi. Я нашел Knopflerfish довольно хорошим и стабильным (я использую его во многих проектах). Он также поставляется с большим количеством исходного кода. Вы можете найти его здесь: http://www.knopflerfish.org

Еще один хороший учебник можно найти здесь. https://pro40.abac.com/deanhiller/cgi-bin/moin.cgi/OsgiTutorial

Питер Криенс из Альянса OSGi дал хорошее интервью: http://www.infoq.com/interviews/osgi-peter-kriens . Его домашнюю страницу и блог (который всегда хорошо читается можно найти здесь: http://www.aqute.biz


  Сведения об ответе

davran

09:21, 4th August, 2020

Мне очень нравятся обучающие программы Apache Felix . Однако я думаю, что в целом использование OSGi в вашем приложении не является одним из тех "let's use this framework, because it's hype" решений. Это скорее вопрос дизайна, но тогда все, что дает вам OSGi с точки зрения дизайна, вы можете иметь и с vanilla Java.

Что касается среды выполнения, вы не можете просто добавить существующее приложение и сделать его OSGi включенным. Это должен быть дизайн, чтобы быть динамичным. Spring DM позволяет легко скрыть это от вас, но это все еще есть, и вам нужно знать об этом.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться