Компонент предоставляет услугу

У меня есть одно сомнение в понимании термина компонент и служба в OSGI. Я использую фреймворк apache felix. Я прочитал по этой ссылке http://wiki.osgi.org/wiki/Declarative_Services#Providing_Services, что компоненты предоставляют услугу. Но я не понял, что когда компонент предоставляет услугу, чем интерфейс? На мой взгляд, интерфейс — это сервис, который реализуется компонентом.

Еще одно сомнение заключается в том, что если другой пакет хочет использовать услуги другого пакета, чем это делается? Он использует интерфейс (сервис) или компонент (класс реализации).

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


person user2091202    schedule 01.04.2013    source источник


Ответы (1)


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

В декларативных службах:

Служба в OSGi — это объект, зарегистрированный в реестре служб. Это может быть компонент, но это может быть любой объект, который вам нравится.

Компонент – это конкретный экземпляр объекта, управляемый контейнером декларативной службы. Вам необходимо предоставить класс реализации, который контейнер может использовать для создания экземпляра класса.

Иногда это все, что вам нужно: если все его ссылки присутствуют, этот объект будет создан, и методы активации/деактивации будут вызваны, когда это применимо.

Если вы также хотите зарегистрировать его как службу OSGi, чтобы другие компоненты могли его использовать, вам необходимо:

  1. Реализуйте интерфейс услуги, которую вы хотите предоставить
  2. Укажите, что вы хотите зарегистрировать его как службу с этим интерфейсом.

Если вы действительно хотите, вы можете зарегистрировать класс реализации как предоставляемую услугу, но лучше использовать интерфейс.

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

С уважением, Фрэнк

person Frank Lee    schedule 01.04.2013