UvodDoKomponent: OSGi |
from Wiki KIVu |
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
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
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ů:
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.
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.
Komponentový model OSGi implementují následující frameworky:
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