Blog

Java 17 is er, moet je upgraden?

Auteur Ruud W

Sinds september 2021 is Java 17 beschikbaar. De verwachting is is dat veel organisaties hier gebruik van zullen gaan maken. In deze blog licht ik toe waarom deze nieuwe versie interessant is en of het nodig is om te upgraden.

Hoe zit het ook alweer met al die Java versies?

Tot en met Java 9 werd de release datum bepaald door het gereedkomen van belangrijke features. Omdat de implementatie van deze features soms net ‘iets’ langer duurde dan gepland, werd de releasedatum steeds maar opgeschoven. Hierdoor moesten ontwikkelaars soms lang wachten voordat features die al wel gereed waren, beschikbaar kwamen.

Daarom is Java overgegaan naar een halfjaarlijkse release cyclus. Dus alle features die klaar zijn gaan mee en de rest schuift door naar een volgende release. Met deze gewijzigde release cyclus is er ook een wijziging gekomen in de ondersteuning hiervan. In principe eindigt de ondersteuning van een release, zodra er een nieuw release is uitgekomen. De ondersteuning voor Java 9 is geëindigd, met de release van Java 10.

Een uitzondering hierop vormen de zogenaamde ‘Long Term Support’ releases. Elke 2 a 3 jaar wordt er zo een LTS versie uitgebracht, waarbij de support dus langer is dan een half jaar (volgende release). Tot en met Java 8 was elke versie een LTS versie, daarna is in 2018 versie 11 als LTS versie uitgekomen. Java 17 is nu de volgende LTS release.

Belangrijkste features vanaf Java 8

Er zijn in de afgelopen Java versies een aantal verbeteringen doorgevoerd waardoor Java 17 iets sneller is dan zijn voorgangers. Daarnaast zijn er in de back-end taal een aantal verbeteringen doorgevoerd die het leven van een ontwikkelaar een stuk makkelijker maken. De volgende zijn een aantal interessante dingen die nog niet in Java 8 zaten.

  • Java Modules:  Het resultaat van project Jigsaw. Heeft de JDK netjes opgedeeld in modules. Geeft de mogelijkheid om een kleinere runtime te maken met een subset van de JDK modules. 

  • Var-keyword:  Met behulp van type inference kan het datatype van een variabele bepaald worden door de context waarin deze wordt gebruikt. Kan helpen om je code beter leesbaar te maken.
  • Switch Expression:  Uitbreiding op de bestaande switch zodat deze als expressies of als statement kan worden gebruikt.
  • Text-Blocks / Multiline Strings:  Eindelijk de mogelijkheid om html en queries leesbaar in je code te krijgen.
  • Records:  Voor simpele classes die alleen data bevatten moesten we voorheen een hoop getters. setters, en andere standaard methoden genereren. Door records is dit niet meer nodig en definieer je alleen de velden die je in je class wilt hebben, de rest gaat vanzelf.

  • Behulpzame NullPointerExceptions:  Omdat de NullPointerException nog steeds vaker voorkomen dan wij zouden willen, geeft Java nu een duidelijke foutmelding die aangeeft wat er null is.

Waarom zou je moeten upgraden?

Een belangrijke reden om te upgraden is simpelweg voor de nieuwe features die hierboven beschreven zijn. Deze kunnen zorgen voor meer productieve ontwikkelaars die met minder code hun oplossing kunnen realiseren. Daarnaast vinden ontwikkelaars het vaak leuk om nieuwe technologie te gebruiken. Ook bij het werven kan het helpen om te benoemen dat je de laatste Java versie gebruikt. Want dit zegt wat over hoe het bedrijf omgaat met nieuwe technologie.

Als je een perfect werkende applicatie hebt kan je je afvragen of het überhaupt wel nodig is om te upgraden. Vanuit het principe “if it ain't broke don't fix it” zou je natuurlijk je applicatie kunnen laten draaien zolang hij goed werkt, en daar is niet mis mee. Maar ook in Java worden zo af en toe security issues gevonden. Gelukkig worden deze voor alle ondersteunde Java versie opgelost en kan je je beschermen met een minor update. Dit betekent dat je niet daar een nieuwe Java versie hoeft zolang de ondersteuning doorgaat.

Volg jij de Java cyclus?

Volg je de nieuwe halfjaarlijkse release cyclus en zit je nu dus op Java versie 16, dan is per 30 september 2021 de actieve support geëindigd en dien je te upgraden.

Volg je netjes de route van de LTS versies en zit je nu dus op Java versie 11, dan heb je nog tot september 2023 voordat de actieve support wordt beëindigd. Je hebt dus nog even voordat je moet upgraden, maar hoe eerder je op versie 17 zit, des te eerder heb je de beschikking over alle nieuw beschikbaar gekomen features.

Zit je op nog steeds op Java 8 dan moet je er rekening mee houden dat in maart 2022 de ondersteuning minder wordt, zo krijg je vanuit Oracle alleen nog tegen betaling updates. Andere JDK leveranciers geven geven vaak tot 2026 nog ondersteuning voor Java 8. Een upgrade naar Java 17 zorgt dus dat je klaar bent voor de toekomst.

Is het Java upgraden moeilijk?

Hoe lang het upgraden duurt is lastig in te schatten. Java is grotendeels backwards compatible, maar er zijn in de loop van de tijd wel een aantal onderdelen van Java veranderd, daarnaast zijn enkele onderdelen komen te vervallen. Zo is er in Java 9 een hoop veranderd aan de wijze waarop class loading wordt uitgevoerd, en is sinds Java 17 het niet meer zomaar mogelijk via trucs (reflectie) toegang te krijgen tot interne Java classes.

Hoewel de meeste applicaties zelf helemaal geen gebruik zullen maken van deze vervallen onderdelen, is het mogelijk dat een framework of library (zoals spring of wildfly) hier wel gebruik van maakt. Het is daarom  belangrijk dat je de libraries voldoende up-to-date hebt. Als dit niet het geval is, dan is het bijwerken van de libraries mogelijk meer werk dan het upgraden van de Java versie zelf. Overigens is het bijwerken van open-source libraries altijd belangrijk, omdat ook hier vaak security issues in gevonden worden waar je niet vatbaar voor wil zijn.

Mijn advies

Ervaring leert dat een upgrade vanaf Java 11 naar Java 17 een stuk makkelijker is dan vanaf Java 8 naar Java 11. Sinds Java 11 zijn er er veel geleidelijker kleine wijzigingen doorgevoerd en meestal zijn open-source libraries ook getest met de tussenliggende Java versies. Hierdoor komen er veel minder (of zelf helemaal geen) pijnpunten naar boven bij een upgrade vanaf Java 11.

Het advies wat ik zou geven is om het gewoon te proberen. Werk de libraries eens bij en zet de Java versie eens op 17 en kijk wat er gebeurt. In mijn geval ben ik er achter gekomen dat in mijn huidige project vrijwel alle Java 11 applicaties zo over konden naar Java 17 met vrijwel geen code wijzigingen. Dit maakt het voor al deze applicaties dus mogelijk om gebruik te maken van de nieuwe functionaliteiten die Java 17 biedt.

Wil jij ook met Java 17 werken?

Wij zijn altijd op zoek naar Java Developers

Vacature Java Developer

Bekijk nu