J2EE-Umgebung samt Ökosystem
Artikel erschienen in Swiss IT Magazine 2008/22
D ie J2EE-Umgebung dient zur Entwicklung verteilter Geschäftsanwendungen. Ein J2EE-Applikationsserver stellt dabei die Laufzeitumgebung für Softwarekomponenten (dies umfasst Lifecycle Management und Deployment) sowie verschiedene Services (Transaktionen, Security, Namens- und Verzeichnisdienste, Persistenz-Mechanismen) zur Verfügung. Weiter wird ein Web-Container angeboten, der Unterstützung für Servlets und Java Server Faces bietet. Das Komponentenframework ist explizit auf verteilte Komponenten ausgelegt und bietet entsprechende Remoting-Methoden und Schnittstellen zu Messaging Middleware (JMS) sowie Webservices an. Das Management von Komponenten erfolgt über die standardisierte Java Management Extension.
Ein grosser Vorteil der Jave 2 Enterprise Edition gegenüber beispielsweise .Net von Microsoft ist die Tatsache, dass J2EE ein offener Standard ist, der von vielen verschiedenen Anbietern, Open Source wie proprietär, implementiert wird. Dadurch ist auch eine Austauschbarkeit des Middleware-Anbieters leichter möglich: Es gibt tatsächlich eine grosse Anzahl an J2EE-Applikationsservern, darunter einige bekannte proprietäre Varianten wie Websphere von IBM oder Weblogic von Bea beziehungsweise Oracle. Im Open-Source-Umfeld sind vor allem JBoss sowie das Glassfish-Projekt (Sun) und Geronimo (Apache) zu nennen.
Im Open-Source-Umfeld dominierte bisher sicherlich die «Produktlinie» von JBoss, dies aber vielleicht nicht mehr ganz zu Recht: Denn mit Glassfish gibt es eine sehr leistungsfähige Alternative. Glassfish ist ein Applikationsserver, der von Sun initiiert und zum Grossteil auch implementiert wurde. Zunächst war Glassfish im wesentlichen die Referenzimplementation des J2EE-5-Standards, hat sich aber mittlerweile auch zu einem sehr leistungsfähigen Produktionssystem entwickelt, bei dem man immer von der Unterstützung der aktuellen J2EE-Standards profitiert. Glassfish kann in einem von zwei Lizenzmodellen verwendet werden: als Open-Source-Produkt unter der CDDL (Common Development and Distribution License) sowie in einer kommerziellen Variante von Sun, die entsprechenden Support beinhaltet.
Die wesentlichen Persistenz-Komponenten in Glassfish, die die Java Persistence API (JPA) implementieren, werden in den Produktionsversionen durch das Toplink-Framework bereitgestellt. Toplink war früher ein proprietäres Produkt der Firma Oracle und wurde dann der Open-Source-Community um Glassfish zur Verfügung gestellt.
Erst kürzlich wurde eine neue Version von Glassfish angekündigt, von der eine «Prelude»-Version bereits zum Download zur Verfügung steht. Diese Version ist der erste Applikationsserver, der Support für Java EE Version 6 anbietet. Die wesentliche architektonische Neuerung ist die Tatsache, dass die neue Version auf Basis von OSGi implementiert wurde. OSGi ist ein Komponentenmodell, das sich zur Zeit sehr grosser Beliebtheit erfreut und stellt unter anderem die Basis von Eclipse dar. OSGi erleichtert es, verschiedene Module innerhalb einer Laufzeitumgebung (wie einer Entwicklungsumgebung oder eines Applikationsservers) zu laden und voneinander zu trennen und dabei genau zu definieren, wie diese Module miteinander interagieren dürfen.
Weiter wird eine verbesserte Unterstützung für die heute sehr beliebten Scripting-Umgebungen angeboten. Konkret werden jRuby und Groovy unterstützt. Bei Groovy handelt es sich um eine Scriptsprache, die im Java-Umfeld sehr beliebt ist, weil sie im wesentlichen auf der Java-Syntax basiert und sich sehr gut in Java-Projekte integrieren lässt. Ruby und das darauf basierende Rails Framework müssen kaum näher vorgestellt werden. jRuby ist eine Implementierung der Scriptsprache Ruby, die in einer Java Virtual Machine läuft. Das bedeutet, dass man Ruby-Scripts sowie ganze Rails-Anwendungen innerhalb von Glassfish laufen lassen kann. Dies kann in der Praxis einige Vorteile haben:
- J2EE-Umgebungen haben vor allem in grösseren Firmen häufig eine wesentlich höhere Akzeptanz als die Ruby/Rails-Umgebung: Mit jRuby und Glassfish wird es möglich, Rails-Anwendungen zu entwickeln und diese in einer J2EE-Umgebung zu betreiben.
- Häufig muss die Webanwendung mit verschiedenen anderen Services interagieren, beispielsweise mit anderen Java-Anwendungen. Da die Scripting-Umgebungen innerhalb des J2EE-Containers laufen können, lassen sich beispielsweise Ruby/Rails-Anwendungen leicht in bestehende Java-Strukturen integrieren.
- Die Script-Sprache kann die Skalierungsmöglichkeiten von Glassfish nutzen.
- Ruby und Groovy können alle verfügbaren Java-Bibliotheken verwenden.
Version 3 von Glassfish verspricht weitere Vorteile wie Rapid Redeployment, mit dessen Hilfe es möglich sein soll, den Status der Sessions während eines Redeployments einer Anwendung zu behalten.
Auch die Kompatibilität zu Tomcat soll verbessert werden; wohl, um auch Entwicklern aus dem Apache-Umfeld die Glassfish-Umgebung schmackhaft zu machen. Zuletzt soll in Version 3.0 neben Toplink auch die EclipseLink-JPA-Implementation zur Verfügung stehen, die vermutlich als Nachfolger von Toplink gesehen werden kann.
Wie bei den meisten Applikationsservern ist auch Glassfish kein «Standalone»-Produkt. Neben den beschriebenen Kernfunktionen existieren eine Reihe von (Open-Source-)Projekten, die im Umfeld von Glassfish zu nennen sind (siehe Grafik); teilweise bieten sie Erweiterungen der Basisfunktionalität an, teilweise handelt es sich um spezialisierte Bibliotheken oder Produkte, die gut mit Glassfish zusammenarbeiten.
Im engeren Umfeld findet man Grizzly (Unterstützung der Skalierung) und das schon oben erwähnte Scripting. Grosse Enterprise-Anwendungen kommunizieren häufig über Messaging Middleware auf der Basis des Java-Messaging-Service-Standards. Ein Subprojekt von Glassfish ist der OpenMQ Message Broker, der als Konkurrenzprodukt zu Apache ActiveMQ gesehen werden kann (siehe InfoWeek 14/2007, auch online).
SailFin ist ein relativ neues Subprojekt, das die Java-Spezifikation 116 (und teilweise 289) unterstützt. Dabei handelt es sich um eine Implementierung von SIP Servlets, die von Ericsson eingeführt wurde. SIP ist das Session Initiation Protocol und wird hauptsächlich im VoIP-Bereich zum Herstellen von Kommunikations-Sessions verwendet. SailFin erleichtert es daher Entwicklern, SIP/VoIP Services in Java zu schreiben und diese auch in die J2EE-Infrastruktur zu integrieren.
Schliesslich sollte im engeren Umfeld von Glassfish noch das Clustering-Framework Shoal besprochen werden: Auch hier ist zu sagen, dass Shoal ein generisches Framework ist, das nicht nur mit Glassfish verwendet werden kann, aber dennoch gut auf Glassfish abgestimmt ist. Shoal erlaubt das Definieren von logischen Gruppen, in die Server und Services über mehrere Maschinen hinweg gruppiert werden können. Eine Glassfish-Instanz würde konkret einen Shoal Group Management Service (GMS) starten und könnte dann mit der GMS-API interagieren. Shoal hilft zur Laufzeit neue Mitglieder in eine Gruppe hinzuzufügen oder zu entfernen, im Failover-Fall Ersatzservices zu suchen und bietet auch eine Schnittstelle für verteilte Sessions sowie Transaction Recovery.
Im weiteren Umfeld von Glassfish sind noch einige andere Projekte erwähnenswert, die zwar nicht unmittelbar mit dem Applikationsserver in Zusammenhang stehen, aber häufig mit diesem gemeinsam verwendet werden. Nennenswert sind hier vor allem MySQL, der Enterprise Service Bus Open ESB, der JBI (Java Business Integration) unterstützt, und die integrierte Entwicklungsumgebung NetBeans.
Der Glassfish-Applikationsserver mit dem «Glassfish-Universum» an Projekten und Subprojekten ist – wie jeder moderne J2EE-Applikationsserver – keine ganz einfach zu verstehende Angelegenheit. Wer also einen schnellen Web-Prototypen entwickeln möchte, ist hier vielleicht nicht richtig aufgehoben. Als Infrastruktur für komplexe Geschäftsanwendungen bieten sich Glassfish und JBoss als J2EE-Umgebung im Open-Source-Umfeld an. Beide Projekte können in vielen Punkten mit sehr teuren proprietären Produkten mithalten. Glassfish hat gegenüber einigen Konkurrenten den Vorteil, dass es sich um die Sun-Referenzimplementierung des J2EE-Standards handelt; damit hat man in den Previews immer die Möglichkeit, die neuesten Standards und deren Auswirkung auf Anwendung zu testen.
Besonders in den letzten Jahren hat die Glassfish-Umgebung sehr an Bedeutung gewonnen. Sun hat einige Ressourcen in diese Projekte gesteckt und gleichzeitig eine starke Open-Source-Politik betrieben, sodass man jetzt viele Projekte findet, die auch über eine nennenswerte Community verfügen. In Summe findet man im Umfeld von Sun eine reichhaltige Sammlung von Projekten, beginnend mit der MySQL-Datenbank über Scripting-Umgebungen, AJAX- und SIP-Frameworks und Cluster-Software bis zu der IDE Netbeans. Diese Projekte sind nicht nur als Open-Source-Projekte betrieben, sondern man bekommt auch bei Bedarf kommerziellen Support von Sun. Damit findet man hier ein Projekt-Portfolio, das sicher einen Blick wert ist!
Alexander Schatten (alexander@schatten.info) ist Assistent am Institut für Softwaretechnik und interaktive Systeme der Technischen Universität Wien.