Hlavní menu

Nástroje

UvodDoKomponent / ParkovisteSpringDM

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

Updated 22 January 2015, 15:43 by PremekBrada

Parkoviště ve Spring DM

Implementace ve Spring DM vychází z ParkovisteOsgi. Odstranili jsme ale Activatory a přidali jsme Springové konfigurační soubory. Proto zde budou informace pouze k těmto konfiguračním souborům. O eventách si přečtěte v ParkovisteOsgi.

Springové konfigurační soubory musíme vytvořit s dvěmi XSD namespacy - beans a osgi.

Základ všech konfiguračních souborů

V každém bundlu se samozřejmě vytvoří jedna beana, která se pak musí zaregistrovat podobně jako Konfigurace.

  <osgi:service id="KonfiguraceZarizeniService?" ref="KonfiguraceZarizeni?"
    interface="cz.zcu.kiv.cosi.parkoviste.konfigurace.IKonfigurace?" />

Každá služba se pak samozřejmě musí získat, aby se mohla použít. Podobně jako Konfigurace.

<osgi:reference id="KonfiguraceZarizeni?" interface="cz.zcu.kiv.cosi.parkoviste.konfigurace.IKonfigurace?" />

A pokud chceme tuto referenci použít jako konstruktorový argument, musíme použít následující zápis <constructor-arg ref="reference"/>, protože jinak mi Spring DM házel chybu.

	<bean id="Parkoviste"
		class="cz.zcu.kiv.cosi.parkoviste.parkoviste.Parkoviste">
		<constructor-arg ref="KonfiguraceZarizeni?"/>
	</bean>	

Získání EventAdmina?

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 Spring DM. Tedy:

  <osgi:reference id="EventAdmin?" interface="org.osgi.service.event.EventAdmin?" />

Eventy v konfiguračních souborech

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 tedy použijeme referenci na beanu (což je vlastně ta instance listeneru).

A parametry službě nastavíme pomocí vnořeného uzlu <osgi:service-properties>, do kterého se vkládají parametry obdobně jako do hashovací tabulky, tedy pomocí <entry key="klic" value="hodnota" />

	<osgi:service id="BranaListenerService?" ref="Brana"
    interface="org.osgi.service.event.EventHandler?" >
  		<osgi:service-properties>
  			<entry key="event.topics" value="parkoviste/plne" />
  		</osgi:service-properties>
  </osgi:service>  

Registrace služby na víc rozhranní

Stejně jako v OSGi implementaci, i zde Brana implementuje dvě rozhranní - IZapVyp? a IPrijeloOdjelo?.

V OSGi jsme se však nemuseli starat o způsob registrace služby. Zaregistrovali jsme ji na IZapVyp?, ale bez problému šla přetypovat i na IPrijeloOdjelo?.

To však ve Spring DM nejde. <osgi:service> totiž odešle beanu pouze s tou informací, že jde o rozhranní, pod kterým jsme službu zaregistrovali. Přetypovat pak nejde.

Musíme ji tedy zaregistrovat pod několik rozhranní, jako v následujícím příkladu. Využijeme uzlu <osgi:interfaces>

	<osgi:service id="BranaService?" ref="Brana">
		<osgi:interfaces>
			<value>cz.zcu.kiv.cosi.parkoviste.konfigurace.IZapVyp?</value>
			<value>cz.zcu.kiv.cosi.parkoviste.brana.IPrijeloOdjelo?</value>
		</osgi:interfaces>
		<osgi:service-properties>
			<entry key="type" value="brana" />
		</osgi:service-properties>
	</osgi:service>

Použití filtru při výběru služby

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 filter="(pravidlo)"

  <osgi:reference id="Brana"
  	interface="cz.zcu.kiv.cosi.parkoviste.konfigurace.IZapVyp?" 
  	filter="(type=brana)" />