В чем разница между архитектурой OSGI и мультимодульным проектом Maven? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь понять OSGI, согласно определению:

Технология OSGi - это набор спецификаций, которые определяют динамический Компонентная система для Java. Эти спецификации позволяют разработку модель, в которой приложение состоит из нескольких компонентов, которые упакованы в пачки. Компоненты общаются локально и через сеть через сервисы.

Но я запутался здесь, поскольку такое же динамическое создание модуля можно сделать и с помощью многомодульной структуры проекта Maven. Поэтому мой вопрос заключается в том, чем архитектура OSGI отличается от многомодульных проектов Maven.

1 Ответ

0 голосов
/ 18 ноября 2018

Основное различие между maven и OSGi заключается в том, как модули зависят друг от друга.

В maven модуль зависит от списка других maven модулей. Это простая модель, но часто приводит к проблемам в переходных зависимостях. Если один и тот же модуль появляется в дереве зависимостей с разными версиями, maven просто выбирает самую высокую версию. Это хорошее предположение, но не всегда работает. Другой типичный случай - два модуля с одинаковыми пакетами, но разными именами (разделенные пакеты).

В OSGi зависимости выражаются в виде требований и возможностей. Решатель OSGi затем используется во время сборки вашего приложения, чтобы найти замыкание над пакетами-кандидатами (хранилищем), которые удовлетворяют ряду начальных требований. Чаще всего эти начальные настройки являются вашими пользовательскими пакетами высшего уровня. Затем распознаватель определяет замыкание над пакетами, которое решает требования. Таким образом, очевидным преимуществом является то, что при использовании распознавателя у вас есть высокая уверенность в том, что набор используемых вами пакетов действительно будет работать. В простой Java вы просто запускаете несколько банок и надеетесь на лучшее.

Наиболее распространенным требованием является наличие пакета в диапазоне версий. Другой пакет может предложить пакет в подходящей версии. Затем он становится кандидатом в резольвер.

К счастью, во время сборки легко создать связки из сборок maven. Вы используете bnd-maven-plugin или maven-bundle-plugin. Обычно он сам определяет требования и возможности.

В OSGi вы всегда пытаетесь разрабатывать против API (API-jar) вместо jar-ов времени выполнения. Это делает ваш код более свободно связанным.

Во время сборки в OSGi вам необходимо предоставить набор пакетов для формирования репозитория для работы с распознавателем. Это часто делается с помощью пом. Так что на самом деле это не слишком отличается от простого Maven. Основное отличие состоит в том, что распознаватель дает вам валидированный минимальный набор пакетов для запуска, в то время как типичная сборка mavne просто дает вам набор jar-файлов, которые представляют все переходные зависимости.

В качестве примера см. Пример new enroute microservice . В нем показано, как создавать отдельные пакеты и как собирать их в работающее приложение. См. Также учебник для примера .

...