ObrázokNič nie je dokonalé. Ani Java nie. Keďže nemohla byť navrhnutá 100% dokonalo a chýba jej množstvo vlastností, ktoré sú potrebné pre špecifické účely, vznikla motivácia vylepšovať ju. Z mnohých vylepšení, ktoré prišli alebo ešte len prídu, 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 (vytvorilo OSGi Alliance) a napísalo popis toho, ako by mal fungovať modulárny framework pre Javu. Nepísali kód, ale popis 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ú jej nadstavbu alebo rozšírenie pre nejaké špecifické použitie. Prvá verzia špecifikácie vznikla v roku 2000 a odvtedy bolo vydaných niekoľko verzií, pričom tá posledná R5 tento rok. 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 súbor a nejaké ďalšie informácie, ktoré hovoria o rôznych vlastnostiach a požiadavkách tohto JAR-ka a dostanete niečo, čo sa nazýva bundle. A práve bundle je hlavný stavebný prvok OSGi špecifikácie.

Bundle predstavuje modul, ktorý poskytuje nejakú funkcionalitu a nejakú vyžaduje od svojho prostredia. Takto nahrubo vznikajú väzby medzi bundlami. 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é a ak nie, tak 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.

Obrázok

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 samostatne pozreli v niektorom z nasledujúcich článkov.

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 nemusia byť na zahodenie.