Hlavní menu

Nástroje

UvodDoKomponent / DeclarativeServices

View (print) - Edit page | Recent changes - Page history

Updated 05 January 2010, 15:10 by Snajberk

UvodDoKomponent.DeclarativeServices History

Hide minor edits - Show changes to output

05 January 2010, 15:10 by Snajberk -
Changed lines 15-16 from:
!! Změny DS
to:
!! Změny v DS
05 January 2010, 15:09 by Snajberk -
Changed lines 5-6 from:
TODO: doplnit
to:
Je nejpodobnější Spring DM.

Myšlenkou Declarative Services je rozšíření OSGi, aby byla jednodušší správa služeb. DS nám rovněž ve snadno přístupném konfiguračním souboru odkrývá všechny služby, které zveřejňuje a které potřebuje.

*Je vhodné přečíst si kapitoly o Springu a OSGi*

!! DS framework

V tomto případě už snad ani nejde mluvit o frameworku jako u Spring DM. DS nám totiž poskytuje pouze lepší práci se službami. Mluvme tedy o DS jako o rozšíření OSGi frameworku. V tomto případě tedy můžeme vynechat i všechny další komponentové pojmy, protože ty zůstávají stejné jako u OSGi.

!! Změny DS

Je přidán nový konfigurační soubor. Vedle @@META-INF/MANIFEST.MF@@ je zde ještě @@OSGI-INF/konfSoubor.xml@@. Jméno tohoto konfiguračního souboru není pevně dáno.

Využívá se nový namespace, který přímo reprezentuje komponentu - bundle.
* @@<implementation>@@: lze určit, jaká je hlavní (spouštěcí) třída => opět se nemusí používat activator.
* @@<service>@@: zde se registrují služby
* @@<provide>@@: určí na jaké rozhranní se má služba zaregistrovat
* @@<property>@@: nastaví property zveřejněné službě
* @@<reference>@@: získá a naváže službu na metodu, která si získaný interface dále zpracuje

Ukázka:

=xml [=
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"
enabled="true" immediate="true" name="ParkovisteDSPult">

<implementation class="cz.zcu.kiv.cosi.parkoviste.pult.Pult"/>

<service>
<provide interface="org.osgi.service.event.EventHandler"/>
</service>

<property name="event.topics" value="parkoviste/*"/>

<reference bind="setStatistika" cardinality="1..1"
interface="cz.zcu.kiv.cosi.parkoviste.brana.IPrijeloOdjelo"
name="IPrijeloOdjelo" policy="dynamic"/>
</scr:component>

=]
22 December 2009, 13:39 by Snajberk -
Changed lines 3-4 from:
!! Declarative Services
to:
! Declarative Services

TODO: doplnit

! Praktická část
Changed lines 11-16 from:
Declarative services není plnohodnotný framework, ale pouze rozšíření OSGi. Při implementaci příkladů jsem vzal kompletní funkční část z OSGi - ale bez Activatorů. To je vlastně téměř jediný rozdíl v kódu oproti [[Osgi]]. Declarative Services umí vlastně úplně to samé jako [[SpringDM]], pouze používá jiný přístup (mě osobně plně nevyhovoval).


Místo activatorů jsou přítomny komponentové xml soubory, které je nahrazují.

to:
Declarative services není plnohodnotný framework, ale pouze rozšíření OSGi. Při implementaci příkladů jsem vzal kompletní funkční část z OSGi - ale bez Activatorů. To je vlastně téměř jediný rozdíl v kódu oproti [[Osgi]]. Declarative Services umí vlastně úplně to samé jako [[SpringDM]], pouze používá jiný přístup.


Místo activatorů jsou zde komponentové xml soubory.

17 December 2009, 16:03 by Snajberk -
Added lines 1-2:
(:include Navigation :)
16 December 2009, 13:06 by Snajberk -
Changed lines 13-14 from:
Jednoduchá implementace [[HelloWorldDS | HelloWorld]]. Výsledná implementace: Attach:HelloDS
to:
Jednoduchá implementace [[HelloWorldDS | HelloWorld]]. Výsledná implementace: Attach:HelloWorldDS
16 December 2009, 13:06 by Snajberk -
Changed lines 13-24 from:
Jednoduchá implementace [[HelloWorldDS | HelloWorld]]. Výsledná implementace: [[Soubor:HelloDS

Příklad [[MessagePrinterDS]] pak dokumentuje jen technologicky specifické problémy. Výsledná implementace: [[Soubor:MessagePrinterDS.zip]]

Příklad [[ParkovisteDS]] pak dokumentuje jen technologicky specifické problémy. Výsledná implementace: [[Soubor:ParkovisteDS.zip]]

== Poznámky k DS ==

1) Jakmile u komponenty registruji <code><service></code>, komponenta se okamžitě stává <code>delayed</code>, což znamená, že nebude nic dělat, dokud někdo nebude registrovanou službu chtít - pak teprve dojde k vytvoření dané komponenty.

2) Pokud chci spouštět komponentu s registrovanou službou okamžitě (mám v ní metodu activate), musím nastavit <code><scr:component immediate="true" ...></code>
to:
Jednoduchá implementace [[HelloWorldDS | HelloWorld]]. Výsledná implementace: Attach:HelloDS

Příklad [[MessagePrinterDS]] pak dokumentuje jen technologicky specifické problémy. Výsledná implementace: Attach:MessagePrinterDS

Příklad [[ParkovisteDS]] pak dokumentuje jen technologicky specifické problémy. Výsledná implementace: Attach:ParkovisteDS

!! Poznámky k DS

1) Jakmile u komponenty registruji @@<service>@@, komponenta se okamžitě stává @@delayed@@, což znamená, že nebude nic dělat, dokud někdo nebude registrovanou službu chtít - pak teprve dojde k vytvoření dané komponenty.

2) Pokud chci spouštět komponentu s registrovanou službou okamžitě (mám v ní metodu activate), musím nastavit @@<scr:component immediate="true" ...>@@
16 December 2009, 13:05 by Snajberk -
Added lines 1-27:
!! Declarative Services

V těchto návodech pracuji s [[http://www.springsource.com/products/sts | SpringSource Tool Suite]], které je trochu odlišné od Eclipsu. Většina věcí je však stejná.

Declarative services není plnohodnotný framework, ale pouze rozšíření OSGi. Při implementaci příkladů jsem vzal kompletní funkční část z OSGi - ale bez Activatorů. To je vlastně téměř jediný rozdíl v kódu oproti [[Osgi]]. Declarative Services umí vlastně úplně to samé jako [[SpringDM]], pouze používá jiný přístup (mě osobně plně nevyhovoval).


Místo activatorů jsou přítomny komponentové xml soubory, které je nahrazují.


[[TutoriálDeclarativeServices]] na vytvoření nového projektu.

Jednoduchá implementace [[HelloWorldDS | HelloWorld]]. Výsledná implementace: [[Soubor:HelloDS

Příklad [[MessagePrinterDS]] pak dokumentuje jen technologicky specifické problémy. Výsledná implementace: [[Soubor:MessagePrinterDS.zip]]

Příklad [[ParkovisteDS]] pak dokumentuje jen technologicky specifické problémy. Výsledná implementace: [[Soubor:ParkovisteDS.zip]]

== Poznámky k DS ==

1) Jakmile u komponenty registruji <code><service></code>, komponenta se okamžitě stává <code>delayed</code>, což znamená, že nebude nic dělat, dokud někdo nebude registrovanou službu chtít - pak teprve dojde k vytvoření dané komponenty.

2) Pokud chci spouštět komponentu s registrovanou službou okamžitě (mám v ní metodu activate), musím nastavit <code><scr:component immediate="true" ...></code>

3) Je třeba si dávat pozor, na obsah definičního souboru - každá drobnost může způsobit nefunkčnost a nehlásí žádnou chybu.

4) I když je nastaven okamžitý start u komponenty, která registruje službu (například EventHandler), služba se prostě nezaregistruje. Něco takového asi prostě není možné :)