Du har allerede din software på plads, men du har stadig brug for en mere effektiv metode til at gøre det muligt for dine tekniske brugere at udvide platformen.
Selvom OSGi er velkendt for de fleste Java-udviklere, kan det virke som en skræmmende opgave at integrere det i dit produkt. Manglen på klarhed om OSGi's præcise funktionsmåde forvirrer vejen fremad yderligere.
I modsætning til alt, hvad de gerne vil eksperimentere med, føles OSGi mere som at forsøge at sejle det brede hav til mange Java-udviklere.
Denne artikel vil introducere dig til OSGi Felix forårstutorial ved hjælp af et ligetil program og gennemgå, dets fordele og andre vigtige detaljer.
Så hvad er OSGi?
Oprettelse og distribution af moduler og komponenter er muliggjort af Java-rammeværket kendt som OSGi (Open Service Gateway Initiative).
Det lægger vægt på funktionsindkapsling og løs kobling, hvilket giver udviklere adskillige fordele, herunder modulær funktionalitet, der let kan overføres mellem kildekoder og test, der ikke behøver uendelige afhængigheder.
Hvordan virker OSGi?
Et dynamisk komponentsystem til Java er defineret af et sæt specifikationer kaldet OSGi. Disse specifikationer muliggør en udviklingstilgang, hvor en applikation er bygget af en række dele og derefter pakket ind i bundter.
Lokale og netværksbaserede tjenester bruges af disse komponenter til at kommunikere. Målet er at gøre programmets kernekode så kompakt som muligt. Høj kobling mellem denne kode og flere komponenter er mulig.
Applikationens genanvendelige byggeelementer kaldes komponenter. Tænk på funktioner som en indkøbskurv til dit e-handelswebsted eller en lønapplikation til dit personalestyringssystem.
Komponenter kan bruge OSGi til at skjule deres implementeringer fra andre komponenter og kun levere de nødvendige data til dem via tjenester.
Dette forhindrer komponenter i utilsigtet at ændre data, de ikke burde have adgang til, og administrerer afhængigheder.
Alle forbindelser mellem komponenter i en OSGi-applikation er lavet gennem tjenester i en ideel verden. En Java-pakke indeholder den API, der er specificeret for tjenester.
Samarbejdet mellem serviceudbydere og kunder kræver brug af klasser og/eller grænseflader, som udgør API'en.
Alle OSGi-komponenterne er pakket sammen i bundter, som hver indeholder de ressourcer, de kræver for at fungere. Bundles er helt klare over, hvad de har brug for fra miljøet, og hvad de er i stand til.
Fordele
- OSGi applikationer har adgang til eksterne bundle repositories.
- Rammen tillader serviceorienteret design på modulniveau.
- Det gør det muligt at administrere versioner og afhængigheder af applikationspakker ud over at standardisere og gøre det nemmere at integrere tredjepartsbiblioteker.
- Applikationer er mere tilpasselige til skiftende krav, mere bærbare og hurtigere at ombygge.
- A webapplikation kan implementeres som en gruppe af versionerede OSGi-bundter med en dynamisk levetid takket være frameworkets integration med Java EE-programmeringsmodellen.
- I stedet for at blive installeret som et tredjepartsbibliotek som en del af applikationen, giver rammeværket den deklarative samling og strømlinede enhedstest af Spring Framework i en standardiseret form, der leveres som en del af applikationsserverens runtime.
- For virksomhedsapplikationer, der består af flere versionerede bundter med dynamiske livscyklusser, tilbyder rammeværket isolering.
- Den indeholder et integreret bundt-lager, der kan gemme delte fælles og versionerede bundter, der bruges af flere applikationer, hvilket forhindrer hver applikation i at implementere en separat kopi af hvert delt bibliotek.
Kom godt i gang med OSGi Felix spring
Få ressourcerne
Ved at downloade Apache Karafs seneste version fra dette site, kan vi begynde vores OSGi eventyr.
Baseret på Apache Felix, Apache-implementeringen af OSGi-specifikationen, tilbyder Apache Karaf en platform for OSGi-baserede applikationer.
Karaf tilbyder forskellige nyttige funktioner oven på Felix, der vil hjælpe os med at blive fortrolige med OSGi, såsom en kommandolinjegrænseflade, der gør os i stand til at kommunikere med platformen.
Indgangspunkt for bundter
En applikation skal pakkes som en OSGi-pakke, før den kan køres i et OSGi-miljø. Derudover skal ansøgningens indgangspunkt specificeres; det er ikke den standard public static void main(String[] args) funktion.
Så lad os starte med at oprette en "Hej Verden” applikation baseret på OSGi.
Vi begynder med at etablere en grundlæggende OSGi API-afhængighed:
OSGi runtime vil have adgang til afhængigheden, derfor behøver bundtet ikke at indeholde det. Derfor er den mærket som leveret.
Lad os nu skabe den ligefremme HelloWorld-klasse:
Klasser, der fungerer som indgangspunkter for bundter, skal implementere den OSGi-leverede BundleActivator-grænseflade.
Når bundtet, der indeholder denne klasse, startes, kalder OSGi-platformen start()-funktionen. På den anden side, kort før bundtet stoppes, kaldes funktionen stop().
Lad os ikke glemme, at hver bundle kun kan have én BundleActivator. Begge måder kan kommunikere med OSGi runtime ved hjælp af det angivne BundleContext-objekt.
Oprettelse af en pakke
Gør pom.xml til et ægte OSGi-bundt ved at foretage de nødvendige ændringer.
Vi skal først udtrykke klart, at vores mål er at producere et bundt.
Derefter bruger vi maven-bundle-pluginet til at pakke HelloWorld-klassen som en OSGi-pakke, med tilladelse fra Apache Felix-fællesskabet:
Værdierne for de OSGi-headere, vi ønsker at inkludere i pakkens MANIFEST-fil, er specificeret i vejledningssektionen.
Bundle-Activator er faktisk det korrekt kvalificerede navn på BundleActivator-løsningen, der vil blive brugt til at starte og stoppe pakken. Den er kompatibel med den netop oprettede klasse.
Selvom det ikke er en OSGi-header, instruerer Private-Package-headeren pluginnet om at tilføje pakken til bundtet, men bare ikke gøre det tilgængeligt for andre plugins. Kommandoen mvn install skal bruges til at oprette pakken.
Installation og kørsel af bundtet
Lad os starte Karaf ved at køre denne kommando:
hvor "KARAF HJEM" refererer til den mappe, hvor Karaf blev sat op. Vi kan bruge følgende kommando til at installere bundtet, når Karaf-konsolprompten vises:
Brug af det lokale Maven-lager er, hvordan Karaf får besked på at indlæse bundtet.
Ved at returnere bundtets numeriske ID, skriver Karaf det ud. Dette id kan variere afhængigt af, hvor mange bundter, der tidligere er blevet installeret. Bunden er nu blevet installeret, og kommandoen til at starte den er som følger:
I det øjeblik du starter pakken, vises "Hello World by Jay". Vi kan nu stoppe og fjerne bundtet ved hjælp af:
Konsollen viser "Goodbye World by Jay."
Konklusion
Udviklere kan nemt tilføje ny funktionalitet til en eksisterende webapplikation og samtidig holde den sikker og isoleret fra andre komponenter i hovedprogrammet ved at bruge OSGi.
Vi har lært om OSGi i dette indlæg, herunder hvordan det fungerer, dets fordele og et ligetil program. Det er ikke svært at inkorporere OSGi i din egen applikation.
God kodning!
Giv en kommentar