Подтвердить что ты не робот

В чем разница между компонентами OSGi и сервисами

В разделе OSGi, каковы основные различия между компонентами и службами? Насколько я понимаю, все службы должны быть Компонентами, но не все Компоненты должны быть сервисами.

Каковы преимущества использования одного над другим с примерами использования примеров?

4b9b3361

Ответ 1

"Компоненты" менее формально определены, чем сервисы.

Служба - это любой объект, который зарегистрирован в реестре службы OSGi и может быть просмотрен с использованием его имени (интерфейсов) интерфейса. Единственным условием является то, что служба должна реализовывать некоторый интерфейс... любой интерфейс. Например, я мог зарегистрировать исполняемый объект в интерфейсе java.lang.Runnable, и клиенты могли искать его с помощью этого имени интерфейса.

"Компонент" имеет тенденцию быть объектом, управление жизненным циклом которого обычно осуществляется с помощью компонентной структуры, такой как декларативные службы (DS), Blueprint или iPOJO. См. эту страницу в Wiki сообщества OSGi для обсуждения различных доступных компонентов.

Компонент может иметь любую из следующих функций в комбинации или отдельно:

  • Компонент может быть запущен и остановлен; это будет считаться "активным" компонентом, хотя это также неофициальный термин. Компонент, который не нужно запускать или останавливать, называется пассивным.
  • Компонент может публиковать себя как службу OSGi.
  • Компонент может связываться с или использовать службы OSGi.

В общем, использование инфраструктуры компонентов - это самый простой способ работы с службами OSGi, поскольку инфраструктура будет управлять привязкой к сервисам, которые вы хотите использовать. Например, вы можете сказать, что ваш компонент "зависит от" конкретной службы, и в этом случае компонент будет создан и активизирован только тогда, когда эта услуга будет доступна, а также будет уничтожена, когда услуга станет недоступной.

Ответ 2

РЕДАКТИРОВАТЬ: см. ответ Нила Бартлетта, я ответил довольно конкретно на декларативные услуги, но он более тонкий, чем я указал здесь неправильно.

Вкратце: Компоненты являются потребителями услуг, а не провайдеров, Сервисы - это расширение Компонентов, регистрирующихся в качестве поставщиков услуг.

Компонент имеет жизненный цикл (деактивировать и модифицировать), управление зависимостями службы (un/bind).

Служба - это расширение компонента; через реестр услуг он предлагает услуги другим путям и т.д., публикуя реализованные интерфейсы и свойства.

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