Hlavní menu

Nástroje

UvodDoKomponent / OSGi

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

Updated 22 January 2015, 16:07 by PremekBrada

(redirected from UvodDoKomponent.Osgi)

Navigace

OSGi

OSGi je modulární systém pro Javu, který implementuje dynamický komponentový model. Aplikace modularizované do komponent mohou být instalovány, spuštěny, zastaveny, updatovány a odinstalovány bez nutnosti zastavit JVM.

Komponenty se nazývají bundle a jsou distribuovány v klasickém JAR formátu. Tento formát je rozšířen o nové hlavičky v MANIFEST.MF souboru, aby byl schopen popsat vztahy mezi jednotlivými bundly.

Vrstvy OSGi

Architektura OSGi

Každý framework, který implementuje OSGi standard (komponentový model), poskytuje prostředí pro modularizaci aplikací do bundlů. Každý bundle lze dynamicky načíst do běhového prostředí frameworku.

Framework je koncepčně rozdělen na několik oblastí:

Bundles – Bundly jsou obyčejné jar komponenty s "manifest" hlavičkou navíc.
Services – Tato vrstva propojuje bundly dynamickou cestou. Nabízí model publish-find-bind (služby zveřejňuje hledá a propojuje mezi bundly).
Services Registry – API pro služby správy (ServiceRegistration?, ServiceTracker? a ServiceReference?).
Life-Cycle – API pro správu životního cyklu (install, start, stop, update, and uninstall / instalace, spuštění, ukončení, update a odinstalování) bundlů.
Modules – Vrstva, která se stará o zapouzdření a deklaraci závislostí (jak může bundlu importovat a exportovat kód).
Security – Vrstva, která se stará o bezpečnost, omezováním funkcionality bundlů na předdefinované možnosti.
Execution Environment – Definuje, jaké metody a třídy jsou dostupné v dané platformě. (Na obrázku je znázorněn dvojicí JVM a OS.)

Architektura OSGi

Bundly

Bundle je skupina implementačních tříd a k nim přidružených informací, které jsou uloženy v manifest souboru MANIFEST.MF. Ukázkový manifest může vypadat následovně:

Bundle-Name: Hello World
Bundle-SymbolicName: org.wikipedia.helloworld
Bundle-Description: A Hello World bundle
Bundle-ManifestVersion: 2
Bundle-Version: 1.0.0
Bundle-Activator: org.wikipedia.Activator
Export-Package: org.wikipedia.helloworld;version="1.0.0"
Import-Package: org.osgi.framework;version="1.3.0"

Význam použitých parametrů:

  • Bundle-Name: Definuje jméno srozumitelné člověku.
  • Bundle-SymbolicName?: Jediný nutný parametr, který specifikuje unikátní identifikátor bundle. Pojmenování je založeno na konvenci reverze doménového jména (které se rovněž používá u Java balíků).
  • Bundle-Description: Popis funkcionality bundle.
  • Bundle-ManifestVersion?: Tento parametr říká, jaká OSGi specifikace se má použít při čtení tohoto bundle.
  • Bundle-Version: Označuje verzi bundle.
  • Bundle-Activator: Jaká třída má být zavolána jakmile bude bundle spuštěn.
  • Export-Package: Jaké balíky obsažené v bundle budou veřejně viditelné.
  • Import-Package: Jaké balíky tento bundle potřebuje, aby uspokojil své požadavky.

Životní cyklus

INSTALLED – Bundle byl úspěšně nainstalován.
RESOLVED – Všechny třídy, které bundle potřebuje jsou k dispozici. To znamená, že je připraven ke spuštění, nebo byl zastaven.
STARTING – Bundle je spouštěn, tedy volá se metoda BundleActivator?.start().
ACTIVE – Bundle běží. Volání BundleActivator?.start() bylo dokončeno.
STOPPING – Bundle se zastavuje. Volá se metoda BundleActivator?.stop().
UNINSTALLED – Bundle byl odinstalován/odstraněn; není tedy nadále k dispozici.

Služby

V OSGi je služba způsob, kterým lze volat metody cizího bundle. Bundle může nechat registrovat 0-N svých služeb a může 0-M služeb požadovat. Služba se registruje i získává přes rozhraní, které implementuje. Standardně je k dispozici několik systémových služeb: Logging, Configuration Admin, Device Access, User Admin, IO Connector, Preferences, Component Runtime, Deployment Admin, Event Admin, Application Admin.

Implementace OSGi

Komponentový model OSGi implementují následující frameworky:

  • Felix – je malou a velice kompaktní implementací OSGi modelu. Felix je open source vyvíjený Apache Foundation.
  • Equinox – je nejrozšířenější framework, který můžeme najít jako součást IDE Eclipse. Proto se s ním můžeme často setkat v produktech IBM.
  • Knopflerfish – je populární a vyspělý framework, který implementuje jak specifikaci OSGi Release 3, tak Release 4.1. Vyvíjí ho Makewave a je licensován pod BSD licencí.
  • Concierge – je velice kompaktní a optimalizovanou implementací OSGi Release 3. To ho činí zvláště vhodným pro použití v mobilních telefonech.

Praktická část

Tutoriál na vytvoření nového projektu a HelloWorld. Výsledná implementace: Attach:HelloWorldOsgi.zip

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

Příklad ParkovisteOsgi a specifikace jeho možné podoby pak dokumentuje jen technologicky specifické problémy. Výsledná implementace: Attach:ParkovisteOsgi.zip