используя OSGI для разработки приложения - PullRequest
12 голосов
/ 07 февраля 2011

Я занимаюсь разработкой семантического поискового приложения в Java. Чтобы сделать приложение модульным, я подумал использовать архитектуру OSGI. Но так как я новичок в osgi, я понятия не имею о плюсах и минусах его использования. Может кто-нибудь объяснить, пожалуйста, преимущества / недостатки использования OSGI и какое приложение получит выгоду от использования OSGI / что приложение получит от этого ??

Спасибо !!

Ответы [ 5 ]

24 голосов
/ 08 февраля 2011

В нескольких словах OSGi - это стандарт, используемый для создания модульных приложений. Это добавляет новый уровень модульности - связки (также известные как компоненты, модули). Каждый пакет содержит классы и интерфейсы, и что самое важное, он должен явно указать:

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

С технической точки зрения пакеты - это jar-файлы с немного расширенным META-INF/MANIFEST.MF файлом. Вся вышеупомянутая информация хранится в файле MANIFEST.MF.

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

OSGi - это не только стандарт построения только модульных приложений. Он также определяет среду, в которой существуют и запускаются пакеты. Это то, что вы должны знать - при использовании OSGi вы должны запускать свое приложение в специальной среде. Эта среда (например, Eclipse Equinox ) отвечает за запуск вашего приложения. Это предоставляет некоторые необычные возможности. Например, вы можете добавить пакет к уже запущенному приложению без необходимости останавливать это приложение - это может быть действительно важным элементом в некоторых типах приложений (но ИМХО не так много приложений, которым это действительно нужно).

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

OSGi довольно сложен, и его и его возможности сложно описать в нескольких словах. То, что я написал, это только самые важные (IMO) элементы OSGi. Но OSGI гораздо больше, например Пакеты могут отправлять события друг другу, они могут предоставлять услуги друг другу. Если вы заинтересованы в более подробной информации, я предлагаю пройти учебник. Я могу порекомендовать этот в Java World . После этого вы можете взглянуть на эту бесплатную электронную книгу об OSGi (в ней много деталей). Все подробности об OSGi можно найти в официальных спецификациях, но я бы не сказал, что их легко прочитать (по крайней мере, в начале) - вы можете найти их здесь (перед загрузкой вам придется принять лицензия и некоторые юридические уведомления).

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

Некоторые связанные вопросы SO:

4 голосов
/ 22 мая 2015

Мой личный (2 года) опыт работы с OSGI заключается в том, что технический счет перевешивает функциональные преимущества на порядки.

Я сталкивался со случаями, когда вам пришлось бы создавать / редактировать более 25 файлов pom для реализации макета с одним вкладышем!
Дизайн играет большую роль, но меня беспокоит то, что разработчики становятся экспертами в таких темах (как maven), которые не влияют на ценность для клиентов.
Кроме того, этот подход плохо справляется с Agile. На самом деле, это было бы отлично подходит для ... Водопад
Это все о вашем основном фокусе ИМХО. Результаты по сравнению со схемами строительства.

Короче говоря, OSGI - не зло, но не совсем подходит для небольших команд и быстрого выхода на рынок .

2 голосов
/ 20 января 2014

Мое личное мнение таково, что OSGi приносит больше боли, чем пользы.Если вам действительно нужно подключаемое приложение, вы можете начать использовать OSGi, но вам нужно написать код подключаемым способом, что непросто (даже при установке подключаемого модуля в eclipse рекомендуется перезапустить eclipse,понятия не имею, почему он использует OSGi)

Я разработал два проекта на работе с использованием OSGi, в начале проекта это очень медленно, потому что вам нужно обернуть много публичных библиотек, и не все из них можноwrap, потому что вы можете столкнуться с ClassNotDefoundError во время выполнения из-за проблем загрузчика классов при работе с прокси-объектами.

Вся модульность, которая есть у нас в проектах, использующих OSGi, может быть достигнута с помощью просто maven. При работе с OSGi никто не заставляет вас писать много мелкозернистых пакетов, если вы хотите, чтобы вы могли написать дырочное приложение водна большая связка

Если мы говорим о потере связи между компонентами, это может быть достигнуто с помощью автоматической разводки из среды внедрения зависимостей spring-core или google-guice.

1 голос
/ 07 февраля 2011

Вам нужно написать книгу, чтобы правильно ответить на этот вопрос. Действительно, много книг было написано на эту тему. Если вы действительно хотите узнать об OSGi, я рекомендую поискать такую ​​книгу.

OSGi - это модульная структура Java. У этого нет никакого вероятного соревнования в этой области. Любое приложение может выиграть от большей модульности, но модульность не бесплатна Проще все бросить в один гигантский загрузчик классов и не слишком задумываться о взаимоотношениях ваших компонентов. Если вы решите попробовать OSGi, отличный инструмент PDE, входящий в Eclipse, поддерживает разработку OSGi, не предназначенную для Eclipse, и значительно упрощает работу с OSGi.

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

OSGI больно, мягко говоря. например Maven-bundle-plugin, который создает пакет, не создает правильный пакет все время с точки зрения импорта, экспорта и т. Д. Необходимость ручной работы с определениями этого пакета была бы еще более утомительной. После того, как вы развернете пакет (скажем, в Karaf), он покажет другой список ошибок зависимостей, которые необходимо будет устранить (возможно, один раз за другим)

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