OSGi

OSGi
OSGi Logo.png
OSGi Alliances logotyp
Året började 1999
Senaste versionen
8.0 oktober 2020 ( 2020-10 )
Organisation OSGi Alliance
Domän Java
Licens OSGi-specifikationslicens, version 2.0
Hemsida www .osgi .org

OSGi är ett projekt med öppen specifikation och öppen källkod under Eclipse Foundation . Det är en fortsättning på det arbete som utförts av OSGi Alliance (tidigare känt som Open Services Gateway-initiativet ), som var en öppen standardorganisation för datorprogram som grundades i mars 1999. Stiftelsen specificerade och upprätthöll ursprungligen OSGi-standarden . Alliansen överförde sitt arbete till Eclipse Foundation i slutet av 2020. OSGi-specifikationen beskriver ett modulärt system och en tjänsteplattform för programmeringsspråket Java som implementerar en komplett och dynamisk komponentmodell , något som inte finns i fristående Java eller VM miljöer. Den har en tjänsteorienterad arkitektur baserad på mikrotjänster som var och en är implementerad som ett utökat Java-klassfilarkiv ( JAR (filformat)) .

Beskrivning

OSGi är byggd kring en tjänsteorienterad arkitektur . Applikationer eller komponenter, som kommer i form av paket för distribution , kan fjärrinstalleras, startas, stoppas, uppdateras och avinstalleras utan att behöva starta om . Hantering av Java-paket / klasser specificeras i detalj. Applikationslivscykelhantering implementeras via API:er som möjliggör fjärrnedladdning av hanteringspolicyer. Tjänsteregistret gör det möjligt för paket att upptäcka tillägg av nya tjänster eller borttagning av tjänster och anpassa sig därefter.

OSGi-specifikationerna har utvecklats bortom det ursprungliga fokus för servicegateways och används nu i applikationer som sträcker sig från mobiltelefoner till Eclipse IDE med öppen källkod . Andra applikationsområden inkluderar bilar , industriell automation , byggnadsautomation , handdatorer , grid computing , underhållning , fleet management och applikationsservrar .

I oktober 2020 tillkännagav OSGi Alliance övergången av standardiseringsarbetet till Eclipse Foundation , varefter det skulle läggas ner. Alla artefakter har överförts till Eclipse Foundation , där en OSGi Working Group fortsätter att underhålla och utveckla specifikationen.

Specifikationsprocessen

OSGi-specifikationen utvecklas av medlemmarna i en öppen process och görs tillgänglig för allmänheten gratis under OSGi-specifikationslicensen. OSGi Alliance har ett efterlevnadsprogram som endast är öppet för medlemmar. Från och med november 2010 finns det sju certifierade OSGi- ramverksimplementeringar . En separat sida listar både certifierade och icke-certifierade OSGi-specifikationer , som inkluderar OSGi-ramverk och andra OSGi-specifikationer.

Arkitektur

OSGi Service Gateway-arkitektur

OSGi är ett Java-ramverk för att utveckla och distribuera modulära program och bibliotek. Varje paket är en tätt kopplad, dynamiskt laddningsbar samling av klasser, jars och konfigurationsfiler som uttryckligen deklarerar sina externa beroenden (om några).

Ramverket är konceptuellt uppdelat i följande områden:

Bundles
Bundles är normala JAR- komponenter med extra manifest headers.
Tjänster
Tjänsteskiktet kopplar samman paket på ett dynamiskt sätt genom att erbjuda en publicera-finn-bind-modell för vanliga gamla Java-gränssnitt ( POJI ) eller vanliga gamla Java-objekt (POJOs).
Services Registry
Applikationsprogrammeringsgränssnittet för administrationstjänster .
Life-Cycle
Applikationsprogrammeringsgränssnittet för livscykelhantering (installera, starta, stoppa, uppdatera och avinstallera) för paket .
Moduler
Lagret som definierar inkapsling och deklaration av beroenden (hur ett paket kan importera och exportera kod).
Säkerhet
Lagret som hanterar säkerhetsaspekterna genom att begränsa buntfunktionaliteten till fördefinierade funktioner.
Utförandemiljö
Definierar vilka metoder och klasser som är tillgängliga i en specifik plattform. Det finns ingen fast lista över exekveringsmiljöer, eftersom den kan ändras när Java Community Process skapar nya versioner och utgåvor av Java. Men följande uppsättning stöds för närvarande av de flesta OSGi-implementeringar:

Buntar

Klassificering: OSGi

En bunt är en grupp av Java-klasser och ytterligare resurser utrustade med en detaljerad manifest MANIFEST.MF- fil på allt dess innehåll, samt ytterligare tjänster som behövs för att ge den inkluderade gruppen av Java-klasser mer sofistikerade beteenden, i den mån det betraktas som hela samla en komponent.

Nedan är ett exempel på en typisk MANIFEST.MF- fil med OSGi Headers:

 
 
 
 
 
 
 
  Bundle-Name  :  Hello World  Bundle-SymbolicName  :  org.wikipedia.helloworld  Bundle-Description  :  A Hello World-bunt  Bundle-ManifestVersion  :  2  Bundle-Version  :  1.0.0  Bundle-Activator  :  org.wikipedia.Activator  Export-Package  :  org. wikipedia.helloworld;version="1.0.0"  Import-paket  :  org.osgi.framework;version="1.3.0" 

Innebörden av innehållet i exemplet är följande:

  1. Bundle-Name: Definierar ett mänskligt läsbart namn för denna bunt, tilldelar helt enkelt ett kort namn till bunten.
  2. Bundle-SymbolicName: Den enda obligatoriska rubriken, denna post anger en unik identifierare för ett paket, baserat på den omvända domännamnskonventionen (används även av java-paketen ).
  3. Bundle-Description: En beskrivning av buntens funktionalitet.
  4. Bundle-ManifestVersion: Indikerar OSGi-specifikationen som ska användas för att läsa detta paket.
  5. Bundle-Version: Anger ett versionsnummer för bunten.
  6. Bundle-Activator: Indikerar klassnamnet som ska anropas när en bunt aktiveras.
  7. Exportpaket: Uttrycker vilka Java-paket som ingår i ett paket som kommer att göras tillgängliga för omvärlden.
  8. Import-paket: Indikerar vilka Java-paket som kommer att krävas från omvärlden för att uppfylla de beroenden som behövs i ett paket.

Livscykel

OSGi-paketets livscykel

Ett livscykellager lägger till paket som dynamiskt kan installeras, startas, stoppas, uppdateras och avinstalleras. Bunter förlitar sig på modullagret för klassladdning men lägger till ett API för att hantera modulerna under körning. Livscykellagret introducerar dynamik som normalt inte är en del av en applikation. Omfattande beroendemekanismer används för att säkerställa att miljön fungerar korrekt. Livscykeloperationer är helt skyddade med säkerhetsarkitekturen.

Bundle State Beskrivning
INSTALLERAD Paketet har installerats.
LÖST Alla Java-klasser som paketet behöver är tillgängliga. Detta tillstånd indikerar att paketet antingen är redo att startas eller har stoppats.
STARTANDE Paketet startas, metoden BundleActivator.start har anropats men startmetoden har ännu inte returnerats. När paketet har en aktiveringspolicy förblir paketet i START-läget tills paketet aktiveras enligt dess aktiveringspolicy.
AKTIVA Paketet har aktiverats och körs. dess Bundle Activator startmetod har anropats och returnerats.
STOPP Bunten stoppas. Metoden BundleActivator.stop har anropats men stoppmetoden har ännu inte returnerats.
OINSTALLERAD Paketet har avinstallerats. Den kan inte flytta till en annan stat.

Nedan är ett exempel på en typisk Java-klass som implementerar BundleActivator- gränssnittet:

 

 
 

     
	  

	
	      
		
		  
	

	
	      
		
		  
	
 paket  org.wikipedia  ;  import  org.osgi.framework.BundleActivator  ;  import  org.osgi.framework.BundleContext  ;  public  class  Activator  implementerar  BundleActivator  {  private  BundleContext  context  ;  @Override  public  void  start  (  BundleContext  context  )  kastar  Exception  {  System  .  ut  .  println  (  "Start: Hello World"  );  detta  .  sammanhang  =  sammanhang  ;  }  @Override  public  void  stop  (  BundleContext  context  )  kastar  Exception  {  System  .  ut  .  println  (  "Stopping: Goodbye Cruel World" )  ;  detta  .  sammanhang  =  null  ;  }  } 

Tjänster

Standardtjänster

OSGi Alliance har specificerat många tjänster. Tjänster specificeras av ett Java-gränssnitt . Bundles kan implementera detta gränssnitt och registrera tjänsten med tjänsteregistret. Kunder av tjänsten kan hitta den i registret eller reagera på den när den dyker upp eller försvinner.

Tabellen nedan visar en beskrivning av OSGi System Services:

Systemtjänster Beskrivning
Skogsavverkning Loggningen av information, varningar , felsökningsinformation eller fel hanteras via Loggtjänsten. Den tar emot loggposter och skickar sedan dessa till andra paket som prenumererar på denna information.
Konfiguration Admin Den här tjänsten tillåter en operatör att ställa in och hämta konfigurationsinformationen för distribuerade paket
Enhetsåtkomst Underlättar koordineringen av automatisk detektering och anslutning av befintliga enheter. Detta används för Plug and Play-scenarier.
Användaradmin Den här tjänsten använder en databas med användarinformation (privat och offentlig) för autentiserings- och auktoriseringssyften.
IO-kontakt IO Connector Service implementerar CDC / CLDC javax.microedition.io -paketet som en tjänst. Denna tjänst tillåter paket att tillhandahålla nya och alternativa protokollscheman.
Inställningar Erbjuder en alternativ, mer OSGi-vänlig mekanism till att använda Javas standardegenskaper för att lagra inställningar.
Komponentkörtid Tjänsternas dynamiska natur – de kan komma och gå när som helst – gör det svårare att skriva programvara. Component Runtime-specifikationen kan förenkla hanteringen av dessa dynamiska aspekter genom att tillhandahålla en XML-baserad deklaration av beroenden.
Implementeringsadministratör Standardiserar tillgången till en del av förvaltningsagentens ansvarsområden.
Event Admin Tillhandahåller en inter-bundle-kommunikationsmekanism baserad på en publicera-och-prenumerera-modell.
Applikationsadministratör Förenklar hanteringen av en miljö med många olika typer av applikationer som är tillgängliga samtidigt.

Tabellen nedan visar en beskrivning av OSGi Protocol Services:

Protokolltjänster Beskrivning
HTTP-tjänst Tillåter att information skickas och tas emot från OSGi med hjälp av HTTP .
UPnP-enhetstjänst Specificerar hur OSGi-paket kan utvecklas för att samverka med UPnP-enheter ( Universal Plug and Play) .
DMT Admin Definierar ett API för att hantera en enhet med hjälp av koncept från Open Mobile Alliance ( OMA) enhetshanteringsspecifikationer.

Tabellen nedan visar en beskrivning av OSGi Diverse tjänster:

Diverse tjänster Beskrivning
Wire Admin Tillåter kopplingen mellan en producenttjänst och en konsumenttjänst.
XML Parser Tjänsten XML Parser tillåter ett paket att hitta en parser med önskade egenskaper och kompatibilitet med JAXP .
Mätning och tillstånd Tjänsten Mätning och tillstånd möjliggör och förenklar korrekt hantering av mätningar i en OSGi tjänsteplattform.

Organisation

OSGi Alliance grundades av Ericsson , IBM , Motorola , Sun Microsystems och andra i mars 1999. Innan den bildades som ett ideellt företag, kallades det Connected Alliance.

Bland dess medlemmar finns (från och med februari 2015) mer än 35 företag från ganska olika affärsområden, till exempel Adobe Systems , Deutsche Telekom , Hitachi , IBM , Liferay , Makewave, NEC , NTT , Oracle , Orange SA , ProSyst , Salesforce , Siemens , Software AG och TIBCO Software .

Alliansen har en styrelse som tillhandahåller organisationens övergripande styrning. OSGi-officerare har olika roller och ansvar för att stödja alliansen. Det tekniska arbetet bedrivs inom expertgrupper (EG) som är stadgade av styrelsen, och icke-tekniskt arbete bedrivs i olika arbetsgrupper och kommittéer. Det tekniska arbetet som utförs inom expertgrupper inkluderar utveckling av specifikationer, referensimplementeringar och efterlevnadstester. Dessa expertgrupper har producerat fem stora utgåvor av OSGi-specifikationerna (från och med 2012).

Dedikerade expertgrupper finns för företags-, mobil-, fordons- och kärnplattformsområdena.

Enterprise Expert Group (EEG) är den nyaste EG och vänder sig till Enterprise/Server-side-applikationer. I november 2007 började Residential Expert Group (REG) arbeta med specifikationer för att fjärrstyra bostads-/hemgateways. I oktober 2003 Nokia , Motorola , IBM , ProSyst och andra OSGi-medlemmar en Mobile Expert Group (MEG) som kommer att specificera en MIDP -baserad tjänsteplattform för nästa generation av smarta mobiltelefoner, och tillgodose några av de behov som CLDC inte kan hantera - annat än CDC . MEG blev en del av OSGi som med R4.

Specifikationsversioner

  • OSGi Release 1 (R1): maj 2000
  • OSGi Release 2 (R2): oktober 2001
  • OSGi Release 3 (R3): Mars 2003
  • OSGi Release 4 (R4): oktober 2005 / september 2006
    • Kärnspecifikation (R4 Core): oktober 2005
    • Mobilspecifikation (R4 Mobile / JSR-232): september 2006
  • OSGi Release 4.1 (R4.1): maj 2007 (AKA JSR-291)
  • OSGi Release 4.2 (R4.2): September 2009
    • Enterprise Specification (R4.2): Mars 2010
  • OSGi Release 4.3 (R4.3): april 2011
    • Kärna: april 2011
    • Kompendium och bostäder: maj 2012
  • OSGi Release 5 (R5): juni 2012
    • Core and Enterprise: juni 2012
  • OSGi Release 6 (R6): juni 2015
    • Kärna: juni 2015
  • OSGi Release 7 (R7): April 2018
    • Kärna och kompendium: april 2018
  • OSGi Release 8 (R8): December 2020

Relaterade standarder

Projekt som använder OSGi

Nuvarande ramverksimplementeringar

namn Licens
Apache Felix Öppen källa
Apache Karaf Öppen källa
Concierge OSGi Öppen källa
Equinox OSGi Öppen källa
Eclipse Tvillingarna Öppen källa
Knopflerfish Öppen källa

Se även

Vidare läsning

externa länkar