Ciao OSGi, parte 1: pacchetti per principianti

L'Open Services Gateway Initiative (OSGi) definisce un'architettura per lo sviluppo e la distribuzione di applicazioni e librerie modulari. In questo primo articolo in un'introduzione in tre parti a OSGi, Sunil Patil ti fa iniziare con i concetti di sviluppo OSGi e ti mostra come creare una semplice applicazione Hello World utilizzando l'implementazione del contenitore OSGi Eclipse, Equinox. Inoltre, tocca brevemente la creazione di applicazioni orientate ai servizi utilizzando OSGi e introduce OSGi ServiceFactorye ServiceTrackerclassi.

L'Open Services Gateway Initiative (OSGi), noto anche come Dynamic Module System per Java, definisce un'architettura per lo sviluppo di applicazioni modulari. Le implementazioni di container OSGi come Knopflerfish, Equinox e Apache Felix ti consentono di suddividere l'applicazione in più moduli e quindi gestire più facilmente le dipendenze incrociate tra di loro.

OSGi, Equinox e Project Jigsaw

Ottieni una visione del mondo reale studiando le lezioni apprese durante un'integrazione OSGi / Equinox nel più grande progetto scientifico del Regno Unito, quindi scopri cosa puoi aspettarti da Project Jigsaw in Java 9.

Simile alle specifiche Java Servlet ed EJB, la specifica OSGi definisce due cose: un insieme di servizi che un contenitore OSGi deve implementare e un contratto tra il contenitore e l'applicazione. Sviluppare sulla piattaforma OSGi significa prima costruire la tua applicazione utilizzando le API OSGi, quindi distribuirla in un contenitore OSGi. Dal punto di vista dello sviluppatore, OSGi offre i seguenti vantaggi:

  • È possibile installare, disinstallare, avviare e arrestare dinamicamente diversi moduli dell'applicazione senza riavviare il contenitore.
  • La tua applicazione può avere più di una versione di un particolare modulo in esecuzione allo stesso tempo.
  • OSGi fornisce un'ottima infrastruttura per lo sviluppo di applicazioni orientate ai servizi, nonché app integrate, mobili e Internet avanzate.

Dato che si utilizzano contenitori servlet per la creazione di applicazioni Web e contenitori EJB per la creazione di applicazioni transazionali, ci si potrebbe chiedere perché è necessario un altro tipo di contenitore. La risposta breve è che i contenitori OSGi sono destinati specificamente allo sviluppo di applicazioni Java complesse che si desidera suddividere in moduli. Espanderò questa breve risposta in questa serie.

Ciao, OSGi: leggi la serie

  • Parte 1: pacchetti per principianti
  • Parte 2: Presentazione dei moduli dinamici di primavera
  • Parte 3: portalo sul lato server

OSGi nelle applicazioni aziendali

Il lavoro sulla specifica OSGi è stato avviato da OSGi Alliance nel marzo 1999. Il suo obiettivo principale era creare una specifica aperta per fornire servizi gestiti a reti e dispositivi locali. L'idea di base è che una volta aggiunta una OSGi Service Platform a un dispositivo in rete (sia incorporato che server), dovresti essere in grado di gestire il ciclo di vita dei componenti software in quel dispositivo da qualsiasi punto della rete. I componenti software possono essere installati, aggiornati o rimossi al volo senza dover interrompere il funzionamento del dispositivo.

Per anni, la tecnologia OSGi è fiorita nel mercato dei sistemi embedded e dei dispositivi di rete. Ora, grazie in parte a Eclipse, OSGi sta emergendo come una tecnologia valida e valida per lo sviluppo aziendale.

Supporto in crescita per OSGi

Nel 2003, il team di sviluppo di Eclipse ha iniziato a cercare modi per rendere Eclipse una piattaforma rich client più dinamica e aumentare la modularità del set di strumenti. Alla fine, il team ha deciso di utilizzare il framework OSGi come modello di componenti di runtime. Eclipse 3.0, rilasciato nel giugno 2004, è stata la prima versione di Eclipse basata su OSGi.

Quasi tutti i server delle applicazioni aziendali supportano o prevedono di supportare OSGi. Il framework Spring supporta anche OSGi, tramite il progetto Spring Dynamic Modules for OSGi Service Platforms, che fornisce un livello infrastrutturale per rendere più semplice l'utilizzo di OSGi nello sviluppo di applicazioni aziendali Java basate su Spring.

Contenitori OSGi open source

Dal punto di vista di uno sviluppatore aziendale, il contenitore OSGi ha un'impronta così ridotta che è possibile incorporarlo facilmente in un'applicazione aziendale. Ad esempio, supponiamo che tu stia sviluppando un'applicazione Web complessa. Si desidera suddividere l'applicazione in più moduli: un modulo per il livello di visualizzazione, un altro per il livello DAO e un terzo modulo per il livello di accesso ai dati. L'utilizzo di un contenitore OSGi incorporato per gestire le dipendenze incrociate di questi moduli ti consentirebbe di aggiornare il livello DAO (ad esempio da DAO lento a DAO veloce) senza riavviare l'applicazione.

Finché l'applicazione è conforme alla specifica OSGi, dovrebbe essere in grado di funzionare in qualsiasi contenitore conforme a OSGi. Attualmente, ci sono tre popolari contenitori OSGi open source:

  • Equinox è l'implementazione di riferimento per la parte framework della OSGi Service Platform Release 4. È il runtime Java modulare al centro dell'IDE Eclipse e implementa tutte le caratteristiche obbligatorie e la maggior parte delle caratteristiche opzionali della specifica OSGi R4.
  • Knopflerfish è un'implementazione open source delle specifiche OSGi R3 e OSGi R4. Knopflerfish 2 implementa tutte le caratteristiche obbligatorie e alcune delle caratteristiche opzionali definite nella specifica R4.
  • Apache Felix è il contenitore OSGi open source di Apache Software Foundation. Al momento della scrittura di questo contenitore non è completamente conforme alla specifica OSGI R4.

In questo articolo useremo Equinox come nostro contenitore OSGi. Vedere la sezione Risorse per ulteriori informazioni su Apache Felix e Knopflerfish.