Teil 4 der Axis2-Serie

Axis2 und OSGi, wie geht das?

Marc Teufel

Im Axis2-Projekt arbeitet man bereits daran, den Axis2-Kernel in OSGi-Laufzeitumgebungen installieren und betreiben zu können. In diesem Beitrag zeigen wir, wie weit diese OSGi-Integration bereits vorangetrieben wurde und wie man Axis2 in Eclipse Equinox als OSGi-Laufzeitumgebung betreiben kann.

Über OSGi wurde in letzter Zeit viel geschrieben und diskutiert. Zurecht, denn die Idee dahinter scheint ein für die Praxis tragfähiges Konzept zu sein: Software lässt sich in Komponenten aufteilen und läuft in Form so genannter Bundles in einem OSGi-konformen Container. Dieser wiederum ist in der Lage, Bundles in verschiedenen Versionen zu verwalten, Abhängigkeiten aufzulösen und sogar einzelne Bundles zur Laufzeit auszutauschen.

Den Ritterschlag erhielt OSGi vermutlich mit seinem Einsatz im Eclipse-Projekt, durch die Implementierung Equinox. Doch dass OSGi auch im Serverbereich, also im Umfeld von JEE, interessant sein kann, das ist ein neuer Trend. Denn gerade beim Einsatz von OSGi auf Serverseite tun sich ganz neue Möglichkeiten auf: Wurden früher JEE-Anwendungen in Form monolithischer EAR- oder WAR-Archive in den entsprechenden Applikationsserver deployt, so lassen sich diese Anwendungen heutzutage mithilfe von OSGi modularisieren und, in Komponenten aufgeteilt, als Bundle oder Satz von Bundles einspielen.

Das eher knorrige EAR- oder WAR-Archiv wird also aufgeweicht, und Einzelkomponenten daraus können zur Laufzeit, ohne dass die Anwendung gestoppt werden muss, ausgetauscht werden. Entsprechende Integration diverser Servlet-Container wie Tomcat oder Jetty in OSGi-Laufzeitumgebungen ist bereits heute verfügbar. Produkte wie der Spring dm Application Server zeigen klar, in welche Richtung wir uns bewegen.

Axis2 und Abhängigkeiten müssen als Bundles vorliegen

Um ebenfalls am aufkommenden OSGi-Markt vertreten zu sein, entschloss man sich, das Axis2-Projekt ebenfalls in Form von OSGi-Bundle(s) auszuliefern. Und obwohl diese Bemühungen gerade erst gestartet wurden, kann man bereits heute erste Ergebnisse sehen und sogar ausprobieren. Einen Haken hat die Sache allerdings noch: Sämtliche Ressourcen (Sourcen, Bundles etc.) muss man sich derzeit selbst mithilfe von Maven bauen. Hierzu muss man zunächst den Axis2-Quellcode mittels Subversion auschecken und einen entsprechenden Build-Prozess starten, an dessen Ende das Axis2-Bundle (org.apache.axis2.osgi.jar) entsteht. Damit ist es allerdings noch nicht getan, denn Axis2 besitzt einige Abhängigkeiten zu externen Bibliotheken, die natürlich ebenfalls in Form von Bundles vorliegen müssen. Hierzu gehören Bibliotheken wie AXIOM und Commons Logging. Einige dieser Bibliotheken liegen glücklicherweise schon als OSGi-Bundle in Maven-Repositories vor, andere müssen wiederum selbst in ein OSGi-konformes Format gebracht werden. Tabelle 1 fasst alle abhängigen Bibliotheken zusammen und zeigt außerdem, welche Bibliothek bereits als OSGi Bundle verfügbar ist. Für diejenigen Bibliotheken, die noch nicht als Bundle zur Verfügung stehen, gibt es ebenfalls die Möglichkeit, mithilfe von Maven einen entsprechenden Build-Prozess zu starten, der die Bundles dann erzeugt. Eine detaillierte Beschreibung zum Build-Prozess findet sich unter anderem hier.

Bibliothek Bundle verfügbar Bundle in Maven2 Repository verfügbar
Commons Logging Nein Nein
Servlet API Nein Nein
Annogen Nein Nein
Ant Nein Nein
Axiom Ja Nein
Commons Codec Nein Nein
Commons File Upload Nein Nein
Commons HttpClient Nein Nein
Geronimo StaX Ja Ja
Geronimo WS-Metadata Ja Ja
HttpCore Nein Nein
Neethi Ja Nein
WSDL4J Nein Nein
WSTX-ASL Nein Nein
XmlSchema Ja Ja
Commons IO Nein Nein
Xml APIs (Xerces) Nein Nein
Wooden Ja Nein
Geronimo Javamail Ja Ja
Geronimo Activation Ja Ja
DOM4J Nein Nein
Jaxen Nein Nein

Tabelle 1: Abhängige Bibliotheken zum Betrieb von Axis2 in OSGi, die Abhängigkeiten müssen ebenfalls als Bundles vorliegen (Quelle: Axis2 SVN-Repo und SVNApache.org)

Geschrieben von
Marc Teufel
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.