Programmering

Hej, OSGi, del 1: Bundler til begyndere

Open Services Gateway Initiative (OSGi) definerer en arkitektur til udvikling og implementering af modulære applikationer og biblioteker. I denne første artikel i en tredelt introduktion til OSGi får Sunil Patil dig i gang med OSGi-udviklingskoncepter og viser dig, hvordan du bygger en simpel Hello World-applikation ved hjælp af Eclipse OSGi-containerimplementering, Equinox. Han berører også kort opbygning af serviceorienterede applikationer ved hjælp af OSGi og introducerer OSGi ServiceFabrik og ServiceTracker klasser.

Open Services Gateway Initiative (OSGi), også kendt som Dynamic Module System for Java, definerer en arkitektur til modulær applikationsudvikling. OSGi-containerimplementeringer som Knopflerfish, Equinox og Apache Felix giver dig mulighed for at opdele din applikation i flere moduler og dermed lettere styre krydsafhængigheder mellem dem.

OSGi, Equinox og Project Jigsaw

Få et virkeligt verdensbillede ved at studere lektioner, der er lært under en OSGi / Equinox-integration på Storbritanniens største videnskabsprojekt, og find derefter ud af, hvad du kan forvente af Project Jigsaw i Java 9.

I lighed med Java Servlet og EJB-specifikationerne definerer OSGi-specifikationen to ting: et sæt tjenester, som en OSGi-container skal implementere, og en kontrakt mellem containeren og din applikation. Udvikling på OSGi-platformen betyder, at du først bygger din applikation ved hjælp af OSGi API'er og derefter implementerer den i en OSGi-container. Fra en udviklers perspektiv tilbyder OSGi følgende fordele:

  • Du kan installere, afinstallere, starte og stoppe forskellige moduler i din applikation dynamisk uden at genstarte containeren.
  • Din applikation kan have mere end en version af et bestemt modul, der kører på samme tid.
  • OSGi leverer meget god infrastruktur til udvikling af serviceorienterede applikationer såvel som indlejrede, mobile og rige internetapps.

I betragtning af at du bruger servletcontainere til bygning af webapplikationer og EJB-containere til opbygning af transaktionsapplikationer, undrer du dig måske over, hvorfor du har brug for endnu en anden type container. Det korte svar er, at OSGi-containere er specielt beregnet til at udvikle komplekse Java-applikationer, som du vil opdele i moduler. Jeg vil udvide det korte svar gennem denne serie.

Hej, OSGi: Læs serien

  • Del 1: Bundler til begyndere
  • Del 2: Introduktion af forårsdynamiske moduler
  • Del 3: Tag det til serversiden

OSGi i virksomhedsapplikationer

Arbejdet med OSGi-specifikationen blev startet af OSGi Alliance i marts 1999. Dets hovedmål var at skabe en åben specifikation til levering af administrerede tjenester til lokale netværk og enheder. Den grundlæggende idé er, at når du først tilføjer en OSGi-serviceplatform til en netværksenhed (indlejret såvel som servere), skal du være i stand til at styre livscyklussen for softwarekomponenter i den enhed fra hvor som helst i netværket. Softwarekomponenter kan installeres, opdateres eller fjernes med det samme uden nogensinde at skulle afbryde enhedens funktion.

I årevis har OSGi-teknologi blomstret på markedet for integrerede systemer og netværksenheder. Nu, delvis takket være Eclipse, fremstår OSGi som en levedygtig og værdifuld teknologi til virksomhedsudvikling.

Voksende support til OSGi

I 2003 begyndte Eclipse-udviklingsteamet at lede efter måder at gøre Eclipse til en mere dynamisk rig klientplatform og øge værktøjssættets modularitet. Til sidst besluttede teamet sig for at bruge OSGi-rammen som en runtime-komponentmodel. Eclipse 3.0, udgivet i juni 2004, var den første version af Eclipse baseret på OSGi.

Næsten alle enterprise-applikationsservere understøtter eller planlægger at understøtte OSGi. Spring-rammen understøtter også OSGi via Spring Dynamic Modules for OSGi Service Platforms-projektet, som giver et infrastrukturlag, der gør det lettere at bruge OSGi i Spring-baseret Java-virksomhedsapplikationsudvikling.

Open source OSGi containere

Fra en virksomhedsudviklers synspunkt har OSGi-containeren et så lavt fodaftryk, at du nemt kan integrere den i en virksomhedsapplikation. Lad os for eksempel sige, at du udvikler en kompleks webapplikation. Du vil opdele applikationen i flere moduler: et modul til visningslaget, et andet til DAO-laget og et tredje modul til dataadgangslaget. Brug af en integreret OSGi-container til at styre krydsafhængighederne af disse moduler gør det muligt for dig at opdatere dit DAO-lag (f.eks. Fra langsom DAO til hurtig DAO) uden at genstarte din applikation.

Så længe din applikation er i overensstemmelse med OSGi-specifikationen, skal den kunne køre i enhver OSGi-kompatibel container. I øjeblikket er der tre populære open source OSGi-containere:

  • Equinox er referenceimplementeringen for rammedelen af ​​OSGi Service Platform Release 4. Det er den modulære Java-runtime i hjertet af Eclipse IDE og implementerer alle de obligatoriske og de fleste af de valgfri funktioner i OSGi R4-specifikationen.
  • Knopflerfish er en open source-implementering af OSGi R3 og OSGi R4-specifikationerne. Knopflerfish 2 implementerer alle de obligatoriske funktioner og nogle af de valgfri funktioner defineret i R4-specifikationen.
  • Apache Felix er open source OSGi-container fra Apache Software Foundation. I skrivende stund er denne container ikke i fuld overensstemmelse med OSGI R4-specifikationen.

I denne artikel bruger vi Equinox som vores OSGi-container. Se afsnittet Ressourcer for mere information om Apache Felix og Knopflerfish.