Kam Java nemôže, pošle OSGi

136

Nič nie je dokonalé. Ani Java nie. Keďže nemohla byť navrhnutá bezchybne a existuje množstvo vlastností, ktoré sú potrebné pre špeciálne účely, vznikla motivácia vylepšovať ju. Z mnohých vylepšení, ktoré prišli, má jedno názov OSGi, čo je pôvodná skratka spojenia „Open Services Gateway initiative“. Ak chcete vybudovať dynamickú, modulárnu aplikáciu, v ktorej chcete mať lepšiu kontrolu nad viditeľnosťou kódu medzi jednotlivými časťami, čítajte ďalej.

V prvom rade OSGi nie je framework. Je to špecifikácia frameworku. Čo to znamená? Že niekoľko múdrych hláv sa dalo dokopy (dnes si hovoria OSGi Alliance) a vytvorili popis toho, ako by mal fungovať modulárny framework pre Javu. Nepísali kód, ale zoznam vlastností a správania. A potom si niekoľko softvérových inžinierov sadlo dokopy a podľa tohto popisu napísali kód. A tak vznikol Apache Felix. A tak vznikli Knopflerfish, Equinox a ďalšie. Všetky sú to implementácie tej istej špecifikácie. Sú (mali by byť) na chlp rovnaké v tom, čo špecifikácia diktuje, ale líšia sa v tom, čo necháva otvorené. V zásade, ak sa naučíte pracovať s jedným, viete všetko potrebné, aby ste prešli na iný. Ale naučiť sa pracovať s tým prvým dá zabrať.

Samotná špecifikácia sa delí do niekoľkých častí: Core, Compendium, Enterprise, Mobile a Residential. Ale najpodstatnejšia je Core. Ostatné predstavujú nadstavbu alebo rozšírenie pre nejaké určité prípady. Prvá verzia vznikla v roku 2000 a odvtedy bolo vydaných niekoľko ďalších, pričom tá posledná R5 tento rok (2012). Tak ako vychádzajú posledné nové verzie špecifikácií, snažia sa ich jednotlivé implementácie sledovať a zahŕňať nové požiadavky.

A o čom to teda je? OSGi popisuje framework, na ktorom viete vybudovať celú aplikáciu. Tá aplikácia by mala byť modulárna, pričom moduly by sa mali dať za chodu do nej vkladať, aktualizovať a odoberať. K tomu ešte pridáva kopec mechanizmov ako medzi týmito modulmi vytvárať väzby. Vďaka nim viete navrhnúť modulárnu aplikáciu so slabými väzbami. Základná myšlienka je veľmi jednoduchá. Vezmete štandardný java JAR súbor, rozšírite jeho manifest o nejaké ďalšie informácie, ktoré hovoria o rôznych vlastnostiach a požiadavkách tohto modulu a dostanete niečo, čo sa nazýva bundle. A práve ten je hlavný stavebný prvok OSGi špecifikácie.

Bundle predstavuje modul, ktorý poskytuje nejakú funkcionalitu a nejakú vyžaduje od svojho prostredia. Takto nahrubo medzi nimi vznikajú väzby. Technicky je to realizované tak, že bundle má zoznam balíkov, ktoré verejne poskytuje a zároveň zoznam balíkov, ktoré požaduje. Ak má byť do bežiaceho systému nasadený, tak framework pri jeho nasadzovaní zistí, či všetky balíky, ktoré vyžaduje, sú dostupné. Ak áno, tak ho nahrá a aktivuje. Ak nie, tak ho nainštaluje, ale neaktivuje (fyzicky si ho vezme a nahrá do vnútorných štruktúr, ale nedovolí jeho ďalšie používanie). Dôležité je všimnúť si, že väzby sú vytvárané na balíky a nie na bundle. Inak povedané, väzby sú na vyššej úrovni granularity ako sú stavebné bloky aplikácie. Tento posun, ktorý nie je vôbec bežný, umožňuje ešte väčšiu modularitu a flexibilitu, pretože viete nasadiť rôzne bundle, ktoré poskytujú ten istý balík, ale napríklad vo vyššej verzii. A OSGi sa vždy postará o to, aby bol vybraný ten správny. Tiež sa tento druh väzby popisuje ako definovanie závislosti na tom, čo potrebujem a nie na tom, kto to poskytuje.

Zoskupenie funkcionalít do bundlu je základným pilierom celého OSGi. Nad touto vrstvou modularity sú potom vystavané ďalšie dve, pričom (ako je zvykom) vyššia vrstva využíva služby tej nižšej.

Vrstva životného cyklu hovorí o (kto by to čakal) príbehu života, ktoré bundle v OSGi frameworku žijú. Najvyššia vrstva, služby potom predstavuje komponentový framework postavený na dependency injection pattern. Každý bundle môže poskytovať nejakú službu inému bundlu a takto môžu vytvárať výpočtový systém schopný plniť úlohy. Tieto vrstvy, ale aj iné časti OSGi sú dostatočne bohaté, aby sme sa na nich pozreli v samostatných článkoch.

Ak sa začnete viac zaujímať o OSGi zistíte, že ste s ním prichádzali do kontaktu viac než si myslíte. Napríklad je na ňom založené vývojové prostredie Eclipse. Rovnako množstvo aplikačných serverov ako JBoss, Glassfish alebo NetBeans umožňuje stavať aplikácie pomocou OSGi štandardu. Preto základné znalosti tejto špecifikácie môžu byť užitočné.

Dobrý článok? Chceš dostávať ďalšie?

Už viac ako 4 200 z vás dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.

I agree to have my personal information transfered to MailChimp ( more information )

Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžete odhlásiť.