Hai già il tuo software in atto, ma hai ancora bisogno di un metodo più efficace per consentire ai tuoi utenti tecnici di espandere la piattaforma.
Anche se OSGi è noto alla maggior parte degli sviluppatori Java, integrarlo nel tuo prodotto può sembrare un compito arduo. La mancanza di chiarezza sul preciso funzionamento di OSGi confonde ulteriormente la strada da seguire.
Contrariamente a qualsiasi cosa con cui vorrebbero sperimentare, OSGi sembra più come tentare di navigare in mare aperto per molti sviluppatori Java.
Questo articolo ti introdurrà al tutorial primaverile di OSGi Felix utilizzando un programma semplice e ti spiegherà i suoi vantaggi e altri dettagli importanti.
Allora, cos'è OSGi?
La creazione e la distribuzione di moduli e componenti è resa possibile dal framework Java noto come OSGi (Open Service Gateway Initiative).
Enfatizza l'incapsulamento delle funzioni e l'accoppiamento libero, che offre numerosi vantaggi agli sviluppatori, inclusa la funzionalità modulare che è prontamente trasferibile tra codici sorgente e test che non richiedono dipendenze infinite.
Come funziona OSGi?
Un sistema di componenti dinamici per Java è definito da un insieme di specifiche chiamate OSGi. Queste specifiche consentono un approccio di sviluppo in cui un'applicazione viene creata da un numero di parti e quindi impacchettata in bundle.
I servizi locali e basati sulla rete vengono utilizzati da questi componenti per comunicare. L'obiettivo è rendere il codice di base del programma il più compatto possibile. È possibile un elevato accoppiamento tra questo codice e diversi componenti.
Gli elementi di costruzione riutilizzabili dell'applicazione sono chiamati componenti. Pensa a funzionalità come un carrello degli acquisti per il tuo sito di e-commerce o un'applicazione per le buste paga per il tuo sistema di gestione del personale.
I componenti possono utilizzare OSGi per nascondere le loro implementazioni da altri componenti e fornire loro solo i dati necessari tramite i servizi.
Ciò impedisce ai componenti di modificare involontariamente dati a cui non dovrebbero avere accesso e gestisce le dipendenze.
Tutte le connessioni tra i componenti in un'applicazione OSGi vengono effettuate tramite servizi in un mondo ideale. Un pacchetto Java contiene l'API specificata per i servizi.
La collaborazione tra fornitori di servizi e clienti richiede l'utilizzo di classi e/o interfacce, che costituiscono l'API.
Tutti i componenti OSGi sono impacchettati insieme in bundle, ognuno dei quali include le risorse necessarie per funzionare. I bundle sono abbastanza chiari su ciò di cui hanno bisogno dall'ambiente e di cosa sono capaci.
Benefici
- Le applicazioni OSGi hanno accesso a repository di bundle esterni.
- Il framework consente una progettazione orientata ai servizi a livello di modulo.
- Consente di gestire le versioni e le dipendenze dei bundle di applicazioni oltre a standardizzare e semplificare l'integrazione di librerie di terze parti.
- Le applicazioni sono più adattabili alle mutevoli esigenze, più portatili e più veloci da riprogettare.
- A web application può essere distribuito come un gruppo di bundle OSGi con versione con una durata dinamica grazie all'integrazione del framework con il modello di programmazione Java EE.
- Invece di essere installato come libreria di terze parti come parte dell'applicazione, il framework fornisce l'assembly dichiarativo e lo unit test semplificato di Spring Framework in una forma standardizzata fornita come parte del runtime del server delle applicazioni.
- Per le applicazioni aziendali costituite da diversi bundle con versioni con cicli di vita dinamici, il framework offre isolamento.
- Contiene un repository di bundle integrato che può archiviare bundle condivisi comuni e con versione utilizzati da diverse applicazioni, impedendo a ciascuna applicazione di distribuire una copia separata di ciascuna libreria condivisa.
Iniziare con OSGi Felix primavera
Ottenere le risorse
Scaricando la versione più recente di Apache Karaf da questo sito, possiamo iniziare la nostra avventura OSGi.
Basato su Apache Felix, l'implementazione Apache della specifica OSGi, Apache Karaf fornisce una piattaforma per applicazioni basate su OSGi.
Karaf fornisce varie funzioni utili oltre a Felix che ci aiuteranno a familiarizzare con OSGi, come un'interfaccia a riga di comando che ci consentirà di comunicare con la piattaforma.
Punto di ingresso per i pacchetti
Un'applicazione deve essere impacchettata come bundle OSGi prima di poter essere eseguita in un ambiente OSGi. Inoltre, è necessario specificare il punto di ingresso dell'applicazione; non è la funzione standard public static void main(String[] args).
Quindi iniziamo creando un "Ciao a tutti” applicazione basata su OSGi.
Iniziamo stabilendo una dipendenza API OSGi di base:
Il runtime OSGi avrà accesso alla dipendenza, quindi il bundle non ha bisogno di contenerla. Pertanto, è contrassegnato come fornito.
Ora creiamo la semplice classe HelloWorld:
Le classi che fungono da punti di ingresso per i bundle devono implementare l'interfaccia BundleActivator fornita da OSGi.
Quando viene avviato il bundle contenente questa classe, la piattaforma OSGi chiama la funzione start(). Dall'altro lato, poco prima dell'arresto del bundle, viene chiamata la funzione stop().
Non dimentichiamo che ogni bundle può avere un solo BundleActivator. Entrambi i modi possono comunicare con il runtime OSGi utilizzando l'oggetto BundleContext fornito.
Creazione di un pacchetto
Rendi pom.xml un vero bundle OSGi apportando le modifiche necessarie.
Dobbiamo prima esprimere chiaramente che il nostro obiettivo è produrre un bundle.
Quindi, utilizziamo il plugin maven-bundle per impacchettare la classe HelloWorld come bundle OSGi, per gentile concessione della comunità di Apache Felix:
I valori delle intestazioni OSGi che desideriamo includere nel file MANIFEST del bundle sono specificati nella sezione delle istruzioni.
Bundle-Activator è infatti il nome correttamente qualificato della soluzione BundleActivator che verrà utilizzata per avviare e arrestare il bundle. È compatibile con la classe appena creata.
Sebbene non sia un'intestazione OSGi, l'intestazione Private-Package indica al plug-in di aggiungere il pacchetto al pacchetto ma semplicemente di non renderlo accessibile ad altri plug-in. Il comando mvn install dovrebbe essere utilizzato per creare il bundle.
Installazione ed esecuzione del pacchetto
Iniziamo Karaf eseguendo questo comando:
dove "KARAF HOME" si riferisce alla cartella in cui è stato impostato Karaf. Possiamo utilizzare il seguente comando per installare il pacchetto quando viene visualizzato il prompt della console di Karaf:
L'uso del repository Maven locale è il modo in cui viene detto a Karaf di caricare il bundle.
Restituendo l'ID numerico del pacchetto, Karaf lo scrive. Questo ID potrebbe differire a seconda di quanti bundle sono stati installati in precedenza. Il bundle è stato ora installato correttamente e il comando per avviarlo è il seguente:
Nel momento in cui avvii il pacchetto, viene visualizzato "Hello World by Jay". Ora possiamo fermare e rimuovere il pacchetto usando:
La console mostra "Goodbye World by Jay".
Conclusione
Gli sviluppatori possono facilmente aggiungere nuove funzionalità a un'applicazione Web esistente mantenendola sicura e isolata da altri componenti del programma principale utilizzando OSGi.
Abbiamo appreso di OSGi in questo post, incluso come funziona, i suoi vantaggi e un programma semplice. Non è difficile incorporare OSGi nella tua applicazione.
Buona programmazione!
Lascia un Commento