Java 17 Migrationen
Die Wartbarkeit eines Softwaresystems ist entscheidend für seinen wirtschaftlichen Betrieb und seine Weiterentwicklung. Das erreicht man durch stete Aktualisierung verschiedener Komponenten, was nicht zuletzt auch eine effektive Methode ist, im Team die Know-how-Basis zu fördern und sicherzustellen. Dadurch wird auch die Wartbarkeit gewährleistet.
Seit Java 9 hat sich der Release Zyklus beschleunigt. So wird seit Java 10 alle sechs Monate ein Zwischenrelease freigegeben und alle drei Jahre ein Long Term Support Release (LTS) definiert. Die Migration von Java 11 zu Java 17 umfasst demnach 6 Häppchen, statt eines grossen Brockens.
Code-Vereinfachungen und das Einführen neuer Features sowie proaktive Eliminierung zukünftig nicht mehr unterstützter APIs sind wichtige Treiber für ein Java-Update.
Ein Beispiel für Reduktion und Vereinfachung ist das mit Java 17/18 (Preview) eingeführte Pattern Matching bei Switch Statements:
Statt einer verschachtelten ‚if‘-Abfolge im oberen Beispiel (gelb markiert), kommt eine 'switch' Anweisung (unten, gelb markiert) und erkennt automatisch:
- Zuordnung des Objektes (String)
- Handhabung von NULL-Werten und
- Setzen des Standardverhaltens: Werfen einer Exception
Der Code ist aufgeräumt und lässt sich leichter lesen.
Grundvoraussetzung für die Zuverlässigkeit der durchgeführten Aktualisierungen ist die Funktionalitätsüberprüfung der Applikationen durch eine möglichst hohe automatisierte Komponententestabdeckung.
Im Idealfall kann neben der Erhöhung der Java-Version auf der Build-Infrastruktur auch mittels automatisierter Deployment-Infrastruktur das Laufzeitverhalten von Web-Applikationen durch automatisierte GUI-Tests abgesichert werden.
Die Möglichkeit, häppchenweise Java-Versionen zu aktualisieren, dient uns auch als Treiber, die von uns verwendeten Software-Komponenten (Frameworks, Bibliotheken etc.) aktuell zu halten und zukünftige Migrationen schmerzfreier und kostengünstiger durchzuführen.
In diesem Sinn – kleine Schritte sind besser als grosse.