Il panorama open source si sta interessando molto alle specifiche OSGi, avendo sviluppato delle implementazioni fedeli alle specifiche. La prima ad essere analizzata sarà quella conosciuta come progetto Knoplerfish. Verrà poi il turno del progetto di Apache Foundation che prende il nome di Felix. In ultima battuta parleremo del cuore di Eclipse, il framework Equinox su cui il famoso IDE è basato.
Knoplerfish
Knoplerfish [1] è un’implementazione delle specifiche OSGi della quale Makewave [2], azienda scandinava con base a Gothenburg in Svezia, è sponsor e maggiore sostenitrice.
Il framework è disponibile nella sezione download ed è possibile scaricarlo in diverse distribuzioni:
- la versione tiny contiene solo il framework, molto leggero in termini di KB ma comunque con tutto il nucleo del framework;
- la versione completa contiene invece, oltre al nucleo, anche sorgenti e documentazione relativa alla tecnologia OSGi;
- è anche possibile scaricare una versione binaria del tutto identica alla versione completa, ma senza i sorgenti.
In questa sede verrà analizzata la distribuzione completa. Insieme al framework è compresa un applicazione desktop in grado di amministrare i bundle e che offre interessanti funzionalità a portata di click. Installare il framework è molto semplice, basta scaricarlo ed eseguire il comando
java -jar knopflerfish_osgi_[versione].jar
Un programma di installazione guiderà l’utente ad installare il framework nel sistema. Una volta installato il tutto, non resta che porsi nella directory contenente il framework e eseguire il comando
java -jar framework.jar
Verrà visualizzata la console di amministrazione dei bundle e da qui sarà possibile gestirli nella loro installazione, avvio e arresto: tutto in maniera visuale.
Figura 1 – Pannello di controllo Knoplerfish.
Tramite questa interfaccia, per ogni singolo bundle si ha la possibilità di:
- visualizzare i package importati ed esportati;
- visualizzare i servizi offerti;
- visualizzare il log;
- visualizzare gli eventi lanciati dal bundle;
- visualizzare il file di manifest.
Per quanto riguarda l’amministrazione generale dei bundle è invece possibile eseguire le seguenti operazioni:
- installazione
- avvio
- arresto
- disinstallazione
- aggiornamento
Questo strumento permette all’utente il completo controllo del framework con pochi click, evitando allo stesso di agire tramite console. Knoplerfish fornisce anche una serie di bundle “ready to go” in grado di provvedere a tutti i servizi di base a cui un programmatore è abituato: ad esempio, il servizio di logging, servizi server HTTP e SOAP. Sul sito è anche possibile trovare due esaurienti tutorial in grado di supplire alla curiosità dei programmatori che vogliano affacciarsi a questa tecnologia [7].
Apache Foundation: Felix
Felix [3] è l’implementazione OSGi di Apache Foundation. La comunità di Apache ha organizzato il progetto Felix in sottoprogetti, ognuno dei quali adempie a un compito ben preciso. Il cuore del progetto è il framework stesso, disponibile nella sezione download. Dopo averlo scaricato e scompattato, basta lanciare il comando Java posizionandosi all’interno della directory in cui si è decompresso il file scaricato precedentemente:
java -jar bin/felix.jar
In questo modo si entra all’interno del framework ed è possibile vedere una semplice console
Welcome to Felix ================ ->
Da qui possiamo digitare il comando “help” e vedere tutti i comandi disponibili. Uno dei comandi principali per installare un bundle è appunto il comando “install”. Per installare un bundle presente nel filesystem locale si può digitare:
-> install
Il bundle a questo punto è installato, e per vedere il suo stato è sufficiente digitare:
-> ps START LEVEL 1 ID Stat Level Name [ 0] [Active ] [ 0] System Bundle (2.0.0) [ 1] [Active ] [ 1] Shell Service (1.4.0) [ 2] [Active ] [ 1] Shell TUI (1.4.0) [ 3] [Active ] [ 1] Bundle Repository (1.4.0) [ 4] [Installed ] [ 1] Bundle Example (1.0.0) ->
Nella prima colonna si può identificare l’ID dei bundle, nella seconda lo stato, nella terza il livello e nell’ultima il loro nome.
Come si può notare, il bundle numero 4 è in stato “installed”. Lanciando il comando:
-> start [ID bundle]
Il bundle identificato dal suo ID verrà lanciato. Questi sono i passi iniziali per iniziare ad entrare nel mondo di Felix. Il progetto è corredato anche da ottimi tutorial [6].
Insieme al framework, sempre nella sezione download, è possibile trovare diversi bundle, esempi di implementazioni reali della tecnologia modulare che offre OSGi. Compresa nella stessa sezione, si può trovare una guida su come integrare Maven [8] e Felix, argomento quanto mai interessante. Esiste infatti un artefatto che, opportunamente configurato, facilita allo sviluppatore la creazione di bundle.
Equinox
Forse non tutti ne sono al corrente, ma OSGi è l’architettura su cui si basa uno degli IDE più utilizzati dalla comunità di sviluppatori Java: Eclipse [4]. Il progetto Eclipse è stato sviluppato interamente sul framework Equinox [5] ed è quindi un esempio completo di sviluppo “a bundle”, modulare, a componenti e a servizi: tutto quello che racchiude la tecnologia OSGi.
Equinox, nella fattispecie, si propone come framework definitivo in quanto porta in grembo un progetto delle dimensioni di Eclipse. Quelli che nella terminologia di Eclipse vengono chiamati plug-in non sono altro che bundle e seguono tutti gli standard e le caratteristiche degli stessi. È infatti grazie a questa tecnologia che diventa semplice sviluppare estensioni di Eclipse, agganciandosi alle funzionalità già offerte dall’IDE in modo da personalizzarne il comportamento.
Basta avviare Eclipse lanciandolo da linea di comando con il parametro “-console” per rendersi conto della presenza di OSGi. In questo modo, a fianco dell’IDE, si aprirà anche la console OSGi, e da qui sarà possibile amministrare i bundle disponibili nella distribuzione.
Il nucleo del framework si può trovare all’interno della directory plugins di Eclipse; il file in questione è chiamato org.eclipse.osgi.[versione].jar. Anche in questo caso è sufficiente lanciare il comando
java -jar org.eclipse.osgi.[versione].jar
per entrare nel mondo di Equinox.
Il framework predispone una console con i soliti comandi per l’amministrazione dei bundle.
Molto più evoluto può essere invece lo sviluppo di bundle grazie ad Eclipse. Esso infatti offre un plug-in chiamato PDE (Plug-in Development Environment) grazie al quale è possibile creare da zero un bundle con l’ausilio del’IDE stesso. Installato PDE, nella sezione new wizard di Eclipse, si trova il wizard per la creazione di un nuovo progetto plug-in, che altro non è che un bundle nell’accezione OSGi.
Figura 2 – Project Wizard di Eclipse per la creazione di plug-in.
Oltre alla struttura file prevista dal progetto, il wizard creerà anche un file manifest facilmente editabile grazie al multieditor di Eclipse.
Figura 3 – Eclipse multieditor per i file manifest dei bundle.
Un’importante funzionalità di PDE è la possibilità di convertire qualsiasi progetto Java in un bundle. Basta infatti selezionare con il mouse la directory root del progetto, clickare con il tasto destro e scegliere dal menu a tendina configure->convert to Plug-in Projects… In seguito basterà solamente configurare il file manifest e il bundle sarà pronto a essere integrato in progetti OSGi futuri.
Conclusioni
La tecnologia OSGi conosce già tre importanti implementazioni: Knoplerfish, Apache Felix ed Equinox.
Il primo è in grado di fornire un’interfaccia utente molto facile da utilizzare per l’amministrazione dei bundle; il secondo è molto leggero e semplice da utilizzare; il terzo è un esempio completo di come la programmazione modulare e a servizi possa rendere semplice l’integrazione di nuove funzionalità all’interno di una realtà già affermata, come Eclipse. Ognuno dei tre offre caratteristiche diverse ma per un unico scopo: usufruire della potenza di questa tecnica di programmazione che è OSGi.
Nel prossimo articolo affronteremo lo sviluppo di un esempio in grado di mostrare tutte le potenzialità di OSGi.
Riferimenti
[1] Knoplerfish
[2] Makewave
[3] Apache Felix
http://felix.apache.org/site/index.html
[4] Eclipse
[5] Equinox
http://www.eclipse.org/equinox/
[6] Apache Felix OSGi Tutorial
http://felix.apache.org/site/apache-felix-osgi-tutorial.html
[7] Knoplerfish Tutorial
http://www.knopflerfish.org/releases/2.3.3/docs/tutorials.html
[8] Apache Maven