Dir hutt Är Software schonn op der Plaz, awer Dir braucht nach ëmmer eng méi effektiv Method fir Är technesch Benotzer z'erméiglechen d'Plattform auszebauen.
Och wann OSGi fir déi meescht Java Entwéckler bekannt ass, kann et an Ärem Produkt z'integréieren wéi eng beängschtegend Aufgab schéngen. De Mangel u Kloerheet iwwer dem OSGi seng präzis Aarbechten verschwënnt d'Strooss weider.
Am Géigesaz zu alles mat deem se experimentéiere wëllen, fillt OSGi sech méi wéi probéiert de breet Mier op vill Java Entwéckler ze segelen.
Dësen Artikel wäert Iech den OSGi Felix Fréijoer Tutorial virstellen mat engem einfache Programm a gitt duerch, seng Virdeeler an aner wichteg Detailer.
Also wat ass OSGi?
Moduler a Komponenten erstellen an ze verdeelen ass méiglech gemaach vum Java Kader bekannt als OSGi (Open Service Gateway Initiative).
Et ënnersträicht Funktiounsverschlësselung a locker Kupplung, déi e puer Virdeeler fir Entwéckler bitt, dorënner modulär Funktionalitéit déi liicht iwwerdrobar ass tëscht Quellcoden an Testen déi keng onendlech Ofhängegkeete brauchen.
Wéi funktionéiert OSGi?
En dynamesche Komponentsystem fir Java gëtt definéiert vun enger Rei vu Spezifikatioune genannt OSGi. Dës Spezifikatioune erlaben eng Entwécklungsapproach wou eng Applikatioun aus enger Zuel vun Deeler gebaut gëtt an dann a Bündel verpackt gëtt.
Lokal an Netzwierk-baséiert Servicer gi vun dëse Komponente benotzt fir ze kommunizéieren. De Kärcode vum Programm sou kompakt wéi machbar ze maachen ass d'Zil. Héich Kupplung tëscht dësem Code a verschidde Komponenten ass méiglech.
D'Wiederverwendbare Bauelementer vun der Applikatioun ginn Komponenten genannt. Denkt un Features wéi e Shopping Weenchen fir Är E-Commerce Websäit oder eng Paiungsapplikatioun fir Äre Personalmanagementsystem.
Komponente kënnen OSGi benotzen fir hir Implementatioune vun anere Komponenten ze verstoppen an nëmmen déi néideg Donnéeën hinnen iwwer Servicer ubidden.
Dëst verhënnert datt Komponenten onbedéngt Daten änneren, op déi se keen Zougang sollten hunn a geréiert Ofhängegkeeten.
All Verbindungen tëscht Komponenten an enger OSGi Applikatioun ginn duerch Servicer an enger idealer Welt gemaach. E Java Package enthält d'API déi fir Servicer spezifizéiert ass.
D'Zesummenaarbecht tëscht Serviceprovider a Clienten erfuerdert d'Benotzung vu Klassen an / oder Interfaces, déi d'API ausmaachen.
All d'OSGi Komponente sinn zesummen a Bündel verpackt, jidderee vun deenen d'Ressourcen enthält déi se brauchen fir ze funktionnéieren. Bundles si ganz kloer iwwer wat se vun der Ëmwelt brauchen a wat se fäeg sinn.
Virdeeler
- OSGi Uwendungen hunn Zougang zu externe Bundle Repositories.
- De Kader erlaabt serviceorientéierten Design um Modulniveau.
- Et mécht et méiglech d'Versiounen an d'Ofhängegkeete vun Applikatiounsbündelen ze verwalten nieft der Standardiséierung an et méi einfach ze maachen Drëtt-Parteibibliothéiken z'integréieren.
- D'Applikatioune si méi adaptéierbar un verännerend Ufuerderungen, méi portabel a méi séier nei ze konstruéieren.
- A Web Applikatioun kann als Grupp vu Versiounen OSGi Bündel mat enger dynamescher Liewensdauer agesat ginn duerch d'Integratioun vum Kader mam Java EE Programméierungsmodell.
- Amplaz als Drëtt-Partei-Bibliothéik als Deel vun der Applikatioun installéiert ze ginn, bitt de Kader déi deklarativ Assemblée a streamlined Eenheetsprüfung vum Spring Framework an enger standardiséierter Form déi als Deel vun der Applikatiounsserver Runtime geliwwert gëtt.
- Fir Firmenapplikatiounen, déi aus verschiddene Versioune Bündel mat dynamesche Liewenszyklus besteet, bitt de Kader Isolatioun.
- Et enthält en integréierte Bündel-Repository, dee gemeinsame gemeinsame a Versiounsbündelen, déi vu verschiddenen Uwendungen benotzt ginn, späichere kënnen, verhënnert datt all Applikatioun eng separat Kopie vun all gemeinsame Bibliothéik ofsetzt.
Start mat OSGi Felix Fréijoer
Ressourcen ze kréien
Andeems Dir déi lescht Versioun vum Apache Karaf erofluet dësem Site, Mir kënnen eis OSGi Abenteuer ufänken.
Baséierend op Apache Felix, der Apache Implementatioun vun der OSGi Spezifizéierung, bitt Apache Karaf eng Plattform fir OSGi-baséiert Uwendungen.
Karaf bitt verschidde hëllefräich Funktiounen uewen um Felix, déi eis hëllefen eis mat OSGi vertraut ze maachen, sou wéi eng Kommandozeil-Interface, déi eis erlaabt mat der Plattform ze kommunizéieren.
Entrée Punkt fir Bundles
Eng Applikatioun muss als OSGi Bündel verpackt ginn ier se an engem OSGi Ëmfeld lafen kann. Zousätzlech muss d'Applikatioun Entrée Punkt spezifizéiert ginn; et ass net déi Standard ëffentlech statesch Void Main (String [] args) Funktioun.
Also loosst eis ufänken mat engem "Moien World" Applikatioun baséiert op OSGi.
Mir fänken un mat der Grënnung vun enger Basis OSGi API Ofhängegkeet:
D'OSGi Runtime wäert Zougang zu der Ofhängegkeet hunn, dofir brauch de Bündel et net ze enthalen. Dofir ass et markéiert wéi geliwwert.
Loosst eis déi einfach HelloWorld Klass erstellen:
Klassen, déi als Entréespunkte fir Bündelen handelen, mussen d'OSGi geliwwert BundleActivator Interface implementéieren.
Wann de Bündel mat dëser Klass lancéiert gëtt, rifft d'OSGi Plattform d'Start () Funktioun. Op der anerer Säit, kuerz ier de Bündel gestoppt gëtt, gëtt d'Funktioun Stop () genannt.
Loosst eis net vergiessen datt all Bündel nëmmen ee BundleActivator kann hunn. Béid Weeër kënne mat der OSGi Runtime kommunizéieren mam BundleContext Objet deen uginn ass.
E Bündel erstellen
Maacht de pom.xml e richtege OSGi Bündel andeems Dir déi néideg Ännerungen maacht.
Mir mussen als éischt kloer ausdrécken, datt eist Zil ass, e Bündel ze produzéieren.
Dann benotze mir de Maven-Bundle-Plugin fir d'HelloWorld Klass als OSGi Bündel ze packen, Ugedriwwe vun der Apache Felix Gemeinschaft:
D'Wäerter vun den OSGi-Header, déi mir an der MANIFEST-Datei vum Bündel enthalen wëllen, ginn an der Instruktiounssektioun spezifizéiert.
Bundle-Activator ass tatsächlech de richteg qualifizéierten Numm vun der BundleActivator Léisung déi benotzt gëtt fir de Bündel ze starten an ze stoppen. Et ass kompatibel mat der just erstallt Klass.
Och wann et keen OSGi Header ass, instruéiert de Private-Package Header de Plugin fir de Package un de Bündel ze addéieren awer just net fir aner Plugins zougänglech ze maachen. De mvn install Kommando soll benotzt ginn fir de Bündel ze kreéieren.
Installéieren a lafen de Bundle
Loosst eis Karaf ufänken andeems Dir dëse Kommando ausféiert:
wou "KARAF HOME" bezitt op den Dossier wou Karaf ageriicht gouf. Mir kënnen de folgende Kommando benotze fir de Bündel z'installéieren wann d'Karaf Konsol Prompt erschéngt:
Mat der lokaler Maven Repository ze benotzen ass wéi de Karaf gesot gëtt de Bündel ze lueden.
De Bündel seng numeresch ID zréckzeginn, schreift de Karaf et eraus. Dës ID ka variéieren jee no wéivill Bündelen virdru installéiert goufen. De Bündel ass elo erfollegräich installéiert ginn, an de Kommando fir et ze starten ass wéi follegt:
De Moment wou Dir de Package lancéiert, weist "Hello World by Jay". Mir kënnen elo de Bündel stoppen an ewechhuelen mat:
D'Konsol weist "Äddi Welt vum Jay."
Konklusioun
Entwéckler kënnen einfach nei Funktionalitéit zu enger existéierender Webapplikatioun addéieren, wärend se sécher an isoléiert vun anere Komponenten vum Haaptprogramm halen andeems Dir OSGi benotzt.
Mir hunn iwwer OSGi an dësem Post geléiert, och wéi et funktionnéiert, seng Virdeeler an en einfache Programm. Et ass net schwéier OSGi an Ärer eegener Applikatioun z'integréieren.
Glécklech Kodéierung!
Hannerlooss eng Äntwert