J2EE-Umgebung samt Ökosystem

Suns J2EE-Applikationsserver Glassfish ist nicht nur Referenzimplementation des aktuellen J2EE-Standards, sondern auch eine leistungsfähige Plattform für den Alltag.

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 ver­teil­te 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-Applika­tionsservern, 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.




In den ersten Versionen hatte die J2EE-Umgebung (jedenfalls bei den meisten Programmierern) aber keinen sehr guten Ruf. Anwendungen, die mit früheren Versionen entwickelt wurden, enthielten ein hohes Mass an Konfigurations-Code, das Zusammenspiel der verschiedenen Komponenten sowie die Architektur waren oft sehr schwierig zu verstehen. Die Einarbeitungszeit in die Plattform stand folglich oft in keinem guten Verhältnis zum Nutzen der Plattform. Andere leichtgewichtige Komponententechnologien wie das Spring-Framework hatten vor diesem Hintergrund daher ein vergleichsweise leichtes Spiel. Mit den neueren Versionen, vor allem J2EE 5, hat sich dies allerdings deutlich geändert. Die neue J2EE-Version wurde sehr gründlich überarbeitet und es wurde auf Kritik von Entwicklerseite reagiert:



- Statt komplexen Konfigurationsdateien kommen nun Java-Annotationen zum Einsatz.



- Parallel kommt das «Convention over Configuration»-Paradigma zur Anwendung; also die Idee, dass das System vernünftige Vorgaben macht, mit denen man schnell und leicht starten kann und diese nur ändert, wenn es wirklich erforderlich ist. Im Gegensatz dazu standen umfangreiche Konfigurationen bei früheren Versionen.



- Es wird Dependency Injection unterstützt – ein Pattern, das flexibles Lifecycle-Management, Wiederverwendbarkeit und Konfiguration von Komponenten erlaubt.



- Dank Unterstützung Aspekt-orientierter Pro­grammierung wird es leichter, Funktionen wie Security, Logging oder Transaktionen, die viele Teile einer Anwendung betreffen, unabhängig von bestimmten Modulen zu entwickeln und wiederzuverwenden.



- JPA, also die Java Persistence API, wird unterstützt.
Dank dieser Modifikationen ist die Verwendung von J2EE erheblich einfacher.


Glassfish-Applikationsserver

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.





Die Glassfish-Projekt-Familie


Version 3.0

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-Anwendun­gen zu entwickeln und diese in einer J2EE-Umgebung zu betreiben.



- Häufig muss die Webanwendung mit verschiedenen anderen Services inter­agieren, 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.


Die Glassfish-«Familie»

Wie bei den meisten Applika­tionsservern 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 spe­zialisierte 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.


Fazit

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-Frame­works 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!


Der Autor

Alexander Schatten (alexander@schatten.info) ist Assistent am Institut für Softwaretechnik und interaktive Systeme der Technischen Universität Wien.




Artikel kommentieren
Kommentare werden vor der Freischaltung durch die Redaktion geprüft.

Anti-Spam-Frage: Was für Schuhe trug der gestiefelte Kater?
GOLD SPONSOREN
SPONSOREN & PARTNER