OSGi
Året började | 1999 |
---|---|
Senaste versionen |
8.0 oktober 2020 |
Organisation | OSGi Alliance |
Domän | Java |
Licens | OSGi-specifikationslicens, version 2.0 |
Hemsida |
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 ä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:
- CDC-1.0/Foundation-1.0
- CDC-1.1/Foundation-1.1
- OSGi/Minimum-1.0
- OSGi/Minimum-1.1
- JRE-1.1
- Från J2SE-1.2 upp till J2SE-1.6
Buntar
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:
- Bundle-Name: Definierar ett mänskligt läsbart namn för denna bunt, tilldelar helt enkelt ett kort namn till bunten.
- 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 ).
- Bundle-Description: En beskrivning av buntens funktionalitet.
- Bundle-ManifestVersion: Indikerar OSGi-specifikationen som ska användas för att läsa detta paket.
- Bundle-Version: Anger ett versionsnummer för bunten.
- Bundle-Activator: Indikerar klassnamnet som ska anropas när en bunt aktiveras.
- Exportpaket: Uttrycker vilka Java-paket som ingår i ett paket som kommer att göras tillgängliga för omvärlden.
- 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
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
- MHP / OCAP
- Universal Plug and Play (UPnP)
- DPWS
- ITU-T G.hn
- LonWorks
- CORBA
- CEBus
- EHS ( KNX ) / CECED KEDJA
- Java Management Extensions
Projekt som använder OSGi
- Adobe Experience Manager - ett innehållshanteringssystem för företag
- Apache Aries - Blueprint Container-implementeringar och tillägg av applikationsfokuserade specifikationer definierade av OSGi Enterprise Expert Group
- Apache Sling - OSGi-baserat applikationslager för JCR- innehållsförråd
- Atlassian Confluence och JIRA - plugin-arkitekturen för denna företagswiki och problemspårare använder OSGi
- Business Intelligence and Reporting Tools (BIRT)-projekt - Rapporteringsmotor med öppen källkod
- Cytoscape - en mjukvaruplattform för bioinformatik med öppen källkod (från och med version 3.0)
- DataNucleus - öppen källkodsdatatjänster och persistensplattform i tjänsteorienterade arkitekturer
- DDF - Distributed Data Framework tillhandahåller gratis dataintegration med öppen källkod
- Dotcms - webbinnehållshantering med öppen källkod
- EasyBeans - öppen källkod EJB 3-behållare
- Eclipse - öppen källkod IDE och rik klientplattform
- iDempiere - är en OSGi-implementering av open source ERP Branch GlobalQSS Adempiere 361 som ursprungligen startade av Low Heng Sin
- Eclipse Virgo - mikrokärnbaserad server med öppen källkod som är konstruerad av OSGi-paket och stöder OSGi-applikationer
- GlassFish (v3) - applikationsserver för Java EE
- Fuse ESB - en produktiserad och stödd version av ServiceMix 4.
- Integrated Genome Browser - ett skrivbordsgränssnitt med öppen källkod för att visualisera, utforska och analysera genomdata
- IntelliJ - Java IDE och rik klientplattform med gratis community-utgåva
- JBoss - Red Hats JBoss Application Server
- JOnAS 5 - öppen källkod Java EE 5 applikationsserver
- JOSSO 2 - Atricores standardbaserade identitets- och åtkomsthanteringsplattform med öppen källkod
- Liferay Dxp - öppen källkod och kommersiell portalplattform använder OSGi från version 7.x.
- Lucee 5 - öppen källkod CFML Web Application Server
- NetBeans - öppen källkod IDE och rik klientplattform
- Nuxeo - öppen källkod ECM Service Platform
- Open Daylight Project - Projekt med målet att påskynda införandet av mjukvarudefinierade nätverk
- OpenEJB - öppen källkod OSGi-aktiverad EJB 3.0-behållare som kan köras både i fristående eller inbäddat läge
- openHAB - programvara för hemautomatisering med öppen källkod
- OpenWorm - simulering av programvara med öppen källkod av C. elegans , via den dedikerade Geppetto modulära plattformen
- Akana - API Gateway, Portal och Analytics-server från Akana (tidigare SOA Software)
- Weblogic - Oracle Weblogic Application Server
- WebSphere - IBM Websphere JEE Application Server
- WebMethods - SoftwareAG WebMethods
- WSO2 Carbon - Basplattform för WSO2:s företagsklassade mellanprogramstack med öppen källkod
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
- Cummins, Holly; Ward, Tim (28 mars 2013), Enterprise OSGi in Action (1:a upplagan), Manning Publications , sid. 376, ISBN 978-1617290138
- Alves, Alexandre de Castro (28 juli 2011), OSGi in Depth (1:a upplagan), Manning Publications , sid. 325, ISBN 978-1-935182-17-7
- McAffer, Jeff; VanderLei, Paul; Archer, Simon (24 februari 2010), OSGi and Equinox: Creating Highly Modular Java Systems (1:a upplagan), Addison-Wesley Professional , sid. 460, ISBN 978-0-321-58571-4
- Joseph Gédéon, Walid (5 november 2010), OSGi och Apache Felix 3.0 Nybörjarguide (1:a upplagan), Packt Publishing , sid. 336, ISBN 978-1-84951-138-4
- Walls, Craig (juli 2009), Modular Java with OSGi and Spring (1:a upplagan), Pragmatic Bookshelf, sid. 250, ISBN 978-1-934356-40-1 , arkiverad från originalet 2011-05-30 , hämtad 2009-02-19
- Hall, Richard S; Pauls, Karl; McCulloch, Stuart (september 2009), OSGi in Action (1:a upplagan), Manning Publications , sid. 375, ISBN 978-1-933988-91-7
- Alves, Alexandre de Castro (mars 2009), OSGi Application Frameworks (1:a upplagan), Manning Publications , sid. 325, ISBN 978-1-935182-17-7
- Bartlett, Neil (2009-01-10), OSGi In Practice (PDF) (UTKAST ed.), sid. 229, arkiverad från originalet (PDF) 2012-02-16 , hämtad 2009-06-11
- McAffer, Jeff; VanderLei, Paul; Archer, Simon (7 september 2009), Equinox and OSGi: The Power Behind Eclipse (1:a upplagan), Addison-Wesley Professional , sid. 480, ISBN 978-0-321-58571-4
- Mak, Gary (2009), Pro SpringSource dm Server , Apress , sid. 250, ISBN 978-1-4302-1640-7 , arkiverad från originalet 2010-12-05 , hämtad 2008-12-28
- Rubio, Daniel (2009-02-12), Pro Spring Dynamic Modules for OSGi Service Platforms (Första upplagan), Apress , s. 392 , ISBN 978-1-4302-1612-4
- The OSGi Alliance (2003), OSGi Service Platform, Release 3 , IOS Press, sid. 604, ISBN 1-58603-311-5
- OSGi Service Platform, Core Specification, Release 4, Version 4.1 , OSGi Alliance., 2007, sid. 228, ISBN 978-90-79350-01-8
- OSGi Service Platform, Core Specification, Release 4, Version 4.2 , OSGi Alliance., 2009, sid. 332, ISBN 978-90-79350-04-9
- OSGi Service Platform, Service Compendium, Release 4, Version 4.1 , OSGi Alliance., 2007, sid. 594, ISBN 978-90-79350-02-5
- OSGi Service Platform, Mobile Specification, Release 4, Version 4 , OSGi Alliance., 2007, sid. 426, ISBN 978-90-79350-03-2
- Kirk Chen, Li Gong. (2001), Programming Open Service Gateways with Java Embedded Server(TM) Technology , Prentice Hall PTR, sid. 480, ISBN 0-201-71102-8
- Kayode Odeyemi (2010), bygga en OSGI-deklarativ tjänst med Maven med hjälp av Netbeans
- BJ Hargrave (IBM) (2011), OSGi 4.3 Teknisk uppdatering: Vad är nytt? , The Eclipse Foundation, arkiverad från originalet 2011-06-21 , hämtad 2011-06-11
externa länkar
- Officiell hemsida
- Oredev 2008 - Arkitektur - OSGi Nu och imorgon
- Eclipse Equinox Article Index - Artiklar om en OSGi-implementering med öppen källkod