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

Имам едно съмнение в разбирането на термина компонент и услуга в OSGI. Използвам рамка Apache felix. Прочетох в тази връзка http://wiki.osgi.org/wiki/Declarative_Services#Providing_Services че компонентите предоставят услуга. Но не разбрах, че когато компонентът предоставя услуга, какво прави интерфейсът? Според мен интерфейсът е услуга, която се изпълнява от компонента.

Още едно съмнение е, че ако друг пакет иска да използва услугата на другия пакет, отколкото как се прави това? Той използва интерфейс (услуга) или компонент (клас на изпълнение).

Моля, разсейте съмненията ми, за да мога да усетя по-добре двата термина услуга и компонент и връзката им със scr нотация.


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


Отговори (1)


Прав си, че имената на нещата понякога са малко неясни, има и някои малки разлики в именуването между Феликс и Равноденствие.

В декларативни услуги:

Услуга в OSGi е обект, регистриран в регистъра на услугата. Може да бъде компонент, но може да бъде всеки обект, който искате.

Компонентът е конкретен екземпляр на обект, управляван от контейнера за декларативна услуга. Трябва да предоставите клас за изпълнение, който контейнерът може да използва, за да инстанцира класа.

Понякога това е всичко, от което се нуждаете: Ако всичките му препратки са налице, този обект ще бъде инстанциран и методите за активиране/дезактивиране ще бъдат извикани, когато е приложимо.

Ако също искате да го регистрирате като OSGi услуга, така че други компоненти да могат да го използват, трябва да:

  1. Внедрете интерфейса на услугата, която искате да предоставите
  2. Посочете, че искате да го регистрирате като услуга с този интерфейс

Ако наистина искате можете да регистрирате класа за внедряване като предоставена услуга, но използването на интерфейс е по-добро разделяне.

За да използвате друга услуга в компонент, трябва да я препратите. В уикито на OSGi споменавате, че този раздел изглежда липсва. Този блог го обяснява доста добре.

поздрави, Франк

person Frank Lee    schedule 01.04.2013