Per creare il classico bundle hello-world
utilizziamo un archetype org.apache.karaf.archetypes
di Maven.
mvn archetype:generate
-DarchetypeGroupId=org.apache.karaf.archetypes
-DarchetypeArtifactId=karaf-bundle-archetype
-DarchetypeVersion=2.2.11
-DgroupId=it.html.tutorial
-DartifactId=karaf-helloworld
-Dversion=1.0
-Dpackage=it.html.tutorial.karaf.helloworld
Il progetto generato contiene esclusivamente la classe Activator
, alla quale aggiungiamo semplicemente una stampa a video di un messaggio che ci notifica lo start e lo stop del bundle.
package it.html.tutorial.karaf.helloworld;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
public void start(BundleContext context) {
System.out.println("Html.it, hello world START");
}
public void stop(BundleContext context) {
System.out.println("Html.it, hello world STOP");
}
}
Un bundle è un archivio jar contenente informazioni aggiuntive nel suo file MANIFEST.MF
. Per automatizzare la creazione di questo file, utilizziamo il plugin org.apache.felix/maven-bundle-plugin
che permette di produrre tale file inserendo la configurazione direttamente nel descrittore pom.xml
. Nel caso del nostro progetto configureremo il plugin aggiungendo il seguente blocco xml.
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Bundle-Activator>it.html.tutorial.karaf.helloworld.Activator</Bundle-Activator>
<Export-Package>
it.html.tutorial.karaf.helloworld*;version=${project.version}
</Export-Package>
<Import-Package>
*
</Import-Package>
</instructions>
</configuration>
</plugin>
A questo punto è sufficiente lanciare il commando install
di Maven per generare il nostro bundle corredato di MANIFEST
.
mvn clean install
Al termine della procedura di installazione, nella cartella target
del nostro progetto, troviamo il bundle karaf-helloworld-1.0.jar
. Se esploriamo il pacchetto con il programma 7-zip (o altre soluzioni simili per la gestione degli archivi compressi) possiamo notare la presenza del file META-INF/MANIFEST.MF
. Contemporaneamente Maven ha installato il modulo all’interno del nostro repository locale.
Il percorso di default del repository Maven è il seguente: ${user.home}/.m2/repository
. Nella sottodirectory ./it/html/tutorial/karaf-helloworld/1.0/
troviamo il nostro karaf-helloworld-1.0.jar
. Installiamo il bundle all’interno di Karaf utilizzando il Maven URI così costituito:
karaf@root()> bundle:install mvn:it.html.tutorial/karaf-helloworld/1.0
Bundle ID: 90
Se proviamo a visualizzare la lista dei bundle troviamo il nostro helloworld
.
karaf@root()> bundle:list -t 80
Il bundle risulta nello "stato" installato., avviamolo quindi usando il comando bundle:start
:
karaf@root()> bundle:start 90
Html.it, hello world START
Lo "stato" risulterà ora attivo.
karaf@root()> bundle:list -t 80
Per arrestare il bundle sarà invece necessario il comando bundle:stop
. Una volta creato il nostro primo bundle sarà possibile passare alla fase successiva di questa trattazione, l'analisi delle feature.