U hebt uw software al op zijn plaats, maar u hebt nog steeds een effectievere methode nodig om uw technische gebruikers in staat te stellen het platform uit te breiden.
Ook al is OSGi bekend bij de meeste Java-ontwikkelaars, het kan een ontmoedigende taak lijken om het in uw product te integreren. Het gebrek aan duidelijkheid over de precieze werking van OSGi vertroebelt de weg verder.
In tegenstelling tot alles waarmee ze zouden willen experimenteren, voelt OSGi voor veel Java-ontwikkelaars meer aan als een poging om de wijde zee te bevaren.
Dit artikel zal u kennis laten maken met de OSGi Felix lente-tutorial met behulp van een eenvoudig programma en de voordelen ervan en andere belangrijke details doornemen.
Dus wat is OSGi?
Het maken en distribueren van modules en componenten wordt mogelijk gemaakt door het Java-framework dat bekend staat als OSGi (Open Service Gateway Initiative).
Het legt de nadruk op functie-inkapseling en losse koppeling, wat verschillende voordelen biedt voor ontwikkelaars, waaronder modulaire functionaliteit die gemakkelijk kan worden overgedragen tussen broncodes en testen waarvoor geen oneindige afhankelijkheden nodig zijn.
Hoe werkt OSGi?
Een dynamisch componentensysteem voor Java wordt gedefinieerd door een reeks specificaties die OSGi worden genoemd. Deze specificaties maken een ontwikkelingsbenadering mogelijk waarbij een applicatie uit een aantal onderdelen wordt opgebouwd en vervolgens in bundels wordt verpakt.
Lokale en netwerkgebaseerde services worden door deze componenten gebruikt om te communiceren. Het doel is om de kerncode van het programma zo compact mogelijk te maken. Hoge koppeling tussen deze code en meerdere componenten is mogelijk.
De herbruikbare bouwelementen van de applicatie worden componenten genoemd. Denk aan features als een winkelwagentje voor je e-commerce website of een payroll applicatie voor je personeelsbeheersysteem.
Componenten kunnen OSGi gebruiken om hun implementaties te verbergen voor andere componenten en alleen de benodigde gegevens aan hen verstrekken via services.
Dit voorkomt dat componenten onbedoeld gegevens wijzigen waartoe ze geen toegang zouden moeten hebben en beheert afhankelijkheden.
Alle verbindingen tussen componenten in een OSGi-applicatie worden gemaakt via services in een ideale wereld. Een Java-pakket bevat de API die is opgegeven voor services.
De samenwerking tussen serviceproviders en klanten vereist het gebruik van klassen en/of interfaces, waaruit de API bestaat.
Alle OSGi-componenten zijn samen verpakt in bundels, die elk de bronnen bevatten die ze nodig hebben om te functioneren. Bundels zijn vrij duidelijk over wat ze nodig hebben uit de omgeving en waartoe ze in staat zijn.
Voordelen
- OSGi-applicaties hebben toegang tot externe bundelrepository's.
- Het raamwerk maakt servicegericht ontwerpen op moduleniveau mogelijk.
- Het maakt het mogelijk om de versies en afhankelijkheden van applicatiebundels te beheren, naast het standaardiseren en het gemakkelijker maken om bibliotheken van derden te integreren.
- Applicaties zijn beter aanpasbaar aan veranderende eisen, draagbaarder en sneller te herontwerpen.
- A webapplicatie kan worden ingezet als een groep OSGi-bundels met versiebeheer en een dynamische levensduur dankzij de integratie van het framework met het Java EE-programmeermodel.
- In plaats van te worden geïnstalleerd als een externe bibliotheek als onderdeel van de applicatie, biedt het framework de declaratieve assemblage en gestroomlijnde unit-testing van het Spring Framework in een gestandaardiseerde vorm die wordt geleverd als onderdeel van de runtime van de applicatieserver.
- Voor bedrijfsapplicaties die bestaan uit verschillende versiebundels met dynamische levenscycli, biedt het framework isolatie.
- Het bevat een geïntegreerde bundelrepository die gedeelde gemeenschappelijke en versiebundels kan opslaan die door verschillende applicaties worden gebruikt, waardoor wordt voorkomen dat elke applicatie een afzonderlijk exemplaar van elke gedeelde bibliotheek implementeert.
Aan de slag met OSGi Felix lente
De bronnen verkrijgen
Door de meest recente versie van Apache Karaf te downloaden van deze site, kunnen we aan ons OSGi-avontuur beginnen.
Gebaseerd op Apache Felix, de Apache-implementatie van de OSGi-specificatie, biedt Apache Karaf een platform voor op OSGi gebaseerde applicaties.
Karaf biedt naast Felix verschillende handige functies die ons zullen helpen om vertrouwd te raken met OSGi, zoals een opdrachtregelinterface waarmee we met het platform kunnen communiceren.
Toegangspunt voor bundels
Een applicatie moet worden verpakt als een OSGi-bundel voordat deze in een OSGi-omgeving kan worden uitgevoerd. Bovendien moet het toegangspunt van de toepassing worden opgegeven; het is niet de standaard openbare statische void main(String[] args) functie.
Dus laten we beginnen met het maken van een “Hallo Wereld” applicatie op basis van OSGi.
We beginnen met het vaststellen van een basis OSGi API-afhankelijkheid:
De OSGi-runtime heeft toegang tot de afhankelijkheid, daarom hoeft de bundel deze niet te bevatten. Daarom is het gemarkeerd als geleverd.
Laten we nu de eenvoudige HelloWorld-klasse maken:
Klassen die fungeren als toegangspunten voor bundels moeten de door OSGi geleverde BundleActivator-interface implementeren.
Wanneer de bundel met deze klasse wordt gelanceerd, roept het OSGi-platform de start()-functie aan. Aan de andere kant, kort voordat de bundel wordt gestopt, wordt de functie stop() aangeroepen.
Laten we niet vergeten dat elke bundel maar één BundleActivator kan hebben. Beide manieren kunnen communiceren met de OSGi-runtime met behulp van het gegeven BundleContext-object.
Een bundel maken
Maak van de pom.xml een echte OSGi-bundel door de nodige wijzigingen aan te brengen.
We moeten eerst duidelijk uitdrukken dat het ons doel is om een bundel te produceren.
Vervolgens gebruiken we de maven-bundel-plug-in om de HelloWorld-klasse te verpakken als een OSGi-bundel, met dank aan de Apache Felix-gemeenschap:
De waarden van de OSGi-headers die we in het MANIFEST-bestand van de bundel willen opnemen, worden gespecificeerd in de sectie instructies.
Bundle-Activator is inderdaad de correct gekwalificeerde naam van de BundleActivator-oplossing die zal worden gebruikt om de bundel te starten en te stoppen. Het is compatibel met de zojuist gemaakte klasse.
Hoewel het geen OSGi-header is, instrueert de Private-Package-header de plug-in om het pakket aan de bundel toe te voegen, maar het alleen niet toegankelijk te maken voor andere plug-ins. De opdracht mvn install moet worden gebruikt om de bundel te maken.
De bundel installeren en uitvoeren
Laten we Karaf beginnen door deze opdracht uit te voeren:
waarbij "KARAF HOME" verwijst naar de map waarin Karaf is ingesteld. We kunnen de volgende opdracht gebruiken om de bundel te installeren wanneer de Karaf-console-prompt verschijnt:
Het gebruik van de lokale Maven-repository is hoe Karaf wordt verteld om de bundel te laden.
Karaf geeft de numerieke ID van de bundel terug en schrijft het uit. Deze ID kan verschillen, afhankelijk van hoeveel bundels er eerder zijn geïnstalleerd. De bundel is nu met succes geïnstalleerd en de opdracht om deze te starten is als volgt:
Op het moment dat u het pakket start, wordt "Hello World by Jay" weergegeven. We kunnen de bundel nu stoppen en verwijderen met:
Op de console wordt 'Goodbye World by Jay' weergegeven.
Conclusie
Ontwikkelaars kunnen eenvoudig nieuwe functionaliteit toevoegen aan een bestaande webtoepassing terwijl ze deze veilig en geïsoleerd houden van andere componenten van het hoofdprogramma door OSGi te gebruiken.
We hebben in dit bericht over OSGi geleerd, inclusief hoe het werkt, de voordelen en een eenvoudig programma. Het is niet moeilijk om OSGi in uw eigen applicatie op te nemen.
Veel plezier met coderen!
Laat een reactie achter