{"id":38,"date":"2012-12-12T19:26:34","date_gmt":"2012-12-12T18:26:34","guid":{"rendered":""},"modified":"2018-09-17T21:56:22","modified_gmt":"2018-09-17T19:56:22","slug":"kam-java-nemoze-posle-osgi","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/kam-java-nemoze-posle-osgi\/","title":{"rendered":"Kam Java nem\u00f4\u017ee, po\u0161le OSGi"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/dsfsdfs.jpg\" alt=\"Obr\u00e1zok\" width=\"220\" height=\"237\" \/>Ni\u010d nie je dokonal\u00e9. Ani Java nie. Ke\u010f\u017ee nemohla by\u0165 navrhnut\u00e1 100% dokonalo a ch\u00fdba jej mno\u017estvo vlastnost\u00ed, ktor\u00e9 s\u00fa potrebn\u00e9 pre \u0161pecifick\u00e9 \u00fa\u010dely, vznikla motiv\u00e1cia vylep\u0161ova\u0165 ju. Z mnoh\u00fdch vylep\u0161en\u00ed, ktor\u00e9 pri\u0161li alebo e\u0161te len pr\u00eddu, m\u00e1 jedno n\u00e1zov OSGi, \u010do je p\u00f4vodn\u00e1 skratka spojenia \u201eOpen Services Gateway initiative\u201c. Ak chcete vybudova\u0165 dynamick\u00fa, modul\u00e1rnu aplik\u00e1ciu, v ktorej chcete ma\u0165 lep\u0161iu kontrolu nad vidite\u013enos\u0165ou k\u00f3du medzi jednotliv\u00fdmi \u010das\u0165ami, \u010d\u00edtajte \u010falej.<!--more--><\/p>\n<p><!--break-->V prvom rade OSGi nie je framework. Je to \u0161pecifik\u00e1cia frameworku. \u010co to znamen\u00e1? \u017de nieko\u013eko m\u00fadrych hl\u00e1v sa dalo dokopy (vytvorilo OSGi Alliance) a nap\u00edsalo popis toho, ako by mal fungova\u0165 modul\u00e1rny framework pre Javu. Nep\u00edsali k\u00f3d, ale popis vlastnost\u00ed a spr\u00e1vania. A potom si nieko\u013eko softv\u00e9rov\u00fdch in\u017einierov sadlo dokopy a pod\u013ea tohto popisu nap\u00edsali k\u00f3d. A tak vznikol Apache Felix. A tak vznikli Knopflerfish, Equinox a \u010fal\u0161ie. V\u0161etky s\u00fa to implement\u00e1cie tej istej \u0161pecifik\u00e1cie. S\u00fa (mali by by\u0165) na chlp rovnak\u00e9 v tom, \u010do \u0161pecifik\u00e1cia diktuje, ale l\u00ed\u0161ia sa v tom, \u010do nech\u00e1va otvoren\u00e9. V z\u00e1sade, ak sa nau\u010d\u00edte pracova\u0165 s jedn\u00fdm, viete v\u0161etko potrebn\u00e9, aby ste pre\u0161li na in\u00fd. Ale nau\u010di\u0165 sa pracova\u0165 s t\u00fdm prv\u00fdm d\u00e1 zabra\u0165.<\/p>\n<p>Samotn\u00e1 \u0161pecifik\u00e1cia sa del\u00ed do nieko\u013ek\u00fdch \u010dast\u00ed: Core, Compendium, Enterprise, Mobile a Residential. Ale najpodstatnej\u0161ia je Core. Ostatn\u00e9 predstavuj\u00fa jej nadstavbu alebo roz\u0161\u00edrenie pre nejak\u00e9 \u0161pecifick\u00e9 pou\u017eitie. Prv\u00e1 verzia \u0161pecifik\u00e1cie vznikla v roku 2000 a odvtedy bolo vydan\u00fdch nieko\u013eko verzi\u00ed, pri\u010dom t\u00e1 posledn\u00e1 R5 tento rok. Tak ako vych\u00e1dzaj\u00fa posledn\u00e9 nov\u00e9 verzie \u0161pecifik\u00e1ci\u00ed, sna\u017eia sa ich jednotliv\u00e9 implement\u00e1cie sledova\u0165 a zah\u0155\u0148a\u0165 nov\u00e9 po\u017eiadavky.<\/p>\n<p>A o \u010dom to teda je? OSGi popisuje framework, na ktorom viete vybudova\u0165 cel\u00fa aplik\u00e1ciu. T\u00e1 aplik\u00e1cia by mala by\u0165 modul\u00e1rna, pri\u010dom moduly by sa mali da\u0165 za chodu do nej vklada\u0165, aktualizova\u0165 a odobera\u0165. K tomu e\u0161te prid\u00e1va kopec mechanizmov ako medzi t\u00fdmito modulmi vytv\u00e1ra\u0165 v\u00e4zby. V\u010faka nim viete navrhn\u00fa\u0165 modul\u00e1rnu aplik\u00e1ciu so slab\u00fdmi v\u00e4zbami. Z\u00e1kladn\u00e1 my\u0161lienka je ve\u013emi jednoduch\u00e1. Vezmete \u0161tandardn\u00fd java JAR s\u00fabor, roz\u0161\u00edrite jeho manifest s\u00fabor a nejak\u00e9 \u010fal\u0161ie inform\u00e1cie, ktor\u00e9 hovoria o r\u00f4znych vlastnostiach a po\u017eiadavk\u00e1ch tohto JAR-ka a dostanete nie\u010do, \u010do sa naz\u00fdva <em>bundle<\/em>. A pr\u00e1ve bundle je hlavn\u00fd stavebn\u00fd prvok OSGi \u0161pecifik\u00e1cie.<\/p>\n<p>Bundle predstavuje modul, ktor\u00fd poskytuje nejak\u00fa funkcionalitu a nejak\u00fa vy\u017eaduje od svojho prostredia. Takto nahrubo vznikaj\u00fa v\u00e4zby medzi bundlami. Technicky je to realizovan\u00e9 tak, \u017ee bundle m\u00e1 zoznam bal\u00edkov, ktor\u00e9 verejne poskytuje a z\u00e1rove\u0148 zoznam bal\u00edkov, ktor\u00e9 po\u017eaduje. Ak m\u00e1 by\u0165 do be\u017eiaceho syst\u00e9mu nasaden\u00fd, tak framework pri jeho nasadzovan\u00ed zist\u00ed, \u010di v\u0161etky bal\u00edky, ktor\u00e9 vy\u017eaduje, s\u00fa dostupn\u00e9 a ak nie, tak nain\u0161taluje, ale neaktivuje (fyzicky si ho vezme a nahr\u00e1 do vn\u00fatorn\u00fdch \u0161trukt\u00far, ale nedovol\u00ed jeho \u010fal\u0161ie pou\u017e\u00edvanie). D\u00f4le\u017eit\u00e9 je v\u0161imn\u00fa\u0165 si, \u017ee v\u00e4zby s\u00fa vytv\u00e1ran\u00e9 na bal\u00edky a nie na bundle. Inak povedan\u00e9, v\u00e4zby s\u00fa na vy\u0161\u0161ej \u00farovni granularity ako s\u00fa stavebn\u00e9 bloky aplik\u00e1cie. Tento posun, ktor\u00fd nie je v\u00f4bec be\u017en\u00fd, umo\u017e\u0148uje e\u0161te v\u00e4\u010d\u0161iu modularitu a flexibilitu, preto\u017ee viete nasadi\u0165 r\u00f4zne bundle, ktor\u00e9 poskytuj\u00fa ten ist\u00fd bal\u00edk, ale napr\u00edklad vo vy\u0161\u0161ej verzii. A OSGi sa v\u017edy postar\u00e1 o to, aby bol vybran\u00fd ten spr\u00e1vny. Tie\u017e sa tento druh v\u00e4zby popisuje ako definovanie z\u00e1vislosti na tom, \u010do potrebujem a nie na tom, kto to poskytuje.<\/p>\n<p>Zoskupenie funkcional\u00edt do bundlu je z\u00e1kladn\u00fdm pilierom cel\u00e9ho OSGi. Nad touto vrstvou modularity s\u00fa potom vystavan\u00e9 \u010fal\u0161ie dve, pri\u010dom (ako je zvykom) vy\u0161\u0161ia vrstva vyu\u017e\u00edva slu\u017eby tej ni\u017e\u0161ej.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"\/sites\/default\/files\/imagepicker\/1\/osgi.struktura.jpg\" alt=\"Obr\u00e1zok\" width=\"272\" height=\"122\" \/><\/p>\n<p>Vrstva \u017eivotn\u00e9ho cyklu hovor\u00ed o (kto by to \u010dakal:) ) pr\u00edbehu \u017eivota, ktor\u00e9 bundle v OSGi frameworku \u017eij\u00fa. Najvy\u0161\u0161ia vrstva, slu\u017eby potom predstavuje komponentov\u00fd framework postaven\u00fd na dependency injection pattern. Ka\u017ed\u00fd bundle m\u00f4\u017ee poskytova\u0165 nejak\u00fa slu\u017ebu in\u00e9mu bundlu a takto m\u00f4\u017eu vytv\u00e1ra\u0165 v\u00fdpo\u010dtov\u00fd syst\u00e9m schopn\u00fd plni\u0165 \u00falohy. Tieto vrstvy, ale aj in\u00e9 \u010dasti OSGi s\u00fa dostato\u010dne bohat\u00e9, aby sme sa na nich samostatne pozreli v niektorom z nasleduj\u00facich \u010dl\u00e1nkov.<\/p>\n<p><span style=\"font-weight: normal;\">Ak sa za\u010dnete viac zauj\u00edma\u0165 o OSGi zist\u00edte, \u017ee ste s n\u00edm prich\u00e1dzali do kontaktu viac ne\u017e si mysl\u00edte. Napr\u00edklad je na \u0148om zalo\u017een\u00e9 v\u00fdvojov\u00e9 prostredie Eclipse. Rovnako mno\u017estvo aplika\u010dn\u00fdch serverov ako JBoss, Glassfish alebo NetBeans umo\u017e\u0148uje stava\u0165 aplik\u00e1cie pomocou OSGi \u0161tandardu. Preto z\u00e1kladn\u00e9 znalosti tejto \u0161pecifik\u00e1cie nemusia by\u0165 na zahodenie.<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>Ni\u010d nie je dokonal\u00e9. Ani Java nie. Ke\u010f\u017ee nemohla by\u0165 navrhnut\u00e1 100% dokonalo a ch\u00fdba jej mno\u017estvo vlastnost\u00ed, ktor\u00e9 s\u00fa potrebn\u00e9 pre \u0161pecifick\u00e9 \u00fa\u010dely, vznikla motiv\u00e1cia vylep\u0161ova\u0165 ju. Z mnoh\u00fdch vylep\u0161en\u00ed, ktor\u00e9 pri\u0161li alebo e\u0161te len pr\u00eddu, m\u00e1 jedno n\u00e1zov OSGi, \u010do je p\u00f4vodn\u00e1 skratka spojenia \u201eOpen Services Gateway initiative\u201c. Ak chcete vybudova\u0165 dynamick\u00fa, modul\u00e1rnu [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-38","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/38","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=38"}],"version-history":[{"count":1,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/38\/revisions"}],"predecessor-version":[{"id":206,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/38\/revisions\/206"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=38"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=38"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=38"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}