JEE 5

Vorteile und Neuerungen
der neuen Java Enterprise Edition

von Olga Lyssenko und Georg Friedrich

 

 

Mit JEE 5 bringt Sun eine ganze Reihe von Verbesserungen, die Software-Entwicklern das Leben leichter machen sollen. Das Unternehmen selbst bezeichnet das Paket als das wichtigste Update seit sechs Jahren. Im folgenden Artikel finden Sie einen Überblick über die wichtigsten Neuerungen und Vorteile der neuen Enterprise Edition.

 

Das Hauptaugenmerk der neuen Java Enterprise Edition liegt auf der Vereinfachung des Entwicklungsprozesses für den Programmierer. Dabei wird weitreichend Gebrauch von den in Java SE 5 eingeführten Annotations gemacht, die einen Großteil der sog. Deployment-Deskriptoren ersetzen. So erleichtern diese Veränderungen nicht nur den Einstieg in die Enterprise-Welt für Anwendungen mittlerer Größe, sondern vereinfachen gerade auch die Entwicklung komplexerer Anwendungen enorm. Eine der Hauptanwendungen dieser Annotations im Enterprise-Bereich ist die sog. „Dependency Injection“, die der Laufzeitumgebung ermöglicht, der Anwendung benötigte Ressourcen quasi von außen zu „injizieren“. Damit wird eine starke Vereinfachung bei der Entwicklung von Enterprise JavaBeans erreicht. Weitere Hauptergänzungen der Java EE 5 sind Java Server Faces (JSF), die zusammen mit der Java Standard Tag Library (JSTL) den Entwicklungsprozess von Webanwendungen rapide beschleunigen, so wie die Java Persistence API (JPA) die das Abbilden der Java-Objekte auf eine relationale Datenbank enorm vereinfacht.

 

 

Überblick über die wichtigsten
JEE 5 Technologien

 

Die Java Plattform, Enterprise Edition (Java EE) bezeichnet eine von Sun definierte Basis von Spezifikationen und deren Schnittstellen. JEE soll dabei die Entwicklung verteilter n-Tier-Systeme unterstützen.

Dabei bietet sie Lösungsansätze für jeden Software-Bereich, von der Darstellungsschicht über die Geschäftslogik bis zur Persistenz. Die gesamte Java-EE-Spezifikation umfasst eine große Menge von Technologien. In diesem Artikel werden die wichtigsten Technologien anhand des Dreischichtenmodells vorgestellt.

 

 

 

DIE DARSTELLUNGSSCHICHT

 

bereitet die Daten der Anwendungsschicht grafisch auf. Um die Entwicklung der clientseitigen Anwendungen zu erleichtern, bietet die Java Enterprise Edi-tion eine ganze Reihe von Technologien.

 

Java Server Pages (JSP)

sind um Java-Anweisungen angereicherte statische HTML-Seiten. Die JSP-Elemente werden erst zum Zeitpunkt der Anfrage ausgewertet.

 

Servlets 

Anders als bei JSP, bei denen Java-Code in das HTML-Dokument eingebettet wird, ist bei Servlets HTML in Java-Code eingefügt. Servlets eignen sich insbesondere für Seiten mit umfangreicher Geschäftslogik.

 

Tag-Bibliotheken (Taglibs)

sind Java-Bibliotheken, die es ermöglichen, die beschränkte Menge an HTML-Elementen um eigene Tags mit spezifischer Funktionalität zu erweitern. Die Java Standard Tag Library (JSTL) gilt als wichtigster Zusatz der Java EE 5, die ein grundlegendes Set an Tags zur Manipulation von Datenbanken beinhaltet.

  

Java Server Faces (JSF)

sind eine Alternative zu dem Open Source-Framework Struts. Die JSF bieten ein Framework für die Entwicklung und Wiederverwendung von Web-UI-Komponenten (User Interface), kümmern sich um eine klare Trennung zwischen der Anwendungslogik und der GUI-Repräsentation und sorgen für eine verbesserte Wartungsfunktion für Webanwendungen. Dabei bauen JSF sowohl auf der Servlet- als auch auf der JSP-Spezifikation auf.

 

Streaming API for XML (StAX)

wurde als ein Mittelweg zwischen den baumbasierten und den ereignisbasierten XML-APIs entworfen. Es wird grundsätzlich in Cursor- und Iterator-Verarbeitung unterteilt. Die Cursor-Verarbeitung ist einfacher und schneller, aber nicht so flexibel wie die Verarbeitung mit dem Iterator. Dabei ist die letztere Methode etwas aufwändiger.

 

 

 

DIE ANWENDUNGSSCHICHT

 

enthält die Geschäftslogik und dient gleichzeitig als Kommunikationsschicht zwischen Darstellungs- und Datenhaltungsebene. Die Java Plattform, Enterprise Edition 5 stellt eine Vielzahl an Technologien zur Verfügung, mit deren Kombination man beste Resultate bei der Umsetzung der Geschäftslogik erreichen kann.

 

Java Naming and Directory Interface (JNDI)

ist eine Grundlage für die Kommunikation von Komponenten in einer JEE-Umgebung. JNDI unterstützt den Zugriff auf praktisch alle Arten von Namens- und Verzeichnisdiensten (LDAP, DNS, Datei-system...), über die Objekte und Dienste gefunden und zur Verfügung gestellt werden.

 

Enterprise JavaBeans (EJB)

sind eine Kerntechnologie der Java-EE-Spezifikation, die in der dritten Generation (EJB 3.0) radikal vereinfacht und entschlackt wurde. EJB sind standardisierte Komponenten, die einen Teil der serverseitigen Anwendungslogik kapseln. Die Clients können Enterprise JavaBeans entweder remote („entfernt“) oder lokal (innerhalb einer VM) erreichen. Eine genaue Beschreibung dieser Technologie folgt später in diesem Artikel.

 

Java Message Service (JMS)

ermöglicht eine asynchrone Kommunikation zwischen verschiedenen Programmteilen verteilter Applikationen. Die eingehenden Nachrichten werden vom Nachrichtenvermittler (message broker) zwischengespeichert und zu einem späteren Zeitpunkt zugestellt. Der JMS unterstützt zwei gängige Kommunikationsverfahren: die Nachrichtenwarteschlangen (message queues) und ein Anmelde-Versendesystem (publish subscribe).

 

Webservices

bieten plattformübergreifende Dienste und Datenaustausch. Die Kommunikation erfolgt über standardisierte Internetprotokolle.

Java API for XML – Webservices (JAX-WS) ist eine weitere Ergänzung der Java EE 5, die eine Erstellung der Webservices mit Hilfe der Annotations ermöglicht.

 

 

 

DIE DATENHALTUNGSSCHICHT

 

sorgt für die dauerhafte und zuverlässige Speicherung der Daten und effiziente Zugriffe auf diese Daten. Die wichtigste Neuerung der Java EE 5 ist die neue Persistenz API, die Sie von der Last, SQL-Statements schreiben zu müssen, befreit.

 

Java Persistence API

ermöglicht die Abbildung von Java-Objekten auf relationale Datenbanken und umgekehrt. Die JPA gestattet mit Hilfe der Annotations recht einfach eine Anwendung zu entwickeln, welche die dauerhaft gespeicherten Daten manipulieren kann.

 

Enterprise JavaBeans (EJB)

Mit der neuen Java EE 5 werden nun EJB 3.0 von Sun eingeführt, die einen zentralen Punkt in der Enterprise-Architektur einnehmen. JavaBeans sind Objekte, die dazu dienen, Nutzdaten oder Zustände abzubilden, ohne sich von der umgebenden Architektur abhängig zu machen. Die Interaktion geschieht ausschließlich über Zugriffsmethoden, wobei die innere Repräsentation verborgen bleibt. Der Vorteil dieser Vorgehensweise liegt darin, dass sowohl die JavaBeans als auch die umgebende Architektur eigenständig bleiben und somit einfacher gewartet oder weiterentwickelt werden können. Erweitert man nun das Prinzip der Java Beans um eine eigene Logik und Datenstruktur, so darf man von einer Komponente sprechen, die, in einen Container integriert, den wohl wichtigsten Bestandteil der Java EE darstellt, den Enterprise JavaBeans (fortlaufend kurz EJB genannt). Dieser Container hat die Aufgabe, die EJB zu verwalten, und dient ihnen als Laufzeitumgebung. Er erzeugt und überwacht mehrere Instanzen dieser Serverobjekte (Objekte, die stets in einem entsprechenden Server zum Einsatz kommen) und hält sie eigenverantwortlich in einem Pool bereit. Der EJB-Container ist meist zusammen mit einem Web-Container in einen Application-Server (auch JEE-Server genannt) integriert. Die EJB-Spezifikation, an die sich jeder konforme EJB-Container halten muss, beschreibt aber weit mehr als das. So muss jeder EJB-Container eine Vielzahl weiterer Dienste bereitstellen, um unter anderem eine hohe Skalierbarkeit der Applikation gewährleisten zu können. Um sich nun die Dienste einer EJB zunutze machen zu können, muss jede EJB vordefinierte Schnittstellen (sog. Interfaces) implementieren. Dabei wird zwischen lokalem (innerhalb der gleichen Java VM) und entferntem (remote) Zugriff (JavaVM auf einem anderen Rechner) unterschieden. Es werden also zwei Interfaces vordefiniert, das Local Interface und das Remote Interface. In diesen Interfaces wird festgelegt, welche Business-Methoden nur innerhalb der gleichen Maschine und welche über Netzwerk angeboten werden. Von der JEE-Spezifikation werden drei Typen der Enterprise JavaBeans definiert, von denen wir auf zwei in unserem anschließend beschriebenen Beispiel eingehen werden.

 

 

Typen

Enterprise JavaBeans werden in drei Typen unterschieden, die verschiedene Aufgaben übernehmen:

 

Session Beans

stellen in den meisten Fällen Geschäftsprozesse dar und kapseln diese. Man unterscheidet zwischen zwei Arten von Session Beans, den zustandslosen (stateless) und den zustandsbehafteten (stateful) Session Beans. Stateless Session Beans erledigen dabei ihre Aufgaben stets zustandslos, d. h., sie merken sich keinen Zustand und „vergessen“ ihren Client nach Erledigung sofort wieder. Das bedeutet, dass ein Client, der mehrmals die gleiche Aufgabe zu erledigen hat, meist mit unterschiedlichen Instanzen dieser Beans zusammenarbeiten wird.

Die Stateful Session Bean hingegen merkt sich ihren Zustand. Der Client arbeitet innerhalb einer Sitzung (Session) bei dieser Form also stets mit der gleichen Instanz der Bean zusammen.

 

Entity Beans

Grundlage der Entity Beans, also jener Beans, die für die persistente Speicherung von Daten verantwortlich sind, ist die Java Persistence API (JPA). Diese API ist eine der wichtigsten Neuerungen der Java EE 5 und gestattet es, gewöhnliche Java-Objekte (Plain Old Java Objects, kurz POJOs) auf relationale Datenbankeinträge abzubilden. Mit Hilfe des Entity-Managers ist es mit relativ wenig Aufwand möglich, Datenbankeinträge durch POJOs zu lesen, zu erzeugen, zu ändern oder gar zu löschen.

 

Message Driven Beans

Message Driven Beans (kurz MDBs genannt) sind Komponenten, die mit Hilfe des Java Message Service (JMS) asynchrone Kommunikation ermöglichen. Auf MDBs wollen wir in diesem Artikel nicht näher eingehen.

 

 

 

NEUERUNGEN

 

Gerade bei EJB 3.0 hat Sun massive Vereinfachungen im Vergleich zum Vorgänger (EJB 2.1) durchgeführt. Der Container nimmt dem Entwickler eine Menge Arbeit ab und bietet einige neue Vorteile.

 

Weniger Klassen und Interfaces

Die altbekannten EJB Home- und Objekt-Interfaces wurden vollständig abgeschafft. Anstelle eines Home-Interface benötigt man ab sofort nur noch ein Business-Interface. Weiterhin ist es weder erforderlich, das javax.ejb.Ses-
sionBean-Interface zu implementieren, noch spezielle Exceptions im Interface zu deklarieren. Dadurch können eine Menge früher benötigter Methoden (ejbCreate, ejbActivate...) wegfallen.

 

Deployment-Deskriptoren können entfallen

Durch die Einführung von Annotations kann nun auf umständliche Deployment-Deskriptoren mittels beigefügter XML-Dateien verzichtet werden. Das erhöht die Übersichtlichkeit deutlich.

 

Einfache Lookups

Die JNDI-Lookups wurden ebenfalls stark vereinfacht. Nun ist es möglich, über das EJB-Context-Interface direkt ein Lookup innerhalb des Namespace durchzuführen.

 

Einfache Java Persistence API

Durch den Einsatz von simplen POJOs als Entitätsklassen ist eine übersichtliche objektorientierte Sicht der relationalen Daten möglich. Das Mapping findet direkt in den POJOs über Annotationen statt. Diese simplen Java-Objekte können sowohl im Server als auch im Client verwendet werden, d. h. der Datenaustausch findet hier direkter statt, da die umständlichen früher benötigten Datentransferobjekte (DTOs) entfallen. Ein schöner Nebeneffekt ist, dass die Transformation der Entitiy in DTOs und umgekehrt wegfällt.

Das spart Laufzeit und reduziert die Anzahl der Klassen noch weiter.

 

 

Um die zuvor aufgezeigten Neuerungen und Vorteile einmal zu verdeutlichen, soll das nachfolgende Beispiel dienen.

 

 

 

BEISPIEL

 

Zunächst erzeugen wir ein POJO, das unserer Datenbanktabelle nachempfunden ist. Angenommen, wir haben eine Tabelle „BUCH“, welche die Spalten „ISBN“ und „TITEL“ beinhaltet. „ISBN“ ist in unserem Beispiel der Einfachheit halber der Primärschlüssel der Tabelle. Unser POJO würde dann wie folgt aussehen. (Siehe Abbildung 1)

 

Eine Entität dieses Typs kann man somit wie jede andere Java-Klasse leicht erzeugen und seine Werte entsprechend setzen.

Nun wollen wir ein solches Buch nach dem Instantiieren in der relationalen Datenbank erzeugen (create), aus der Datenbank auslesen (read), einen bestehenden Datensatz verändern (update) oder löschen (delete). Hierzu erzeugen wir eine Stateless Session Bean, die für uns diese Aufgabe erledigen soll. Da diese Stateless Session Bean (SSB) nichts anderes macht, als an einer bestimmten Entität Veränderungen vorzunehmen, und sie sich quasi schützend vor der Datenbank befindet, spricht man hier von einem sog. Facade. Das bedeutet, dass der Zugriff von außen auf diese Entitäten meist ausschließlich über diese SSB erfolgt. Die hierbei nach außen angebotenen Methoden (create, find, edit, destroy) sind zunächst in einem Remote Interface zu deklarieren. (Siehe Abbildung 2)

 

Somit sind die wichtigsten Funktionen nun von außen durch einen Client erreichbar und müssen nur noch mit Hilfe des Entity-Managers implementiert werden. Dieser ermöglicht das Manipulieren der relationalen Datensätze mit Hilfe unseres oben erzeugten POJOs. (Siehe Abbildung 3)

Um das Beispiel abzurunden, werden wir jetzt noch einen Programmausschnitt vorstellen, mit dessen Hilfe wir das erstellte Beispiel ausprobieren können. Das Facade bekommen wir mittels sog. Dependency Injection vom Application-Server übergeben. Dazu benötigen wir nur den JNDI-Namen unseres Facades. (Siehe Abbildung 4)

 

 

 

Fazit

 

JEE 5 repräsentiert derzeit einen wichtigen Standard bei der Entwicklung von Web- und Business-Anwendungen. Gewiss beinhaltet die Java-EE-Spezifikation eine umfangreiche Menge an Technologien, die oft miteinander verknüpft oder aufeinander aufbauend sind, so dass die Anlernzeit für das JEE-Thema nicht gerade verkürzt wird. Dafür wird man aber beim Entwickeln anhand von diesen Technologien mit einem verteilten, hochskalierbaren System belohnt. Die Java EE 5 soll die Entwicklung von Web- und Unternehmensanwendungen mit neuen Techniken erleichtern und vorantreiben, dazu gehören die APIs EJB 3.0 und JavaServer Faces sowie das Java Persistence API und das JAX-WS. Die JEE-Entwicklung wird dazu auch durch zahlreiche Entwicklungsumgebungen (Netbeans, Eclipse...) unterstützt. Durch die Tatsache, dass es mehrere Java EE-5-konforme Application-Server (darunter auch Open-Source-Produkte) gibt, können sich Entwickler nun ausschließlich auf die Business-Logik konzentrieren. 

 



zurück zur Artikel-Übersicht