Java 9 – evolutionäre oder revolutionäre Weiterentwicklung?

Java 9 – evolutionäre oder revolutionäre Weiterentwicklung?

In gut sieben Monaten ist es so weit: Das Java Release 9 erscheint. Wir werfen bereits heute einen Blick auf die Neuerungen – was kommt und was nicht?

Java 8 brachte mit den Lambda-Ausdrücken eine der größten Syntaxveränderungen in der Geschichte von Java mit sich, die in der Entwicklercommunity auf große Akzeptanz stieß. Weitere wesentliche Erweiterungen waren die neuen Stream-, Datums- und Uhrzeitbibliotheken. Nun steht Java 9 in den Startlöchern: funktional abgeschlossen und gerade in der Testphase, die Veröffentlichung ist für März 2017 angekündigt. Kann der Nachfolger genauso überzeugen wie sein Vorgänger? Wir haben uns die Neuerungen angesehen. Drei Mal heißt es Daumen nach oben – zwei Mal sind wir enttäuscht, denn diese Funktionen haben es nicht in das Release geschafft.

Modularisierung: das Projekt Jigsaw
Die bisherigen Konzepte der Java-Plattform zur Modularisierung sind nicht ausreichend. Entwickler, die in der Host-Transaktionsprogrammierung tätig sind, wundern sich nicht selten, wie wenig modular Java-Systeme zur Laufzeit aufgestellt sind. Sie müssen sich mit Bibliotheken wie OSGi behelfen, um zumindest außerhalb der Java-Plattform ansatzweise eine Modularisierung erreichen zu können. Java 9 bietet nun eine Lösung: Pro Modul kann definiert werden, welche anderen Module integriert bzw. welche Schnittstellen nach außen über die Modulgrenzen hinweg sichtbar sein sollen. Dadurch dass jedem Modul eine eigene Umgebung (Classloader) zugeordnet werden kann, sind die modulspezifischen Pakete und Klassen auch zur Laufzeit unabhängig voneinander. Neben der Möglichkeit, Anwendungen über Java-Bordmittel zu modularisieren, wird die Java-Plattform selbst modular aufgebaut sein. Ziel dieser Flexibilitätsoption ist, dass bspw. auf mobilen Endgeräten nicht mehr das gesamte JDK bereitgestellt werden muss.
Die erste REPL-Funktion für Java
Java 9 wird als neue Funktion eine REPL-Shell (Read, Evaluate, Print und Loop) namens JShell mitbringen – aktuell muss man hier noch auf eine Drittkomponente zurückgreifen. Damit können Funktionen oder Algorithmen getestet werden, ohne dass eine Java-Klasse dafür geschrieben werden muss. Interessant ist, dass JShell auch die Möglichkeit bietet, einen Workspace abzuspeichern oder wieder zu laden.
Unterstützung von HTTP/2
In Java 9 wird die Unterstützung von HTTP/2 angeboten, das als Nachfolger des HTTP/1.1-Standards zahlreiche Performanceverbesserungen mit sich bringt. Dazu gehört die Möglichkeit, dass der Server aktiv Content an den Client sendet und dafür nicht auf Anfragen des Clients warten muss. Eine weitere Optimierungsmaßnahme stellt die Mehrfachverwendung einer HTTP-Verbindung für Anfragen dar (Multiplexing). In der Praxis wird sich dadurch die Performance von dynamischen Web-Anwendungen mit einer großen Zahl dynamischer Aktualisierungen weiter verbessern.
Keine Datentypen für Geldbeträge und Währungskurse
In Anlehnung an die mit Java 8 eingeführten Datums- und Zeitbibliotheken sollten in Java 9 Datentypen für Geldbeträge und Währungskurse eingeführt werden. Damit wäre die Möglichkeit gegeben, Daten von Kursdatenanbietern (z.B. European Central Bank und International Monetary Fund) direkt zu unterstützen oder eigene Kursdatenprovider (z.B. für eine Near- oder Realtime-Kursdatenversorgung) zu entwickeln.
Leichtgewichtige JSON-API lässt auf sich warten
Java sollte im kommenden Release eine eigene leichtgewichtige JSON-API erhalten. Entwickler wären dann nicht mehr auf Drittbibliotheken angewiesen gewesen. Diese Erweiterung entfällt, dabei hätte sie eine hohe Praxisrelevanz gehabt: JSON ist mittlerweile das Standardaustauschformat in der Kommunikation zu REST-Services.

Konkurrenzfähigkeit erfordert Stringenz

Um auf die Eingangsfrage zurückzukommen: Java 9 – evolutionäre oder revolutionäre Weiterentwicklung? Verglichen mit dem Wechsel von Java 7 auf Java 8 ist der Sprung sicher ein kleinerer, also eher Evolution. Nichtsdestotrotz stellt die Möglichkeit der Modularisierung innerhalb der Java-Plattform einen Meilenstein dar, der die Wartbarkeit verbessert und die Flexibilität durch eine einfachere Komponentisierung erhöht. Interessant wird dabei die Frage sein, ob die Option gegeben ist, bestehende Java-8-Anwendungen in eine modulbasierte Java-9-Anwendung zu migrieren. Kritisch zu bewerten ist sicher die Tatsache, dass es die Datentypen für Geldbeträge und Währungskurse sowie eine leichtgewichtige JSON-API nicht in das Major Release geschafft haben und hier weiter auf Ausweichlösungen gesetzt werden muss. Und auch die Verschiebung des Releasetermins von September 2016 auf März 2017 unterbricht die notwendige Stringenz in der Weiterentwicklung.

Eine ausführliche Übersicht über die neuen Funktionen stellt Ihnen der hinterlegte Link bereit.

 

An der Recherche und Erstellung dieses Beitrags waren meine Kollegen aus dem PASS Research-&-Development-Bereich Christian Henkel, Johannes Fuchs und Thomas Schnupp beteiligt. An dieser Stelle bedanke ich mich herzlich für die Unterstützung.


Bildquelle: Shutterstock

Hinterlassen Sie eine Antwort

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.