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 markup

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 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:
16 December 2009, 13:06 by Snajberk -
Changed lines 13-14 from:

Jednoduchá implementace HelloWorld. Výsledná implementace: Attach:HelloDS Δ

to:

Jednoduchá implementace HelloWorld. Výsledná implementace: Attach:HelloWorldDS

16 December 2009, 13:06 by Snajberk -
Changed lines 13-24 from:

Jednoduchá implementace 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 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 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 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é :)