In questo articolo vedremo come effettuare il deploy di una web application su JBoss 7.1.1 dopo averla trasformata in un bundle OSGI. In gergo si parla di modulo WAB (web archive bundle).

Preparate la vostra web application così come siete abituati a fare, ad esempio con il wizard di Eclipse per le “dynamic web application”. Create le vostre servlet e le vostre jsp. Aggiungete eventuali librerie esterne. Insomma procedete come fareste normalmente.

Una volta che il nostro modulo WAR è bello e pronto, andiamo a modificare il file manifest presente nella cartella META-INF. Ecco un esempio:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: TestWeb
Bundle-SymbolicName: TestWeb
Bundle-Version: 1.0.0
Bundle-ClassPath: .,WEB-INF/classes/
Import-Package: javax.servlet.http;version=”2.5″, javax.servlet;version=”2.5″, org.osgi.framework;version=”1.3.0″
Web-ContextPath: TestWeb

Come potete vedere, il manifest non presenta particolari differenze rispetto a quanto visto nel precedente tutorial. Anche in questo caso dobbiamo impostare il classpath, i package da importare e tutto il resto. Unica novità il “Web-ContextPath” che ovviamente definisce il context da richiamare per poter accedere all nostra applicazione.
State attenti che, da quanto ho capito, al momento i WAB non funzionano con le specifiche 3.0 delle Servlet, quindi occorre usare le specifiche 2.5 e utilizzare il web.xml.
Per il resto non avete altro da fare alla vostra applicazione web, per trasformarla in un WAB OSGI occorre solo aggiongere le meta informazioni nel file manifest.

Resta adesso un piccolo punto.
JBoss 7 espone i WAB su Jetty alla porta 8090 quindi dovete attivare il server per poter così accedere alla vostra applicazione su http://localhost:8090/TestWeb.
Per fare questo è sufficiente modificare la configurazione del “subsystem” urn:jboss:domain:osgi:1.2 all’interno del file “standalone.xml” attivando alcune “capability”.
In particolare:

capability name=”org.ops4j.pax.web:pax-web-jetty-bundle:1.1.2″ startlevel=”1″
capability name=”org.ops4j.pax.web:pax-web-jsp:1.1.2″ startlevel=”1″
capability name=”org.ops4j.pax.web:pax-web-extender-war:1.1.2″ startlevel=”1″

Il gioco è fatto. Se adesso effettuate il deploy del WAB, lo troverete in stato active all’interno dei bundle OSGI e potrete collegarvi alla porta 8090 per accedere alla web applilcation.

Riferimenti:

http://www.javabeat.net/2011/11/writing-an-osgi-web-application/
http://www.osgi.org/Technology/WhatIsOSGi
http://www.osgi.org/Technology/HowOSGi
http://it.wikipedia.org/wiki/OSGi
http://www.vogella.com/articles/OSGi/article.html
https://docs.jboss.org/author/display/AS7/Helloworld+OSGi+quickstart
http://docs.jboss.org/author/display/JBOSGI/Developer+Documentation
http://jbossosgi.blogspot.it/2010/11/jboss-as7-osgi-integration.html
http://www.knopflerfish.org/osgi_service_tutorial.html
http://felix.apache.org/site/index.html