UvodDoKomponent: MessagePrinterDS |
from Wiki KIVu |
Implementace v DS vychází z MessagePrinterOsgi. Odstranili jsme ale Activatory a přidali jsme komponentové definiční soubory.
Abychom mohli v OSGi zaregistrovat službu pomocí DS, musíme udělat dva kroky:
1) Vytvořit si komponentový definiční soubor pro implementaci konkrétního rozhranní
2) Pomocí tagu <service>
implementaci zaregistrovat jako službu na rozhranní:
<provide interface="rozhranní"/>
Tato registrace je tedy ještě jednodušší než ve Spring DM.
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="MessagePrinterDSServer"> <implementation class="cz.zcu.kiv.cosi.msgtalk.server.MsgGenImpl"/> <service> <provide interface="cz.zcu.kiv.cosi.msgtalk.IMsgGen"/> </service> </scr:component>
Protože chceme získat službu, která je zaregistrovaná na rozhranní cz.zcu.kiv.cosi.msgtalk.IMsgGen?
použijeme notaci <reference interface="cz.zcu.kiv.cosi.msgtalk.IMsgGen?" ...>
s následujícími důležitými atributy:
cardinality="1..1"
určuje kardinalitu, viz. níže
bind="run"
funguje jako injection: tedy volá metodu, která musí mít jeden parametr odpovídajícího rozhranní
policy="static"
může nabývat hodnot static a dynamic, konkrétní význam se mi nepodařilo vysledovat, pro více informací Google
Cardinality určuje vazbu mezi definovanou komponentou a referenční komponentou. První číslo určuje zda musí být referenční komponenta již definována, či nám na tom nezáleží. Druhé číslo definuje kolik referenčních komponent chceme - zda jednu, nebo víc.
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="MessagePrinterDSClient"> <implementation class="cz.zcu.kiv.cosi.msgtalk.client.Client"/> <reference bind="run" cardinality="1..1" interface="cz.zcu.kiv.cosi.msgtalk.IMsgGen" name="MsgGen" policy="static" /> </scr:component>