В нескольких словах 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: