Java EE 8: Ein erster Blick

CDI 2.0

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die CDI-Spezifikation liegt in Version 2.0 vor – und dies verspricht bahnbrechende und fundamentale Neuerungen. Welche dies sind, und wie sie sich auf die Arbeit mit der CDI auswirken, darum geht es in diesem Video.

Transkript

Die Contexts and Dependency Injection- Spezifikation der Java-E8 liegt in Version 2.0 vor, das heißt, es müssen sich fundamental Dinge geändert haben. Was sich geändert hat, werden wir in diesem Video besprechen. Die erste und auch fundamentalste Änderung, die letztlich auch dafür sorgt, dass man von einer einen neuen Hauptversion spricht, ist die Modularisierung. Das Interessante ist, dass wir von dieser Modularisierung eigentlich nichts bekommen, die ist aber auf Ebene der Spezifikation ganz elementar. Diese Modularisierung führt dann auch dazu, dass CDI 2.0 in Java 9 integriert ist. Für uns im Alltag viel relevanter ist, dass CDI 2.0 nun auf Ebene von Events Asynchronitäten unterstützt. Das war in der Vergangenheit nicht der Fall. Da haben wir stets synchron gearbeitet. Und eine weitere Verbesserung sind die sogenannten Annotation Literals, die den Umgang mit literalen Werten erleichtern sollen. Ebenfalls neu ist die Möglichkeit, dass wir Annotationen wiederholen können. Ein ganz, ganz grundlegender Schwerpunkt der CDI-Spezifikation ist, dass sie in der Version 2.0 modular gestaltet worden ist. Das ist anders als in der Vergangenheit. In der Vergangenheit gab es nur die eine CDI-Spezifikation, und die ist jetzt aufgebrochen worden. Zum einen gibt es eine Spezifikation, die nennt sich Core CDI. Die beschreibt all das, was übergreifend gültig sein soll. Dann gibt es eine weitere Spezifikation, die sich CDI for Java SE nennt. Das ist die Spezifikation, die auch im Kontext der Java 9 Edition dann integriert und umgesetzt ist. Für uns relevanter ist allerdings die CDI for Java EE Spezifikation. Die ist nämlich Bestandteil der Java EE 8. Wie bereits erwähnt, bringt Java SE 9 dann auch eine Unterstützung für CDI 2.0 mit. Für uns ist das nur insofern von Bedeutung, als dass wir davon ausgehen können, dass Code, den wir im Kontext der Java EE 8 schreiben und vielleicht auf einem Client dann wieder verwenden wollen, auch problemlos funktionieren wird. Eine Änderung, die größeren Einfluss auf die Art und Weise, wie wir mit CDI-Komponenten interagieren haben, ist die Verarbeitung von Events. Events sind ja Dinge, die CDI-Komponenten auslösen können und auf die dann andere CDI-Komponenten reagieren können. Bisher war das Ganze aber immer nur stets synchron möglich, das heißt, es wurde ein Event ausgelöst, und dann wurde auch direkt darauf reagiert. Zukünftig kann das anders stattfinden. Bei der CDI 2.0 sind wir in der Lage, mit Events auch asynchron zu arbeiten. Das heißt, ich bin in der Lage, mir wie in diesem gezeigten Beispiel ein Event injizieren zu lassen und kann dann dieses Event asynchron feuern, das heißt, andere Komponenten asynchron darüber informieren, dass etwas stattfinden soll. Erst, wenn alle Eventlistener, also alle Komponenten, die damit interagieren wollen, auch interagiert haben, findet die Verarbeitung innerhalb meiner Komponente wieder weiter statt. Das ist innerhalb dieses When Complete Statements definiert, solange blockiere aber nicht. Das heißt, ich kann als auslösende Komponente weitere Aktionen vornehmen, Daten speichern, mit der Oberfläche interagieren oder was auch immer und kann gleichzeitig darauf warten, bis alle beteiligten Komponenten ihre Tätigkeiten abgeschlossen haben. Eine weitere Verbesserung der CDI 2.0 ging über ihren Vorgängerversionen, betrifft den Umgang mit literalen Annotationen. Literale Annotationen sind solche Dinge wie beispielsweise die named-Annotationen, die also nichts anderes machen, als einen Text zu transportieren. Und anhand dieses Textes kann ich dann beispielsweise im Web-Front-End mit Hilfe der Expression Language jeweilige Komponente identifizieren. Wenn wir das im eigenen Code machen wollten, also beispielsweise eine Instanz, die mit bar benannt worden ist, gesucht haben, war das nur sehr aufwändig möglich. Wir mussten dann beim beanManager eine inline-Implementierung der AbstractNamedLiteral-Klasse mitübergeben, und das war sehr, sehr, sehr viel schreibaufwand, um nur einfach eine einzelne Instanz suchen zu können. Das ging zwar wahr, aber eben äußert unbequem. Aus diesem Grund gibt es im Kontext der CDI 2.0 Version die NamedLiteral-Klasse. Zu der gibt es noch diverse weitere analoge Hilfsklassen für andere Dinge, die eben auch nur literal sind. Die NamedLiteral-Klasse bezieht sich explizit auf die Named Annotationen. Und wenn wir nun hier eine Komponente suchen, die die Annotation Named mit einem bestimmten Wert hat, dann können wir zukünftig mit NamedLiteral.of arbeiten und ersparen uns die Implementierung eines abstrakten Interfaces beziehungsweise einer abstrakten Klasse. Das macht das Leben dann doch schon um einiges einfacher, und vor allen Dingen den Code um einiges übersichtlicher. Eine letzte Erleichterung, die ich in dem Kontext der CDI 2.0 vorstellen möchte, sind wiederholte Annotationen. Bisher war es so, dass Annotationen nur einmalig möglich waren. Das war eine Einschränkung, die dann auf Ebene der Java-SE-8-Version aufgehoben worden ist und nun auf Ebene der CDI-2.0-Spezifikation auch ihren Niederschlag findet. Und wir können nun mehr also Annotationen mehrfach verwenden. Hauptsache - die unterscheiden sich in ihren Attributen. Wir sehen das hier in diesem Beispiel an der Language-Annotation. Und damit möchte ich meinen Rundgang durch die Neuerungen der CDI-Spezifikationen 2.0 beenden. Es wäre zugegebenermaßen nicht ganz einfach zu akzeptieren, dass es sich hierbei um eine neue Hauptversion handeln soll, wo doch die sichtbaren Änderungen für Entwickler, also Asynchrony events, Annotation literals oder wiederholte Annotationen eher sparsam sind. Wenn wir allerdings in Betracht ziehen, dass die Hauptaufgabe der Version 2.0 der CDI auch darin besteht, durch die Modularisierung auch im Client-Umfeld, also im Umfeld der Java SE 9 einsetzbar zu werden, dann kann man sehr wohl von einer neuen Hauptversion sprechen, denn diese Änderung ist fundamental. Erlaubt sie es uns doch, auch als Entwickler von Java-EE-Applikation denselben Code auf den Client zu portieren, wie wir ihn auf dem Server laufen haben, und mit denselben Mechanismen, mit denselben Annotationen und mit denselben Ideen zu arbeiten, wie wir das auf der Serverseite in Bezug auf Dependency Injection jetzt schon einige Jahre tun. Zu guter Letzt sei auch noch erwähnt, dass die Integration der CDI in die Java EE hiermit abgeschlossen ist, denn es ist nun so, dass die CDI wirklich übergreifend und überall im Java-EE-Umfeld einsetzbar ist. Die letzten Lücken (beispielsweise im Umfeld von JavaServer Faces) wurden mit der Version 8 der Java-EE-Spezifikation geschlossen. Und wenn man das alles tatsächlich zusammenaddiert, dann ist die CDI-Spezifikation-Version 2.0 dann doch eine würdige Hauptversion.

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!