De Adrien Orsier dans Technique
7 Avr 2017Plusieurs fois reportée, la sortie de JAVA 9 se rapproche enfin : un rapide tour d’horizon s’impose !
Java 9 est déjà prévu depuis un bon moment, et a été plusieurs fois retardé.
La première fois que Java 9 et sa liste de fonctionnalités ont été annoncés, c’était le 11 Août 2014, soit il y a bientôt 3 ans.
Depuis cette date, la sortie de Java 9 a été plusieurs fois repoussée, la faute principalement au projet Jigsaw, qui a été intégré à Java 9 et met en œuvre la modularisation de la plateforme Java.
Normalement, à l’heure où j’écris ces lignes, Java 9 devrait sortir le 27 Juillet 2017.
Les nouveautés de cette version sont naturellement assez nombreuses, donc je ne vais pas faire une présentation exhaustive, mais une sélection de ce qui m’a semblé le plus intéressant.
J’en ai parlé un peu dans l’introduction. C’est donc une notion de module qui apparait en Java 9.
On va donc pouvoir déclarer des Modules et les utiliser.
Une petite explication s’impose.
Dans Java 9, un module est défini par 3 concept :
Ainsi, on peut voir le module suivant :
1 2 3 4 5 |
module com.foo.bar { requires com.other_foo ; exports com.foo.bar.api ; exports com.foo.bar.engine ; } |
On a donc un module com.foo.bar qui utilise le module com.other_foo (on dit qu’il le read), et qui export le package com.foo.bar.api ainsi que com.foo.bar.engine.
Ceci est un exemple très simple, mais on imagine du coup que ce nouveau concept permettra une meilleur modularité des applications (et notamment de toutes les parties métiers).
Comme les choses ne sont pas faites à moitié, Java 9 est lui-même modularisé, c’est à dire que dorénavant, on peut installer une JDK « de son choix », en ne prenant que les briques nécessaires au fonctionnement de son application.
Fini la vielle library HttpURLConnection et bienvenue à l’API http 2 Client donc !
Cette API peut être utilisée dorénavant en asynchrone (alors que l’ancienne n’utilisait qu’un thread pour la request la réponse), ainsi que toute une panoplie de fonctionnalités.
Voila un exemple qui effectue un appel asynchrone :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
HttpRequest req = HttpRequest .create(new URI(http://www.google.com)) .body(noBody()) .GET(); CompletableFuture<HttpResponse> aResp = req.sendAsync(); Thread.sleep(10); If (!aResp.isDone()) { aResp.cancel(true); System.out.println("Failed to reply in 10 seconds…"); return; } |
Cette fonctionnalité est un petit Shell qui permet d’évaluer des instructions Java. Il propose également une API qui permet donc d’évaluer des instructions dans du code Java.
Exemple :
1 2 3 4 5 6 7 |
JShell shell = JShell.create(); List<SnippetEvent> events = shell.eval("int i = 10;"); for(SnippetEvent event : events) { System.out.println(event); } |
Concrètement, le passage de Java 8 à 9 sera moins ardu que de Java 7 à 8, où de nombreux nouveaux concepts de programmation avaient été introduits.
Le principal changement, de mon point de vue de développeur, intervient au niveau de l’introduction des modules et donc de JigSaw, qui va permettre de mieux compartimenter notre code.
L’hébergement des applis Java 9 va demander un peu d’adaptation au sysadmin, puisque la JDK étant modulaire, on va pouvoir la rendre plus légère en n’intégrant que ce dont une application a besoin. Il est à noter que de gros efforts ont été également été fait sur la performance de la JVM, ce qui est évidemment un gros plus.
Évidemment, les changements présentés ici sont loin d’être exhaustifs.
Un peu en vrac, voilà des articles intéressants sur le sujet :
Un article très intéressant qui liste un peu plus exhaustivement les changements apportés par Java 9.
Un site qui présente l’avancement des développements sur Java 9 (et donc sa date de release), et qui concentre un certain nombre d’articles sur le sujet.