OSGi Service PlatformOSGi Service Platform[1] (dále OSGi Framework, nebo jen Framework) je specifikace dynamického modulárního systému pro programovací jazyk Java. Standard je definován a udržován mezinárodním konsorciem OSGi Alliance (původně Open Services Gateway initiative, dnes se již nepoužívá). OSGi umožňuje instalaci a odebírání modulů za běhu, definuje životní cyklus modulu a nabízí infrastrukturu pro spolupráci modulů skrze služby. V současné době je OSGi Framework považován za nejvyspělejší modulární systém pro Javu. Zakládají se na něm například nové verze téměř všech velkých aplikačních serverů. HistorieHistorie OSGi sahá až do roku 1998, kdy započaly práce na první verzi specifikace. Původně bylo OSGi cíleno na potřeby systémů pro chytré domácnosti. Díky tomuto původnímu zaměření je OSGi Framework velmi kompaktní. Plná implementace aktuální verze R4 může být jediný jar s velikostí kolem 250KB (Knopflerfish [1]). K nárůstu pozornosti kolem OSGi došlo s úspěchem platformy Eclipse, jež ve verzi 3.0 vyměnila proprietární modulární systém za vlastní implementaci OSGi Equinox. Další oblastí, kde došlo k rozšíření OSGi, na poli aplikačních serverů – je základem nových verzí serverů WebLogic, Websphere, JBoss, GlassFish, JOnAS a dalších [2]. V poslední době se OSGi pomalu začíná využívat na poli enterprise aplikací, které jsou tradičně doménou Java EE. Zatím se jedná spíše o první pokusy, než masovou adopci OSGi Frameworku pro tvorbu enterprise aplikací. Mnoho vývojářů považuje vývojový model OSGi za příliš komplikovaný oproti Java EE a nevidí dostatek přínosů vyvažujících přidanou komplexitu zejména u malých a středních aplikací. Hlavní silou prosazující OSGi na poli enterprise aplikací se vedle dodavatelů jednotlivých implementací stala společnost SpringSource [2][nedostupný zdroj] stojící za úspěšným Spring Framework. V případě SpringSource dm Server není OSGi využito pouze vnitřně v infrastruktuře serveru, ale je i základní jednotkou nasazení (deploymentu). ArchitekturaPodívejme se podrobněji na architekturu OSGi Frameworku a její jednotlivé vrstvy. Execution EnvironmentOSGi Framework je použitelný na široké škále virtuálních strojů včetně široké škály implementací v mobilních zařízeních. Execution Environment je abstrakcí JRE definující dostupné balíčky v daném prostředí. Každý modul přitom může uvést požadovaný minimální Execution Environment (množinu Java balíčků) potřebný k jeho běhu. Modul uvádějící jako požadovaný Execution Environment J2SE-1.5 tak půjde nainstalovat například do OSGi kontejnerů běžících nad Javou 5 či Javou 6, ale ne do kontejneru běžícího nad Javou 1.4, či virtuálním strojem podporujícím pouze Javu ME. ModulyJednotkou modularity v OSGi je takzvaný bundle (dále pouze modul, i když korektnější pojmenování by bylo balík, což by se ovšem pletlo s Java balíčky). Jedná se o běžný jar archiv s několika speciálními hlavičkami v manifestu. Každý modul má za běhu speciálně vytvořený zavaděč tříd (classloader), který vidí pouze Java balíčky a zdroje (obrázky, konfigurační soubory a další) definované v modulu samotném, části standardní knihovny odpovídající specifikovanému Execution Environment a balíčky z ostatních modulů, které explicitně importuje. Níže je MANIFEST.MF soubor jednoduchého modulu. Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.example.bundle
Bundle-Version: 1.0.0
Bundle-Name: Ukázkový bundle
Bundle-Activator: org.example.bundle.Activator
Export-Package: org.example.bundle.package;version="1.0.0";uses:=" org.example.utility.package"
Import-Package: org.example.utility.package;version="[1.4.0, 2.0.0)"
Require-Bundle: org.example.otherbundle;version="[1.2.1, 2.0.0)"
Význam jednotlivých hlaviček je následující:
Životní cyklusKaždý OSGi modul prochází dobře definovaným životním cyklem. Pokud není Frameworkem spravován, nachází se ve stavu uninstalled, po instalaci do Frameworku se nachází ve stavu installed a je učiněn pokus o uspokojení jeho závislostí definovaných hlavičkami Ze stavu resolved může být modul nastartován – je zavolána metoda start jeho aktivátoru, pokud nějaký definuje. Při zpracování této metody se nachází ve stavu starting. Pakliže metoda nevyhodí žádnou výjimku, dostává se do stavu active, ve kterém zůstává až do doby jeho zastavení voláním metody stop aktivátoru. O startování a zastavování modulů se může starat jednak Framework sám, jednak může být vyvoláno (stejně jako ostatní operace životního cyklu) z konzole a mohou je iniciovat ostatní moduly (pokud to umožňuje bezpečnostní nastavení). Operace update může být použita k aktualizování modulu na vyšší verzi či zopakování procesu uspokojení závislostí, stejně jako operace refresh, která navíc způsobí update všech modulů závislých na daném refreshovaném modulu. SlužbyImporty a exporty balíčků definují statické závislosti mezi moduly. OSGi navíc nabízí vrstvu služeb, které tvoří dynamické závislosti. Služba v OSGi je libovolný POJO objekt. Může být zaregistrován kdykoliv je modul ve stavu starting nebo active. Registrace se provádí pod názvem jednoho či více rozhraní, které daný objekt implementuje, a libovolného počtu atributů klíč-hodnota pro odlišení služeb stejného typu. Po registraci může být služba nalezena ostatními moduly v registru na základě názvu rozhraní a LDAP filtru přes další atributy. Modul může zaregistrovat posluchače V průběhu času mohou přicházet nové služby s tím, jak se do kontejneru instalují nové moduly. Existující služby mohou být také odregistrovány – děje se tak buď programově, nebo automaticky při zastavení modulu, který je zaregistroval. Toto dynamické chování klade specifické nároky na klientský kód, který služeb využívá. Správné použití služeb přes nativní OSGi API je poměrně složité a obnáší množství opakujícího se kódu. K dispozici je několik nadstaveb usnadňující práci se službami – například knihovna Spring Dynamic Modules [3], která umožňuje definovat pro každý modul springový aplikační kontext, deklarativně exportovat beany jako služby a importovat libovolnou službu jako Spring bean. Vytvořený bean je proxy objektem k požadované službě, umožňujícím například dynamickou záměnu za ekvivalentní službu, pokud je původní služba odregistrována. Reference
Externí odkazy
|
Portal di Ensiklopedia Dunia