UvodDoKomponent: ParkovisteDS |
from Wiki KIVu |
Implementace v DS vychází z ParkovisteOsgi. Odstranili jsme ale Activatory a přidali jsme komponentové definiční soubory. Proto zde budou informace pouze k těmto definičnímsouborům. O eventách si přečtěte v ParkovisteOsgi.
V každém bundlu se samozřejmě vytvoří jedna komponenta, která se pak musí zaregistrovat podobně jako Konfigurace.
<service> <provide interface="cz.zcu.kiv.cosi.parkoviste.konfigurace.IKonfigurace"/> </service>
Každá služba se pak samozřejmě musí získat přes referenci, aby se mohla použít a nabindovat do vytvářené komponenty. Podobně jako Konfigurace.
<reference bind="setKapacita" cardinality="1..1" interface="cz.zcu.kiv.cosi.parkoviste.konfigurace.IKonfigurace" name="Konfigurace" policy="dynamic"/>
Abychom mohli používat eventy, musíme si zavolat službu na rozhranní EventAdmina?. Provede se to naprosto stejně, jako volání jakékoliv jiné služby v DS. Tedy:
<reference bind="setMessageService" cardinality="1..1" interface="org.osgi.service.event.EventAdmin" name="EventAdmin" policy="dynamic"/>
Protože konfigurační soubory nahrazují Activatory a v těch jsme si registrovali listenery, určitě budeme muset něco registrovat i zde.
Při registraci EventHandlera? jsme v Activatoru používali vytvořenou instanci listeneru a parametry.
Zde pouze zaregistrujeme službu na rozhraní EventHandler? a nezapomeneme do komponenty přidat propertu <property>
s požavaným názvem a hodnotou.
<service> <provide interface="org.osgi.service.event.EventHandler"/> </service> <property name="event.topics" value="parkoviste/*"/>
Stejně jako v OSGi implementaci, i zde Brana implementuje dvě rozhranní - IZapVyp? a IPrijeloOdjelo?.
Navíc implementuje i rozhranní EventHandler?, aby mohla zpracovávat Eventy.
Není tedy nic jednoduššího, než do <service>
vyplnit všechny rozhranní, na které bude služba zaregistrovaná. A vyplnit všechny názvy a hodnoty <property>
, které mají být platné. V tomto případě samozřejmě platí obě property pro všechny tři rozhranní.
<service> <provide interface="cz.zcu.kiv.cosi.parkoviste.konfigurace.IZapVyp"/> <provide interface="org.osgi.service.event.EventHandler"/> <provide interface="cz.zcu.kiv.cosi.parkoviste.brana.IPrijeloOdjelo"/> </service> <property name="type" value="brana"/> <property name="event.topics" value="parkoviste/plne"/>
Podobně jako v OSGi i zde můžeme použít filtr, když máme na jednom rozhranní zaregistrováno více služeb. Použití je ještě jednodušší - použije se atribut target="(pravidlo)"
<reference bind="setBrana" cardinality="1..1" interface="cz.zcu.kiv.cosi.parkoviste.konfigurace.IZapVyp" name="Brana" policy="dynamic" target="(type=brana)"/>