Montag, 23. August 2010

Java EE 6 – Some of the Hot Topics in one breath

Java EE 6 hebt sich nochmals deutlich von der Vorgängerversion ab. Die Java EE Community hat die vielen neuen Funktionalitäten mitgeprägt, die zu mehr Flexibilität, besserer Erweiterbarkeit durch Service Provider Schnittstellen und zur Vereinfachung der Implementierung von Java EE 6 Anwendungen führen.

Java EE 5 basiert auf leichtgewichtigen Java Objekten (POJOs), die annotiert werden. Annotationen sind Metadaten, die ein POJO dekorieren und mit erweiterten Funktionalitäten ausstatten. Java EE 6 vereinfacht nochmals die Entwicklung von Java Enterprise Anwendungen durch neue Annotationen für beispielsweise Web Komponenten (Servlets und Servlet Filter).

Die Annotationen für Dependency Injection (DI) sind standardisiert worden, um die Portabilität zwischen den Frameworks zu erhöhen. Das Packaging von Java EE Applikationen ist einfacher geworden, sodass auch EJBs in einer WAR-Datei hinterlegt werden können. Das Packen der EJBs in einer JAR-Datei und Verwalten der JAR-Datei in einem EAR ist somit optional geworden.

JavaServer Faces 2.0 (JSR 314) beinhaltet durch die Aufnahme von Facelets in den Standard eine wesentliche Erleichterung bei der Programmierung von Web-Anwendungen. Facelets sind nun vollständig in JSF 2.0 integriert, sodass es sogar nicht mal mehr nötig ist den Facelets View-Handler in der faces-config.xml registrieren zu müssen. JSP-Seiten können zwar weiterhin im Frontend verwendet werden, es ist aber ratsam Facelets einzusetzen. Facelets haben einen Performancevorteil gegenüber JSP-Seiten. Seiteneffekte durch das unterschiedliche Phasenmodell der JSF- und JSP-Engine treten bei Facelets nicht auf.

Facelets unterstützen Templates, sodass bereits geschriebener Quellcode in Form von XHTML-Seiten wiederverwendet werden kann. JSF 2.0 hat Ajax-Funktionalitäten integriert, um dynamische Web-Applikationen entwickeln zu können, die nur dediziert Request-Responsezyklen nutzen.

Managed Beans können annotiert werden, ohne einen Eintrag in der faces-config.xml erzeugen zu müssen. Die Navigationsregeln in einer JSF-Anwendung sind nun entweder direkt im Quellcode oder weiterhin in der faces-config.xml definierbar. Zusätzlich zu den bereits vorhandenen Scopes (Request, Session, Application) einer Managed Bean ist nun auch ein View-Scope definierbar, der die Lebensdauer einer Managed Bean mit einer Ansicht verknüpft.

Managed Properties werden in JSF 2.0 in Form von Annotationen bei den Attributen einer Managed Bean Klasse hinterlegt. Die Unified Expression Language (Unified-EL) kann nun auch Methoden einer Managed Bean ansprechen, die Parameter beinhalten. Attribute von Managed Beans sind mit Bean-Validation (JSR 303) validierbar. Die Menge der Annotationen ist auf die Attribute von Managed Beans anwendbar. Die Konfigurierbarkeit einer JSF-Anwendung mit Hilfe der faces-config.xml ist deutlich einfacher geworden.

EJB 3.1 gestattet es eine Enterprise Bean nur mit der Bean-Klasse und ohne zusätzliche Schnittstelle zu spezifizieren. Der neue EJB-Typ Singleton erlaubt es seinen Status zwischen unterschiedlichen Instanzen von EJBs zu teilen. Session Bean Methoden können nun auch asynchron durch die Verwendung von @Asynchronous ausgeführt werden.

JPA 2.0 ist wesentlich erweitert worden, sodass beispielsweise die Konfigurierbarkeit mit Hilfe der persistence.xml für Java SE Umgebungen standardisiert worden ist. In JPA 2.0 können neben dem bekannten Mapping von Entitäten nun auch einfache Datentypen wie beispielsweise Mengen von Strings in Entities verwendet werden. Komponenten können ab JPA 2.0 auch selbst wieder Komponenten enthalten, die ebenso mit Embeddable annotiert wurden.

JPA 2.0 verwendet ebenfalls die API zur Validierung mit Hilfe von Annotationen wie @NotNull, @Max oder @Size. Die Validierung wird dabei automatisch nach den Callback-Methoden @PrePersist, @PreUpdate oder @PreRemove vorgenommen.

JPQL wurde erweitert, sodass nun auch Case-Statements in Abfragen (Updates und Selects) integriert werden können. Polymorphe Abfragen sind durch Typen begrenzbar. Die Rückgabewerte von Abfragen können mit dem TypedQuery-Interface nun typisiert werden und machen Typcasts bei getResultList() und getSingleResult() überflüssig. Mit JPA 2.0 wird nun ebenfalls eine Criteria API definiert die OO konforme Abfragen erlaubt. Neben dem optimistischen Locking unterstützt JPA 2.0 nun auch das pessimistische Locking mit drei neuen Lock Modi.

JAX-RS (JSR 311) erweitert die schnittstellenbasierte Anwendung des Provider-Interfaces von Java EE 5 um spezielle Annotationen für RESTful Web Services. Die Programmierung wird durch die neuen Annotationen vereinfacht und erlaubt es leichtgewichtige Web Services auf Basis von XML zu implementieren. JAX-RS übersetzt MIME Datentypen automatisch in Java-Datentypen. Die neue API beinhaltet nützliche Utility-Klassen und Schnittstellen um Web Services ohne den „Overhead“ von SOAP umsetzen zu können. JAX-RS hebt den Programmierlevel an und verdeckt dediziert HTTP-spezifische Details.

CDI (JSR 299) bedeutet “Contexts and Dependency Injection for Java EE”. CDI bildet eine Brücke zwischen JSF Managed Beans und EJB Session Beans. Dabei wird der Lebenszyklus beider Technologien gebunden um lose gekoppelt miteinander interagieren zu können. CDI vereinfacht und vereinigt das EJB und JSF Programmiermodel. Durch CDI können EJBs wie Managed Beans agieren. Der Web Beans Ansatz, der bereits bei JBoss Seam zu finden ist, dürfte die Inspiration für CDI gewesen sein. CDI erfüllt wesentliche Anforderungen an den Transaktionssupport in der Web-Schicht und reduziert gleichzeitig das Klassenmodell für die Implementierung einer Web-Anwendung.

Bitte einmal Luft holen und weiterarbeiten...