Java EE 8: Ein erster Blick

JavaServer Faces 2.3

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
JSF 2.3 entwickelt die JavaServer-Faces-Spezifikation behutsam weiter – es gibt nunmehr eine deutlich tiefere Integration in CDI, eine verbesserte Java-8-Unterstützung und ein WebSockets-Framework.

Transkript

Die JavaServer-Faces sind das in der Java EE integrierte Web-Framework. Das mag manchen inzwischen in Zeiten von Single-Page-Applikationen auf Basis von HTML 5 und purem JavaScript vielleicht etwas anachronistisch vorkommen. Aber dieses Framework ist nach wie vor Top aktuell und bietet eine Menge an Funktionalitäten, die man sehr, sehr gerne in Anspruch nimmt, wenn man sich damit einmal auseinandergesetzt hat. In diesem Video klären wir, welche Neuerungen es in Version 2.3 der JavaServer-Faces-Spezifikation gibt. Nicht immer benötigt man revolutionäre Funktionalitäten, um ein gutes Framework noch besser zu machen. Das gilt speziell auch für JSF 2.3. Viele kleine Funktionalitäten wie beispielsweise das CDI-Alignment, oder die erweiterte Dependency Injection in Komponenten und in Bereichen, wo es bisher nicht ging, erleichtern dem Entwickler das Leben schon ganz gewaltig. Darüber hinaus sollten wir in der neuen Version die alten JSF Managed Bean-Annotationen nicht mehr verwenden, die sind nun offiziell deprecared. Und es gibt eine neue ManagedProperty-Annotation. Die gesamte Java Enterprise Edition basiert ja jetzt auf der Java Version 8 und das hat Auswirkung auf JSF, denn hier haben wir nun Unterstützung für die neuen Datums und Uhrzeitformate von Java 8. Zu guter Letzt sei die WebSocket-Unterstützung genannt, die sich nativ in der JSF wiederfindet. CDI also Contexts and Dependency Injection, dass DI-Framework der Java-Enterprise-Edition war ja schon in den vergangenen Versionen sehr präsent. Allerdings hat es nicht überall Auswirkung gezeigt, so war es in der Vergangenheit zum Beispiel relativ schwierig, den FacesContext direkt zu ermitteln, man konnte ihn sich nicht initiieren lassen, sondern man musste ihn über eine statische Hilfsmethode aufrufen. Dasselbe gilt für ExternalContext, UI-View-Route und so weiter und so fort, für eine ganze Menge an JSF spezifischen Kontexten und Informationen. Das hat sich jetzt geändert, im Kontext der JSF 2.3 können wir uns diese Hilfsklassen und diese Informationen direkt initiieren lassen. CDI bietet nun auch Unterstützung diverseste verschiedener Annotationen, die die Arbeit mit beispielsweise Headerwerten, Cookie-Session-Werten und so weiter und so fort vereinfachen sollen. Es war in der Vergangenheit ja so, dass wir an diese Informationen nicht unbedingt einfach rangekommen sind, wir haben sie dann immer über beispielsweise in FacesContext holen müssen, mussten dann dort die aktuelle Instanz abrufen, mussten dann auf den ExternalContext gehen und haben dann beispielsweise erst die RequestMap erreichen können. Diesen ganzen Weg können wir uns zukünftig sparen, indem wir die RequestMap- Annotation verwenden und dann das entsprechende Objekt initiiert bekommen. Und die weitreichendere Unterstützung von Dependency Injection, die wir gerade ja schon gesehen haben, macht auch vor JSF eigenen Komponenten nicht halt. So ist es nun möglich Validatoren, Converter und Behaviors direkt mit der CDI interagieren zu lassen, ohne wie man das bei JSF 2.2 machen musste, dann noch mal ein Workaround anzuwenden. Der Workaround, den man in der Vergangenheit immer hatte, war der, dass man die entsprechende Komponente in den CDI-Context mithilfe von einer beispielsweise @RequestScoped-Annotation gebracht hat, dann hat dort auch die Injection funktioniert. Allerdings auch nur eingeschränkt, denn EJB-Komponenten konnte man sich nicht initiieren lassen, das ging immer nur über direkten JNDI-Lookup und das war alles andere als elegant. Nun gibt es bei JSF 2.3 drei neue Annotationen, nämlich die @FacesConverter-Annotation, die @FacesValidator-Annotation und die @FacesBehavior-Annotation. Diese Annotationen werden natürlich auf Ebene der jeweiligen Komponenten hinterlegt. Darüber hinaus gibt es das managed-Attribut und hat dieses Attribut den Wert true, dann ist diese Komponente unter CDI Verwaltung und kann also auf alles zugreifen, was sich im CDI-Context befindet. In JSF 2.2 sah das also so aus, dass man wenn man hier beispielsweise einen Converter hatte, dann immer eine @RequestScoped- Annotation drauf packen musste und das hat eigentlich überhaupt gar keinen Sinn gemacht, denn ein Converter liegt nicht in einem @RequestScoped, der steht eigentlich ein ganzes Stückchen außerhalb. Bei JSF 2.3 ist das dann sauberer gelöst, hier gibt es eben nun diese besprochene @FacesConverter-Annotation mit dem managed-Attribut und wenn dieses den Wert true hat, dann können wir direkt CDI-Funktionalitäten in Anspruch nehmen. Wenn Sie bisher immer noch die alten klassischen JSF-Annotationen eingesetzt haben, dann sollten Sie nun mehr davon Abstand nehmen. Diese Annotationen sind ganz offiziell als deprecated gezeichnet und werden auch zukünftig nicht mehr unterstützt werden. Das bedeutet für uns als Entwickler, Hände weg davon, wir sollten auf CDI-Annotationen umsteigen, wir sollten einfach darauf achten, dass wir die Annotationen aus dem Namensraum javax.inject verwenden. Die komplette Java EE Version 8 basiert auf Java 8. Das merkt man an ganz vielen Stellen nicht, an anderen Stellen kann man eben einfach Java 8 Sprachspezifika einsetzen. Bei JSF 2.3 ist es so, dass das neue JSR 310 direkt unterstützt wird. Dieses JSR 310, dieser Request und diese Funktionalität bedeutete für die Java 8 Version, dass wir neue DATE- und Time-Klassen bekommen, die mehr Unterstützung für Zeitzonen mit sich bringen und die alten schon seit Java 1.1 als deprecated gekennzeichneten Funktionalitäten endlich adäquat ersetzen. Nachdem diese Funktionalitäten also nun in der Java Version 8 drin sind, können sie in der Enterprise Edition auch genutzt werden und zwar im Front-End. Dort gibt es ja die convertDateTime-Komponente und die unterstützt nun deutlich mehr Attribute. In der Vergangenheit war es so, dass dort lediglich DATE, time und both unterstützt worden sind, als Patterns beziehungsweise als Typen, die zu verwenden waren und nun gibt es eben Unterstützung für die mit Java 8 eingeführten Komponenten, sodass man localDate, localTime, localDateTime, offsetTime, offsetDateTime und zonedDateTime auch mit verwenden kann. WebSockets sind ja eine Technologie, die es erlaubt von Server zum Client Nachrichten zu versenden, ohne dass jetzt auf beiden Seiten Ressourcen unnötig blockiert werden. Eine Unterstützung für WebSockets gab es bisher im Kontext von JSF nicht, das hat sich nun geändert. Es gibt ein neues WebSocket-Tag und das erlaubt es uns, dass wir innerhalb einer JSF-Seite eine Verbindung zu einem WebSocket herstellen können. Zu diesem Zweck fügen wir in die Webseite das WebSocket-Element an und geben mithilfe seines Channel-Attributes an, an welchen WebSocket wir uns binden wollen. Es gibt dann einen Message-Listner, also eine Funktion, die aufgerufen wird wenn von der Serverseite eine Push-Nachricht versandt wird. Auf der Serverseite ist die Implementierung analog trivial. Es gibt eine @Push-Annotation, die wir im Kontext von CDI-Komponenten einsetzen können und diese @Push-Annotation definiert einen channel-Parameter und dessen Wert muss mit dem Wert in der JSF-Seite übereinstimmen. Es gibt eine PushContext-Klasse und die können wir nutzen, um dann die entsprechenden Nachrichten an die Clients zu versenden. Das Ganze dauert in der Erklärung fast schon länger als in der Umsetzung und funktioniert narrensicher. Und damit haben wir die wesentlichen, großen, neuen Änderungen im Kontext der JSF 2.3 besprochen, wir haben geklärt, dass es eine wesentlich tiefere Integration mit CDI gibt, dass wir Kontext und Dependency Injection jetzt auch auf Ebene von Komponenten verwenden können, wo das in der Vergangenheit nicht der Fall war, wir haben ebenfalls noch einmal angesprochen, dass die alten JSF-Annotationen nicht mehr zu verwenden sind, wir haben besprochen, dass wir mithilfe der Java 8 Integration und des ConvertDataTime-Elements in JSF-Seiten nun auch die neuen DATE- und Time-Klassen und deren Funktionalitäten nutzen können und wir haben uns angeschaut, wie einfach und straightforward wir mit WebSockets im Kontext der Java EE 8 und der JSF 2.3 Spezifikationen arbeiten können.

Java EE 8: Ein erster Blick

Lernen Sie die wichtigsten Neuerungen und Verbesserungen der akutellen Java-EE-Spezifikation kennen.

43 min (6 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:13.09.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!