zurück zum Artikel

Ausritt mit Apache Geronimo 2.2

Frank Pientka

Nur kurz nach der Veröffentlichung der Java EE 6 ist ein neues Major Release des Apache-Applikationsservers Geronimo erschienen.

Nur kurz [1] nach der Veröffentlichung der neuen Enterprise-Java-Spezifikation, Java EE 6, ist ein neues Major Release des Apache-Applikationsservers Geronimo erschienen. Die Version 2.2 bewegt sich zwischen Java EE 5 und 6. heise Developer zieht eine Zwischenbilanz, wie sich der Geronimo in die Zukunft von Java einsortieren lässt.

Ehemalige JBoss-Entwickler begannen 2003 mit der Entwicklung des Geronimo-Anwendungsserver. Neben technischen Kontroversen spielten unterschiedliche Auffassungen über die richtige Lizenz eine Rolle für die Neuentwicklung eines weiteren freien Application Server. Statt der GNU Lesser General Public License (LGPL) bevorzugten die Entwickler die freiere und weniger restriktive Apache-Lizenz. Sie versprach breitere Einsatzmöglichkeiten, ist jedoch nicht kompatibel zur LGPL. Eine Software, die damit lizenzierten Code verwendet, muss man nicht erneut unter die Apache-Lizenz stellen. Außerdem erlaubt sie Veränderungen am Quellcode und die ausschließliche Weitergabe in Binärform, sofern Anwender die Lizenzbedingungen beifügen oder darauf hinweisen.

Von Geronimo verwendete Komponenten (Abb. 1)

Schon früh erreichte Geronimo die Kompatibilität mit den beiden "Java EE 6"-Vorgängern [1.4 (2005), 5.0 (2007)]. Das liegt einerseits an der großen Committer-Anzahl, andererseits an der Verwendung ausgereifter und verbreiteter Komponenten ("Best of Breed"-Ansatz) wie Jetty, Tomcat, Derby, Axis, OpenJPA, OpenEJB, um nur einige zu nennen. Als Integrationsprojekt spielt Geronimo für viele Apache-Projekte eine zentrale Rolle, da er die Referenzimplementierung der "Java EE"-Spezifikation zur Verfügung stellt und pflegt. Erschwert wurde die Kompatibilität mit der Java EE allenfalls durch Suns starke Kontrolle über den JCP (Java Community Process) und die späte Auslieferung des Java EE 6 TCK (Test Compatibility Kit) an die Apache Software Foundation (ASF). Doch das ist inzwischen Geschichte, verzögert jedoch die Adaption des neuen Standards.

Traditionell engagiert sich IBM am meisten an der Entwicklung des Geronimo, da der Konzern mit der WebSphere Application Server Community Edition (WAS CE [2]) eine eigene frei verfügbare Produktvariante auf Basis des Anwendungsservers unter IBMs International License Agreement for Non-Warranted Programs (ILAN [3]) herausgibt. Neben dem Support für beide Produkte bietet IBM eine aktuellere, professioneller wirkende Dokumentation als das Geronimo-Projekt an. Für Spezialthemen erscheinen regelmäßig Artikel auf IBMs developerWorks [4]-Seiten oder als sogenannte Redbooks [5].

Eine Besonderheit Geronimos ist das von Anfang an umgesetzte modulare Konzept um einen Mikrokernel. Mit ihm lassen sich seine Funktionen einfach über eigene Plug-ins erweitern. Man erhält nicht nur einen Anwendungsserver "von der Stange", sondern kann sich ihn über sogenannte Assemblies auf seine Bedürfnisse zurechtschneidern. Es existieren zum Beispiel Plug-ins für die Webkonsole von ActiveMQ oder für den SCA-Container Tuscany.

Geronimo-Assemblies: Funktionen nach Maß (Abb. 2)

Ein weiterer Pluspunkt, der den Einstieg erleichtert, ist die Bedieneroberfläche, die aus einer Portlet-Ajax-Webkonsole und einer Kommandozeilenumgebung, der GShell, besteht. Das wirkt sich gegenüber Konkurrenten (JBoss, GlassFish) durch eine schlanke Architektur mit kurzen Startzeiten und einen geringen Ressourcenverbrauch aus. Neben der zertifizierten "Java EE"- (Big-G) gibt es eine Webversion (Little-G) und das Framework (Micro-G) als Assembly. Durch Plug-ins können Anwender zur Laufzeit von der kleinen zur großen Ausgabe wechseln. Geronimo steht in zwei Varianten als Binärversion zur Verfügung: zum einen mit dem Webcontainer Jetty und der Webservice-Engine CFX und zum anderen aus der Kombination aus Tomcat und Axis. Obwohl beide "Java EE"-Zertifizierungen bestanden haben, ist die Tomcat-Variante, hauptsächlich wegen der größeren Verbreitung des Servlet-Containers, die häufiger eingesetzte Ausgabe.

Deshalb findet sie sich in der WebSphere Community Edition, die zusätzlich IBMs Java Virtual Machine (JVM) unterstützt. Zusätzlich bringt WAS CE zusätzliche Fehlerkorrekturen und eine größere Unterstützung von Betriebssystemen, Datenbanken und LDAP-Servern mit. Auch wenn IBM keinen eigenen Sourcecode mitliefert, fließen Änderungen daran in spätere Geronimo-Versionen ein.

Geronimo 2.2 enthält neben einigen Fehlerkorrekturen und aktualisierten Bibliotheksversionen vor allem kleine Funktionsüberarbeitungen. Ebenso haben die Entwickler die Werkzeugunterstützung mit einem erweiterten Funktionsumfang der GShell ergänzt. Mit Gruppen funktional zusammengehöriger Plug-ins lässt sich die Erstellung von Assemblies vereinfachen. Außerdem gab es Überarbeitungen beim Aufbau und Deployment von Cluster-Farmen.

Wichtig dürfte die Integration aktueller Versionen von Dojo 1.3, CXF 2.1, Axis2 1.5, OpenEJB 3.1, Derby 10.5, Jetty 7, Camel 2.0 und ActiveMQ 5.3 sein. Die Tomcat-Konfiguration hat sich in der aktuellen Version geändert, sollte jedoch die Migration von Tomcat zu Geronimo eher erleichtern. Eine wichtige Änderung betrifft die Umstellung von der Commons-Logging- auf die SLF4J-Bibliothek (Simple Logging Facade for Java), die einige Fehler bei unterschiedlichen Logging-Produktversionen behebt. Als Standard-Implementierung greift Geronimo nach wie vor auf log4j zu.

Durch die Unterstützung aktueller Standards (JAX-B 2.1, JAX-WS 2.1,über Umwege JPA 2.0 und teilweise EJB 3.1) lassen sich die Funktionen von Java EE 6.0 nutzen. Die Zertifizierung ist jedoch erst mit dem Nachfolger Geronimo 3.0 vorgesehen, der in diesem Jahr erscheinen und eine OSGi-Unterstützung auf Basis der Apache-Projekte Karaf und Felix enthalten soll.

Die OpenEJB-Version in Geronimo 2.2 unterstützt Teile des neuen EJB-3.1-Standards, was sich im Vorhandensein eines eigenen Containers für die neue Singleton-Bean zeigt. Ebenso lässt sich die bestehende JPA-1.0-Implementierung durch die für JPA 2.0 austauschen, indem man sie als Plug-in über deploy/list-plugins -r http://geronimo.apache.org/plugins/openjpa2 auswählt.

Nach einem Server-Neustart sind die Funktionen von OpenJPA 2.0 zu verwenden, die jedoch noch nicht den kompletten JPA-Standard implementieren. Auch wenn die Unterstützung des gesamten "Java EE 6.0"-Standards erst mit Geronimo 3.0 geschieht, haben einige Apache-Projekte, wie die beiden genannten, aber auch MyFaces 2.0 und CXF 2.3, bereits die TCK-Tests durchlaufen.

Die Zeiten, als Applikationsserver die Flaggschiffe für Java EE waren, sind zwar vorbei, das bedeutet jedoch nicht, dass sie keine Zukunft haben. Gerade durch die erfolgte Marktkonsolidierung spielen Open-Source-Server eine immer größere Rolle. Die neuen "Java EE"-Standards erleichtern das Deployment und sind durch die Web-Profile viel schlanker.

Mit ihnen ist es möglich, Enterprise-Standardspezifikationen, wie EJB 3.1 Lite und JPA 2.0, in einer als WAR deployten Webanwendung zu nutzen, ohne die Deployment-Restriktionen und den Balast des kompletten "Java EE Standards" erfüllen zu müssen.

Als modulare und leicht anpassbare Server, wie der Geronimo, haben sie ihre besten Zeiten noch vor sich. Ebenso sind die freie Lizenz und die Apache-Gemeinschaft, mit IBM im Rücken, ein Garant für nachhaltige Produkte. Apache ist der einzige Open-Source-Anbieter, der einen kompletten "Java EE 6"- und OSGi-4.2-Stack aus einer Hand anbieten wird. Geronimo implementiert die "Java EE"-Spezifikationen für andere Apache Produkte, wie OpenJPA, OpenEJB und Tomcat. Die Produkte durchlaufen zurzeit die Kompatibilitätstests (TCK), sodass Geronimo für die "Java EE 6.0"-Zertifizierung darauf aufbauen kann.

Der Trend zur "OSGi-fizierung" zeigt sich in den von Geronimo verwendeten Bibliotheken. Allein beim Wechsel von Version 2.1 auf 2.2 hat sich mit 83 OSGi-Bundles ihre Anzahl mehr als verdoppelt. Geronimo 3 wird mit dem OSGi-Kernel Karaf, der auf Apache Felix basiert, die Voraussetzung schaffen, OSGi-Module zu verwalten. Für den Administrator soll das, wie gewohnt, über die GShell-Umgebung geschehen, sodass das "Java EE"- und das OSGi-Deployment einheitlich erfolgen können.

Geronimo-Versionen (Abb. 3)

Da Geronimo als Integrationsprojekt von dem Stand anderer Apache-Projekte abhängt, kann es mit Geronimo 3 noch bis Ende 2010 dauern, bis der Server die "Java EE 6"-Kompatibilität erreicht. Verzögerungen könnten sich jedoch durch die weit fortgeschrittene Umstellung des GBean- auf den OSGi-Kernel Felix und der GShell Umgebung auf die Karaf-Kommandozeilenschnittelle ergeben.

Da Geronimo bei Webcontainern und Webservices zweigleisig fährt, sieht es im Moment danach aus, dass die Kombination Jetty/CXF sowohl bei Java EE 6.0 als auch OSGi etwas weiter fortgeschritten ist als die aus Tomcat und Axis. Noch nicht klar ist, welches Produkt den REST-Standard JAX-RS umsetzen soll. Apache hat mit CXF und Wink zwei Alternativen im Angebot. Durch seine moderne Architektur, einen hohen Reifegrad und einen großen Funktionsumfang braucht sich Geronimo als Jungspund mit Geschichte vor seinen Konkurrenten nicht zu fürchten. Die Unterstützung der Entwicklung und der Administration ist für Open-Source-Werkzeuge gut. Im Rahmen der Apache-Produkte nimmt Geronimo eine zentrale Rolle ein. Hier gilt, dass Geronimo der Boss im Land der Apachen bleibt.

Frank Pientka
ist Senior Software Architect bei der Materna GmbH in Dortmund und Autor des Geronimo-Buchs im dpunkt Verlag.

  1. Java EE 6 findet eingeschränkte Zustimmung [6], Nachricht vom 2. Dezember 2009
  2. Wacklige Abstimmung für die Java Enterprise Edition [7], Nachricht vom 6. März 2009
  3. Geronimo-Wiki: Component Versions [8]
  4. Geronimo-Wiki: 3.0 Release Status [9]
  5. Geronimo Wiki: Module Status [10]
  6. Geronimo Wiki: Road map for Java EE6 Web Profile [11]
  7. OpenEJB Wiki: EJB 3.1 RoadMap [12]
  8. OpenJPA Wiki: JPA 2.0 Roadmap mit OpenJPA 2.0.0 Beta 2 [13]
  9. Apache CXF [14]
  10. Apache Tuscany Wiki: Installing Tuscany Plugin for Geronimo [15]
  11. Apache Karaf
  12. Apache Geronimo Trunk [16]
  13. MyFaces 2.0 [17]

Nachdem man sich abhängig von der Plattform (Windows/Linux/Mac OS X/Unix) die Datei geronimo-tomcat6-minimal-2.2-bin.[zip|tar] heruntergeladen hat, startet man den Geronimo-Server über das Skript <GERONIMO Verzeichnis>\bin\startup.[bat|sh]. Da die Little-G-Tomcat-Variante noch keine Webkonsole enthält, lässt sich der Server nur über die Kommandozeilenumgebung GShell administrieren. Sie ist durch <GERONIMO Verzeichnis>\bin\gsh.[bat|sh] zu starten. Mit help lassen sich die verfügbaren Befehle anzeigen. Für jeden Befehl kann man sich mit -h weitere Optionen anzeigen lassen. Damit man die gestarteten Module, 27 an der Zahl, angezeigt bekommt, ist deploy/list-modules -r anzugeben. Die Module lassen sich mit ihren abhängigen Modulen damit einzeln starten und stoppen.

Geronimo verwaltet seine Module mit den darin enthaltenen Java-Bibliotheken in einem Repository (<GERONIMO Verzeichnis>\repository), wobei er bei der Verzeichnisstruktur dieselbe Namenskonvention wie das Apache-Maven-Projekt verwendet. Mit der Konvention gibt es ein einfaches Mittel festzustellen, welche Bibliothek welche Version wo verwendet. Die Struktur findet sich in der zentralen Geronimo-Konfigurationsdatei (<GERONIMO Verzeichnis>\var\config\config.xml) wieder.

Geronimo-Überblick (Abb. 4)

Die Module lassen sich als Plug-in im CAR-Archiv-Format exportieren, um sie in einer anderen Geronimo-Umgebung zu installieren. Alternativ sind entweder das lokale Repository über http://localhost:8080/plugin/maven-repo/geronimo-plugins.xml zu veröffentlichen oder ein bestehendes entferntes, wie für die Beispielanwendungen, über geronimo.apache.org/plugins/samples-2.2/ [18] einzubinden.

Mit dem Befehl deploy/list-plugins -rr -r http://geronimo.apache.og/plugins/geronimo-2.2/ lässt sich die Datei lesbarer anzeigen. Recht weit oben wählt man unter den 142 angebotenen Plug-ins die Nummer 14, "Geronimo Plugins, Console :: Tomcat (2.2)", aus. Damit installiert man die Webkonsole, die sonst nur in Big-G zur Verfügung steht, mit allen benötigten Bibliotheken nach. Jetzt taucht die Webkonsole plus org.apache.geronimo.plugins/console-tomcat/2.2/car als gestartetes Modul auf. Nun muss man sich in der Webkonsole über http://localhost:8080/console und in dem Benutzersystem mit dem Passwort "manager" anmelden, woraufhin sich der Tomcat komfortabel konfigurieren oder die installierten Anwendungen administrieren lassen.

Adminkonsole für EJB-Container (Abb. 5)

Als Nächstes kann man eine fertige Beispielanwendung mit deploy/list-plugins -r http://geronimo.apache.org/plugins/samples-2.2/ als Plug-in installieren. Alternativ lässt sie sich auch als WAR oder EAR-Archiv, wie im "Java EE"-Deployment vorgesehen, installieren. Durch das Hinzufügen weiterer Plug-ins wird der Tomcat-Server zu einem vollständigen "Java EE"-Server, wenn man zusätzliche Funktionen wie die ursprünglich für Java EE vorgesehene Unterstützung für SCA benötigt. Es geht jedoch auch der umgekehrte Weg, dass man aus einem laufenden Geronimo einen Server nach den eigenen Wünschen zusammenstellt. Am einfachsten geht das über den Menüpunkt Plugins | Assemble Server der Webkonsole. Genauso lässt sich die Assemblierung über Maven, GShell (deploy/assemble) oder das Geronimio-Plug-in für Eclipse in drei Modi (Function Centric, Application Centric, Expert Users) durchführen.

Für die Entwicklung von Java-Anwendungen für Geronimo setzt man am besten Eclipse als IDE und Maven als Build-System ein. Für die EJB-Entwicklung mit Eclipse sollte man zusätzlich das Plug-in für OpenEJB nutzen.

Benötigt man nur einen Messaging-Server mit Oberfläche für ActiveMQ, lässt sich das mit Maven wie folgt zusammenstellen: Man kopiert die Maven-Projektdatei vom Subversion-Repository [19] auf die lokale Platten und ruft mvn auf. Danach befinden sich im Ordner "target" zwei Dateien: csa-activemq-tomcat-2.2-bin.tar.gz und csa-activemq-tomcat-2.2-bin.zip, die man je nach Plattform einfach entpackt und die über startup.[bat|sh] den Server starten.

Unter Geronimos Webkonsole, die man mit http://localhost:8080/console/portal/Applications/Web%20App%20WARs aufruft, ist jetzt die ActiveMQ-Konsole als neue Webanwendung installiert und unter http://localhost:8080/activemq-console/ erreichbar. Die Konsolenfunktionen sind, wie das obige Bild zeigt, als Portlets mit Apache Pluto realisiert, sodass die Webkonsole dynamisch zu erweitern ist, wenn man weitere Plug-ins, wie "53: Geronimo Plugins, OpenEJB :: OpenEJB (2.2)" dafür installiert. Neben der Verwaltung lassen sich damit entfernte Geronimo-Server überwachen und konfigurieren, was gerade bei einer großen Cluster-Installation eine Erleichterung ist. (ane [20])


URL dieses Artikels:
https://www.heise.de/-942532

Links in diesem Artikel:
[1] https://www.heise.de/news/Drei-auf-einen-Streich-Java-EE-6-GlassFish-3-und-NetBeans-6-8-882674.html
[2] http://www-01.ibm.com/software/webservers/appserv/community/
[3] http://www.ibm.com/developerworks/systems/articles/analyze_aix/agree_down.html
[4] http://www.ibm.com/developerworks/
[5] http://www.redbooks.ibm.com/
[6] https://www.heise.de/news/Java-EE-6-findet-eingeschraenkte-Zustimmung-874320.html
[7] https://www.heise.de/news/Wacklige-Abstimmung-fuer-die-Java-Enterprise-Edition-6-204341.html
[8] http://cwiki.apache.org/confluence/display/GMOxDOC22/Component+versions
[9] http://cwiki.apache.org/confluence/display/GMOxPMGT/Geronimo+3.0+Release+Status
[10] http://cwiki.apache.org/confluence/display/GMOxPMGT/Module+Status
[11] http://cwiki.apache.org/confluence/display/GMOxDEV/Road+map+for+Java+EE6+Web+Profile
[12] http://cwiki.apache.org/OPENEJB/ejb-31-roadmap.html
[13] http://cwiki.apache.org/confluence/display/openjpa/JPA+2.0+Roadmap
[14] http://cxf.apache.org/roadmap.html
[15] http://cwiki.apache.org/TUSCANYWIKI/installing-tuscany-plugin-for-geronimo.html
[16] https://svn.apache.org/repos/asf/geronimo/specs/trunk/
[17] http://myfaces.apache.org/core20/
[18] http://geronimo.apache.org/plugins/samples-2.2/
[19] http://svn.apache.org/repos/asf/geronimo/samples/tags/samples-parent-2.2/samples/csa-activemq/csa-activemq-tomcat/pom.xml
[20] mailto:ane@heise.de