SlideShare une entreprise Scribd logo
Back to the future of
Java
DE JDK 1 À JDK 11, VOIRE MÊME PLUS CAR LÀ OÙ ON VA, ON N’A PAS
BESOIN… DE ROADMAP… EN FAIT SI !
Jérôme Tamborini
1
Jérôme Tamborini
C’est qui lui ?
@jerometambo
Mais il a déjà fait des
talks (on croirait pas) ?
 TP Git avancé
 Talk sur les tests
exploratoires
2
Disclaimer
 Tout ce que je vais présenter ici ce soir
 est le fruit de ma pure compréhension personnelle
 n’engage que moi
 Talk plutôt technique
 jerome.tamborini@gmail.com
3
Qu’est-ce qu’il va raconter celui-ci ?
 Comment Java ? Java bien et toi ?
 Java 8 : λ, oui mais quoi d’autre ?
 Que se passe-t-il après Java 8 ?
 Java 9, 10 et 11
 REX : je migre mon projet de 1.8 à 11
 Au secours on ne comprend plus rien !
4
Comment Java ? Java bien et toi ?
 Syntaxe dérivée du C
 Java a été conçu pour résoudre un problème
 Write once
 Run anywhere
 JVM
5
Comment Java ? Java bien et toi ?
 Nan mais aujourd’hui Java c’est mort
6
Comment Java ? Java bien et toi ?
 Java c’est « has been » il parait …
 Sauf que pas de bras, pas de chocolat !
7
Comment Java ? Java bien et toi ? 8
9
Java 8 : λ, oui mais quoi d’autre ?
 Plus grosse évolution de Java en 15 ans
 Programmation fonctionnelle
 « Ah oui je comprends mieux »
10
Java 8 : λ, oui mais quoi d’autre ?
 λ
 Closure
 Redéfinition de la SAM d’une @FunctionalInterface
 Plusieurs « grands » types
 Predicat
 Consumer
 Supplier
 Function
 Apparition d’un nouvel opérateur : ->
 myString -> System.out.println(myString)
11
Java 8 : λ, oui mais quoi d’autre ?
 Streams (et Collectors)
 A quoi ça sert ?
 Traiter efficacement des données
 Map, Filter, Reduce
 Ecrire de façon simple
 Pourquoi ne pas avoir fait évoluer Collections
 Mains libres
 Ne pas polluer l’API la plus utilisée de Java
12
Java 8 : λ, oui mais quoi d’autre ?
 Streams (et Collectors)
 Du coup c’est quoi un Stream ?
 Un objet qui sert à définir des opérations
 Ne possède pas les données qu’il traite
 S’interdit de modifier les données qu’il traite
 Traite les données en une passe
 Possède deux types d’opération
 Intermédiaires
 Finales
 Optimisé d’un point de vue algo
 Capable de calculer en //
13
Java 8 : λ, oui mais quoi d’autre ?
 Optional<T>
 La supposée fin des NPE (au moins des nullCheck)
 Permet de tester la présence / l’absence de valeur
 Peut se voir comme un Stream à 0 ou 1 élément
 Coût (négligeable) en performances
 Limitations
 final
 Non sérialisable
 Mon avis
 Pas de retour
 Pas de variable d’instance
 Pas en paramètre
14
Java 8 : λ, oui mais quoi d’autre ?
 Un peu de code ?
15
Java 8 : λ, oui mais quoi d’autre ?
 Les dates, c’est une horreur en Java !
 Du coup nouvelle API java.time
 On parle désormais de
 Temps machine
 Instant
 Duration
 Temps humain
 ZoneId, ZonedDateTime, etc.
 LocalDate, LocalDateTime, etc.
 DayOfWeek, MonthDay, etc.
 Passerelles entre Date/Calendar et java.time
16
Java 8 : λ, oui mais quoi d’autre ?
 Et la mémoire dans tout ça ?
 Remplacement de PermGen par Metaspace
 Metadatas sur les classes
 Zone spéciale de la heap
 -XX:PermSize=N  -XX:MetaspaceSize=N
 -XX:MaxPermSize=N  -XX:MaxMetaspaceSize=N
17
Java 8 : λ, oui mais quoi d’autre ?
 Java + JavaScript = ❤
 Nashorn : moteur javascript embarqué pour la JVM
 Intégration de code backend Java + JS
 Plus besoin de
 Node.js (par ex.)
 IPC/RPC ou qu’est-ce pour communiquer

18
Java 8 : λ, oui mais quoi d’autre ?
 Mais encore
 Parallel arrays
 parallelSort()
 Jmh
 Outil de benchmark d’algo
 Type annotations
 @NonNull Object ref = null; // A checker will throw an exception
 Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;
 Method references
 Consumer<String> c = s -> System.out.println(s);
 Consumer<String> c = System.out::println;
 Méthodes par défaut et statiques dans les interfaces
19
Que se passe-t-il après Java 8 ?
 Critiques
 « Evolution trop lente de Java »
 « Pas d’évolutions majeures pour suivre les besoins du monde du dev. »
 Attention ça change !
 Une version tous les 6 mois
 Version LTS ou non
 OracleJDK
 OpenJDK
 Durée de release réduite -> nombre de fonctionnalités réduit
 http://www.oracle.com/technetwork/java/eol-135779.html
20
Que se passe-t-il après Java 8 ?
 Les impacts sur notre cycle de dev ?
 Avoir une CI
 De bonne facture
 Permettre de tester la compil’, l’assemblage
et la validation sur une Nighty build
 Versions EA
 Open JDK
 Upgrade de version de Java sereinement
21
22
Java 9 : elle existe cette version ?
 Introduit des changements majeurs
 Codename Jigsaw : modules, modules everywhere
 Java Platform Module System
 Changement le plus structurel
 89 JEPs
 APIs
 Outils
 Performances / JVM
23
Java 9 : elle existe cette version ?
 Les modules
 C’est contraignant
 Moins de liberté
 Accès
 Introspection
 Split packages
 Dépendances cycliques interdites
 Gestion supplémentaire
 Mais c’est pas pour rien
 Encapsulation forte
 Sécurité
 Maintenabilité
 Supprimer (à terme) les problèmes de
« classpath hell »
 Remettre de l’ordre dans nos gros
projets Java
 Performances
24
Java 9 : elle existe cette version ?
 Et c’est quoi alors ces modules ?
 Ensemble de code (de packages)
et de ressources nommé
 Décrit sa visibilité et ses dépendances
 Via un fichier module-info
 Introduction du module-path
 Ne remplace pas (encore) le classpath
25
Java 9 : elle existe cette version ?
 Plusieurs types de modules (pour notre bien)
 Platform modules
 JRE
 Unnamed module
 « One module to rule them all »
 Classes, jars du class-path
 Tous les packages sont exposés
 Accès à tout
 App Named modules
 Jars modulaires dans le module path
 Automatic modules
 Jars « standard » (non modulaires)
 Placés dans le module path
 Tous les packages sont exposés
 Nom calculé depuis le nom du Jar ou spécifié
dans le fichier MANIFEST.MF
26
Java 9 : elle existe cette version ?
 Mais du coup le JDK, il est modulaire ?
27
Java 9 : elle existe cette version ?
 Et on a des outils pour nous aider ?
 Jdeps
 java –describe-module java.sql
 Jlink
 Créer une version « custom light » du JRE utilisé
 ~200Mo JRE complet
 ~30Mo JRE avec juste le module java.base
28
Java 9 : elle existe cette version ?
 Parallèle avec les outils de build (Maven / Gradle)
 JPMS ne prend pas en charge les versions
 JPMS ne va pas aller récupérer les dépendances dans un repo
29
Java 9 : elle existe cette version ?
 En vrai ça donne quoi ?
30
Java 9 : elle existe cette version ?
 « Moi j’aimerais bien livrer un jar runnable sous plusieurs versions de Java
! » : Multi Release Jars
 Permet d’avoir plusieurs versions d’une même classe
 Compilées avec des versions différentes de Java
 A partir de la version 9
31
Java 9 : elle existe cette version ?
 « Mes devs aiment utiliser des méthodes dépréciées …
…en tout cas, ça n’a pas l’air de les déranger beaucoup »
 Outil dispo : jdeprscan

32
Java 9 : elle existe cette version ?
 Des fois on aimerait bien tester du code tout simplement à la python
(REPL)
 JShell

33
Java 9 : elle existe cette version ?
 Du coup, comment migrer évoluer d’une version ≤ 8 vers une version ≥ 9
 Ca dépend, ça dépasse
 Petit projet + pas beaucoup de dépendances  One shot possible
 Gros projet + pas beaucoup de dépendances  Prendre son temps pour identifier
les modules puis les créer
 Gros projet + beaucoup de dépendances  Itératif
 La mauvaise idée
 On touche à rien (bah oui ça marche comme ça, pourquoi on changerait ?)
 Fin support JDK 1.8 en janvier 2019
 Plus d’évolutions, plus de mises à jour du JDK, plus de mises à jour de sécurité
34
35
Java 10 : what’s new ?
 Inférence de type
 Un prémice dans Java 1.7
 ArrayList<String> strings = new ArrayList<>();
 Un vrai (début) d’implémentation dans Java 10 : var
 HashMap<String,List<Personne>> tableCorrespondance = new
HashMap<String,List<Personne>>();
 var tableCorrespondance = new HashMap<String,List<Personne>>();
 Variables locales
 Initialisées
36
Java 10 : what’s new ?
 API Collections
 Je veux une version immuable de ma collection
 List.copyOf(), Set.copyOf(), et Map.copyOf().
 API Collectors
 Collectors.toUnmodifiableList()
 Collectors.toUnmodifiableSet()
 Collectors.toUnmodifiableMap(keyFunc, valueFunc)
37
Java 10 : what’s new ?
 Amélioration des performances
 Optimisation du G1
 Thread-Local Handshakes
 Application Class-Data Sharing

38
39
Java 11 : déjà ?
 Ca sort quand ?
 http://www.java-countdown.xyz/
 25/09/2018
 2ème version LTS (Long Time Support)
 Moins de features
 10 JEPs sûrs
 https://bugs.openjdk.java.net/secure/Dashboard.jspa?selectPageId=17668
40
Java 11 : déjà ?
 Suppression des modules JavaEE et Corba
 Sortie de JavaFX du JDK  OpenJFX (OpenJDK)
 Sécurité
 TLS 1.3
 Algorithmes de chiffrement
 ChaCha20
 Poly1305
 Simplification du client HTTP
 Fabriques sur HttpClient, HttpRequest et HttpResponse
41
Java 11 : déjà ?
 Scripting en java ?
 Launch Single-File Source-Code Programs

 Effet demo ? Effet Windows 
 ./hello 2018
42
Java 11 : déjà ?
 Local-Variable Syntax for Lambda Parameters
43
Et après Java 11 ?
 Project Valhalla
 JEP 169: Value Objects
 JEP 218: Generics over Primitive Types
 Perfs : rapprocher la gestion des types extends Object
de la gestion des types primitifs
 Permettre les types primitifs dans les Generics
44
Et JavaEE, on en parle ?
 Bah on peut, déjà ça ne s’appelle plus JavaEE
 Depuis 09/2017
45
REX : je migre mon projet de 1.8 à 11
 Java 1.8  Java 10
 Tests Powermock sortent en exception au run (InitializationError)
 Relimiter la taille des fichiers JSP
 <jsp:include> à préférer à <%@ include file="...jspf" %>
 Java 10  Java 11
 Ajouter les dépendances au niveau de Maven/gradle de ce qui est supprimé de JDK
 Eclipse pas encore prêt, utiliser IntelliJ
 Liquibase : ça compile mais... ça plante. Il faut monter au dessus de la 3.5.4
 Maven prêt pour compiler : monter le compiler-plugin en 3.8.0 en précisant release
11
46
Au secours on ne comprend plus rien !
 Ah mais c’est pas simple ! Faisons le point.
 « On est obligé de rendre notre application modulaire »
 Non pas du tout, lorsque l’on ne fait rien le code tourne dans l’unnamed module
 « Du coup il y a 2 versions de Java par an désormais ? »
 Oui, à mois fixe : mars et septembre
 « J’ai jamais compris la différence entre OpenJDK et OracleJDK »
 C’est pas grave, à partir de Java 11 il n’y en a plus
 Flight Recorder et Mission Control seront inclus dans OpenJDK
 Java FX et Java Web Start supprimés de Oracle JDK
47
Au secours on ne comprend plus rien !
 Ah mais c’est pas simple ! Faisons le point.
 « Y’aura encore des mises à jour sur les versions de Java ? »
 Versions non LTS
 Plus de mises à jour dès la sortie de la version suivante
 Versions LTS
 Mises à jour, si on a choisit l’Oracle JDK et ce qui va avec  $$$
 Plus de mises à jour dès la sortie de la version suivante si on a choisit l’OpenJDK
 « Et du coup les LTS ? »
 La première c’est Java 1.8, avec fin de support gratuit en 01/2019
 Après c’est Java 11, puis Java 17, puis Java 23, etc.
48
Au secours on ne comprend plus rien !
 Ah mais c’est pas simple ! Faisons le point.
 « Alors on ne peut plus utiliser OracleJDK si on ne paye pas ? »
 Apparemment si, pour le développement et les tests seulement
 Pour la production  $$$
49
Echanges avant l’apéro
 Références / Remerciements
 https://dzone.com/
 https://blog.codefx.org/
 https://www.azul.com/
 https://www.jmdoudoux.fr/
 Devoxx & Youtube
50

Contenu connexe

PPTX
Java 11 to 17 : What's new !?
PPTX
Java version 11 - les 9 nouveautes
PDF
Voxxeddays lux 2018 apres java 8, java 9 et 10
PDF
Devoxx 2018 Après Java 8, Java 9 et 10
PDF
Nantes jug 2018 - Java le changement c'est maintenant
PDF
Java 9 modulo les modules devoxx fr 2017
PDF
Lyon JUG 2018 - Java le changement c'est maintenant
PDF
Voxxdays luxembourg 2016 retours java 8
Java 11 to 17 : What's new !?
Java version 11 - les 9 nouveautes
Voxxeddays lux 2018 apres java 8, java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10
Nantes jug 2018 - Java le changement c'est maintenant
Java 9 modulo les modules devoxx fr 2017
Lyon JUG 2018 - Java le changement c'est maintenant
Voxxdays luxembourg 2016 retours java 8

Tendances (20)

PDF
Apres java 8, java 9 et 10 - BreizhCamp 2018
PDF
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
PDF
Nouveautés Java 9-10-11
PPTX
Nouveautés de java 8
PDF
"Input/Ouput, 16 ans après" à Devoxx France 2012
PDF
Base11
PDF
Java 2015 2016_zied_elleuch
PPTX
Poza 2019 11-21-java_oueneston
PDF
Programmation Java
PDF
Formation Gratuite Total Tests par les experts Java Ippon
PDF
Introduction à Groovy - OpenSource eXchange 2008
PDF
Arquillian - YaJUG - nov. 2012
PDF
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
PDF
Spring Batch - concepts de base
PPTX
Retours Devoxx France 2016
PPTX
Présentation1
PDF
I le langage java d'una manière avancée introduction
PPT
L'écosystème Java
PPTX
Quoi de neuf à Devoxx France 2017 ?
Apres java 8, java 9 et 10 - BreizhCamp 2018
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
Nouveautés Java 9-10-11
Nouveautés de java 8
"Input/Ouput, 16 ans après" à Devoxx France 2012
Base11
Java 2015 2016_zied_elleuch
Poza 2019 11-21-java_oueneston
Programmation Java
Formation Gratuite Total Tests par les experts Java Ippon
Introduction à Groovy - OpenSource eXchange 2008
Arquillian - YaJUG - nov. 2012
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Spring Batch - concepts de base
Retours Devoxx France 2016
Présentation1
I le langage java d'una manière avancée introduction
L'écosystème Java
Quoi de neuf à Devoxx France 2017 ?
Publicité

Similaire à Back to the future of java (from 8 to 11 and beyond) (20)

PDF
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
PDF
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
PPTX
Javavs net
PDF
[Java] Versioning & Nouveautés JDK 12-15
PDF
Chap 02 poo en java
PPTX
Seance_1_cours_introduction_java_Copie.pptx
PDF
Présentation de JEE et de son écosysteme
PPT
Java uik-chap1-intro java
PPTX
Ces outils qui vous font gagner du temps
PPTX
Javaoop
PPT
Présentation Groovy
PPT
Présentation Groovy
PDF
Patrons de conception de la programmation fonctionnelle
PPTX
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
PPTX
Devoxx 2017 : toutes les actualités technologiques à surveiller !
PDF
Devoxx France 2023 - Les nouveautés de Java 19 et 20
PPTX
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
PPTX
Support cours j2_ee
PDF
Pluggable annotation processing api
PPT
Presentation Spring
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javavs net
[Java] Versioning & Nouveautés JDK 12-15
Chap 02 poo en java
Seance_1_cours_introduction_java_Copie.pptx
Présentation de JEE et de son écosysteme
Java uik-chap1-intro java
Ces outils qui vous font gagner du temps
Javaoop
Présentation Groovy
Présentation Groovy
Patrons de conception de la programmation fonctionnelle
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx France 2023 - Les nouveautés de Java 19 et 20
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
Support cours j2_ee
Pluggable annotation processing api
Presentation Spring
Publicité

Back to the future of java (from 8 to 11 and beyond)

  • 1. Back to the future of Java DE JDK 1 À JDK 11, VOIRE MÊME PLUS CAR LÀ OÙ ON VA, ON N’A PAS BESOIN… DE ROADMAP… EN FAIT SI ! Jérôme Tamborini 1
  • 2. Jérôme Tamborini C’est qui lui ? @jerometambo Mais il a déjà fait des talks (on croirait pas) ?  TP Git avancé  Talk sur les tests exploratoires 2
  • 3. Disclaimer  Tout ce que je vais présenter ici ce soir  est le fruit de ma pure compréhension personnelle  n’engage que moi  Talk plutôt technique  jerome.tamborini@gmail.com 3
  • 4. Qu’est-ce qu’il va raconter celui-ci ?  Comment Java ? Java bien et toi ?  Java 8 : λ, oui mais quoi d’autre ?  Que se passe-t-il après Java 8 ?  Java 9, 10 et 11  REX : je migre mon projet de 1.8 à 11  Au secours on ne comprend plus rien ! 4
  • 5. Comment Java ? Java bien et toi ?  Syntaxe dérivée du C  Java a été conçu pour résoudre un problème  Write once  Run anywhere  JVM 5
  • 6. Comment Java ? Java bien et toi ?  Nan mais aujourd’hui Java c’est mort 6
  • 7. Comment Java ? Java bien et toi ?  Java c’est « has been » il parait …  Sauf que pas de bras, pas de chocolat ! 7
  • 8. Comment Java ? Java bien et toi ? 8
  • 9. 9
  • 10. Java 8 : λ, oui mais quoi d’autre ?  Plus grosse évolution de Java en 15 ans  Programmation fonctionnelle  « Ah oui je comprends mieux » 10
  • 11. Java 8 : λ, oui mais quoi d’autre ?  λ  Closure  Redéfinition de la SAM d’une @FunctionalInterface  Plusieurs « grands » types  Predicat  Consumer  Supplier  Function  Apparition d’un nouvel opérateur : ->  myString -> System.out.println(myString) 11
  • 12. Java 8 : λ, oui mais quoi d’autre ?  Streams (et Collectors)  A quoi ça sert ?  Traiter efficacement des données  Map, Filter, Reduce  Ecrire de façon simple  Pourquoi ne pas avoir fait évoluer Collections  Mains libres  Ne pas polluer l’API la plus utilisée de Java 12
  • 13. Java 8 : λ, oui mais quoi d’autre ?  Streams (et Collectors)  Du coup c’est quoi un Stream ?  Un objet qui sert à définir des opérations  Ne possède pas les données qu’il traite  S’interdit de modifier les données qu’il traite  Traite les données en une passe  Possède deux types d’opération  Intermédiaires  Finales  Optimisé d’un point de vue algo  Capable de calculer en // 13
  • 14. Java 8 : λ, oui mais quoi d’autre ?  Optional<T>  La supposée fin des NPE (au moins des nullCheck)  Permet de tester la présence / l’absence de valeur  Peut se voir comme un Stream à 0 ou 1 élément  Coût (négligeable) en performances  Limitations  final  Non sérialisable  Mon avis  Pas de retour  Pas de variable d’instance  Pas en paramètre 14
  • 15. Java 8 : λ, oui mais quoi d’autre ?  Un peu de code ? 15
  • 16. Java 8 : λ, oui mais quoi d’autre ?  Les dates, c’est une horreur en Java !  Du coup nouvelle API java.time  On parle désormais de  Temps machine  Instant  Duration  Temps humain  ZoneId, ZonedDateTime, etc.  LocalDate, LocalDateTime, etc.  DayOfWeek, MonthDay, etc.  Passerelles entre Date/Calendar et java.time 16
  • 17. Java 8 : λ, oui mais quoi d’autre ?  Et la mémoire dans tout ça ?  Remplacement de PermGen par Metaspace  Metadatas sur les classes  Zone spéciale de la heap  -XX:PermSize=N  -XX:MetaspaceSize=N  -XX:MaxPermSize=N  -XX:MaxMetaspaceSize=N 17
  • 18. Java 8 : λ, oui mais quoi d’autre ?  Java + JavaScript = ❤  Nashorn : moteur javascript embarqué pour la JVM  Intégration de code backend Java + JS  Plus besoin de  Node.js (par ex.)  IPC/RPC ou qu’est-ce pour communiquer  18
  • 19. Java 8 : λ, oui mais quoi d’autre ?  Mais encore  Parallel arrays  parallelSort()  Jmh  Outil de benchmark d’algo  Type annotations  @NonNull Object ref = null; // A checker will throw an exception  Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;  Method references  Consumer<String> c = s -> System.out.println(s);  Consumer<String> c = System.out::println;  Méthodes par défaut et statiques dans les interfaces 19
  • 20. Que se passe-t-il après Java 8 ?  Critiques  « Evolution trop lente de Java »  « Pas d’évolutions majeures pour suivre les besoins du monde du dev. »  Attention ça change !  Une version tous les 6 mois  Version LTS ou non  OracleJDK  OpenJDK  Durée de release réduite -> nombre de fonctionnalités réduit  http://www.oracle.com/technetwork/java/eol-135779.html 20
  • 21. Que se passe-t-il après Java 8 ?  Les impacts sur notre cycle de dev ?  Avoir une CI  De bonne facture  Permettre de tester la compil’, l’assemblage et la validation sur une Nighty build  Versions EA  Open JDK  Upgrade de version de Java sereinement 21
  • 22. 22
  • 23. Java 9 : elle existe cette version ?  Introduit des changements majeurs  Codename Jigsaw : modules, modules everywhere  Java Platform Module System  Changement le plus structurel  89 JEPs  APIs  Outils  Performances / JVM 23
  • 24. Java 9 : elle existe cette version ?  Les modules  C’est contraignant  Moins de liberté  Accès  Introspection  Split packages  Dépendances cycliques interdites  Gestion supplémentaire  Mais c’est pas pour rien  Encapsulation forte  Sécurité  Maintenabilité  Supprimer (à terme) les problèmes de « classpath hell »  Remettre de l’ordre dans nos gros projets Java  Performances 24
  • 25. Java 9 : elle existe cette version ?  Et c’est quoi alors ces modules ?  Ensemble de code (de packages) et de ressources nommé  Décrit sa visibilité et ses dépendances  Via un fichier module-info  Introduction du module-path  Ne remplace pas (encore) le classpath 25
  • 26. Java 9 : elle existe cette version ?  Plusieurs types de modules (pour notre bien)  Platform modules  JRE  Unnamed module  « One module to rule them all »  Classes, jars du class-path  Tous les packages sont exposés  Accès à tout  App Named modules  Jars modulaires dans le module path  Automatic modules  Jars « standard » (non modulaires)  Placés dans le module path  Tous les packages sont exposés  Nom calculé depuis le nom du Jar ou spécifié dans le fichier MANIFEST.MF 26
  • 27. Java 9 : elle existe cette version ?  Mais du coup le JDK, il est modulaire ? 27
  • 28. Java 9 : elle existe cette version ?  Et on a des outils pour nous aider ?  Jdeps  java –describe-module java.sql  Jlink  Créer une version « custom light » du JRE utilisé  ~200Mo JRE complet  ~30Mo JRE avec juste le module java.base 28
  • 29. Java 9 : elle existe cette version ?  Parallèle avec les outils de build (Maven / Gradle)  JPMS ne prend pas en charge les versions  JPMS ne va pas aller récupérer les dépendances dans un repo 29
  • 30. Java 9 : elle existe cette version ?  En vrai ça donne quoi ? 30
  • 31. Java 9 : elle existe cette version ?  « Moi j’aimerais bien livrer un jar runnable sous plusieurs versions de Java ! » : Multi Release Jars  Permet d’avoir plusieurs versions d’une même classe  Compilées avec des versions différentes de Java  A partir de la version 9 31
  • 32. Java 9 : elle existe cette version ?  « Mes devs aiment utiliser des méthodes dépréciées … …en tout cas, ça n’a pas l’air de les déranger beaucoup »  Outil dispo : jdeprscan  32
  • 33. Java 9 : elle existe cette version ?  Des fois on aimerait bien tester du code tout simplement à la python (REPL)  JShell  33
  • 34. Java 9 : elle existe cette version ?  Du coup, comment migrer évoluer d’une version ≤ 8 vers une version ≥ 9  Ca dépend, ça dépasse  Petit projet + pas beaucoup de dépendances  One shot possible  Gros projet + pas beaucoup de dépendances  Prendre son temps pour identifier les modules puis les créer  Gros projet + beaucoup de dépendances  Itératif  La mauvaise idée  On touche à rien (bah oui ça marche comme ça, pourquoi on changerait ?)  Fin support JDK 1.8 en janvier 2019  Plus d’évolutions, plus de mises à jour du JDK, plus de mises à jour de sécurité 34
  • 35. 35
  • 36. Java 10 : what’s new ?  Inférence de type  Un prémice dans Java 1.7  ArrayList<String> strings = new ArrayList<>();  Un vrai (début) d’implémentation dans Java 10 : var  HashMap<String,List<Personne>> tableCorrespondance = new HashMap<String,List<Personne>>();  var tableCorrespondance = new HashMap<String,List<Personne>>();  Variables locales  Initialisées 36
  • 37. Java 10 : what’s new ?  API Collections  Je veux une version immuable de ma collection  List.copyOf(), Set.copyOf(), et Map.copyOf().  API Collectors  Collectors.toUnmodifiableList()  Collectors.toUnmodifiableSet()  Collectors.toUnmodifiableMap(keyFunc, valueFunc) 37
  • 38. Java 10 : what’s new ?  Amélioration des performances  Optimisation du G1  Thread-Local Handshakes  Application Class-Data Sharing  38
  • 39. 39
  • 40. Java 11 : déjà ?  Ca sort quand ?  http://www.java-countdown.xyz/  25/09/2018  2ème version LTS (Long Time Support)  Moins de features  10 JEPs sûrs  https://bugs.openjdk.java.net/secure/Dashboard.jspa?selectPageId=17668 40
  • 41. Java 11 : déjà ?  Suppression des modules JavaEE et Corba  Sortie de JavaFX du JDK  OpenJFX (OpenJDK)  Sécurité  TLS 1.3  Algorithmes de chiffrement  ChaCha20  Poly1305  Simplification du client HTTP  Fabriques sur HttpClient, HttpRequest et HttpResponse 41
  • 42. Java 11 : déjà ?  Scripting en java ?  Launch Single-File Source-Code Programs   Effet demo ? Effet Windows   ./hello 2018 42
  • 43. Java 11 : déjà ?  Local-Variable Syntax for Lambda Parameters 43
  • 44. Et après Java 11 ?  Project Valhalla  JEP 169: Value Objects  JEP 218: Generics over Primitive Types  Perfs : rapprocher la gestion des types extends Object de la gestion des types primitifs  Permettre les types primitifs dans les Generics 44
  • 45. Et JavaEE, on en parle ?  Bah on peut, déjà ça ne s’appelle plus JavaEE  Depuis 09/2017 45
  • 46. REX : je migre mon projet de 1.8 à 11  Java 1.8  Java 10  Tests Powermock sortent en exception au run (InitializationError)  Relimiter la taille des fichiers JSP  <jsp:include> à préférer à <%@ include file="...jspf" %>  Java 10  Java 11  Ajouter les dépendances au niveau de Maven/gradle de ce qui est supprimé de JDK  Eclipse pas encore prêt, utiliser IntelliJ  Liquibase : ça compile mais... ça plante. Il faut monter au dessus de la 3.5.4  Maven prêt pour compiler : monter le compiler-plugin en 3.8.0 en précisant release 11 46
  • 47. Au secours on ne comprend plus rien !  Ah mais c’est pas simple ! Faisons le point.  « On est obligé de rendre notre application modulaire »  Non pas du tout, lorsque l’on ne fait rien le code tourne dans l’unnamed module  « Du coup il y a 2 versions de Java par an désormais ? »  Oui, à mois fixe : mars et septembre  « J’ai jamais compris la différence entre OpenJDK et OracleJDK »  C’est pas grave, à partir de Java 11 il n’y en a plus  Flight Recorder et Mission Control seront inclus dans OpenJDK  Java FX et Java Web Start supprimés de Oracle JDK 47
  • 48. Au secours on ne comprend plus rien !  Ah mais c’est pas simple ! Faisons le point.  « Y’aura encore des mises à jour sur les versions de Java ? »  Versions non LTS  Plus de mises à jour dès la sortie de la version suivante  Versions LTS  Mises à jour, si on a choisit l’Oracle JDK et ce qui va avec  $$$  Plus de mises à jour dès la sortie de la version suivante si on a choisit l’OpenJDK  « Et du coup les LTS ? »  La première c’est Java 1.8, avec fin de support gratuit en 01/2019  Après c’est Java 11, puis Java 17, puis Java 23, etc. 48
  • 49. Au secours on ne comprend plus rien !  Ah mais c’est pas simple ! Faisons le point.  « Alors on ne peut plus utiliser OracleJDK si on ne paye pas ? »  Apparemment si, pour le développement et les tests seulement  Pour la production  $$$ 49
  • 50. Echanges avant l’apéro  Références / Remerciements  https://dzone.com/  https://blog.codefx.org/  https://www.azul.com/  https://www.jmdoudoux.fr/  Devoxx & Youtube 50