SlideShare une entreprise Scribd logo
1  sur  50
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

Tendances

Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Jean-Michel Doudoux
 
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMXAnniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMXJean-Michel Doudoux
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012Jean-Michel Doudoux
 
Java 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchJava 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchTarek Halloul
 
Poza 2019 11-21-java_oueneston
Poza 2019 11-21-java_ouenestonPoza 2019 11-21-java_oueneston
Poza 2019 11-21-java_ouenestonJozaIT
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Guillaume Laforge
 
Arquillian - YaJUG - nov. 2012
Arquillian - YaJUG - nov. 2012Arquillian - YaJUG - nov. 2012
Arquillian - YaJUG - nov. 2012Alexis Hassler
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoipkernevez
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introductionsabrine_hamdi
 
L'écosystème Java
L'écosystème JavaL'écosystème Java
L'écosystème Javateejug
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 

Tendances (20)

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

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

devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfJean-Michel Doudoux
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Jean-Michel Doudoux
 
[Java] Versioning & Nouveautés JDK 12-15
[Java] Versioning & Nouveautés JDK 12-15[Java] Versioning & Nouveautés JDK 12-15
[Java] Versioning & Nouveautés JDK 12-15Romain Schlick
 
Seance_1_cours_introduction_java_Copie.pptx
Seance_1_cours_introduction_java_Copie.pptxSeance_1_cours_introduction_java_Copie.pptx
Seance_1_cours_introduction_java_Copie.pptxRihabBENLAMINE
 
Présentation de JEE et de son écosysteme
Présentation de JEE et de son écosystemePrésentation de JEE et de son écosysteme
Présentation de JEE et de son écosystemeStéphane Traumat
 
Java uik-chap1-intro java
Java uik-chap1-intro javaJava uik-chap1-intro java
Java uik-chap1-intro javaAmel Morchdi
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsAntoine Rey
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelleAssociation Agile Nantes
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Société ELOSI
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Jean-Michel Doudoux
 
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
C# 5 versus Java 8... Quand C++ 11 s'invite à la fêteC# 5 versus Java 8... Quand C++ 11 s'invite à la fête
C# 5 versus Java 8... Quand C++ 11 s'invite à la fêteFabrice JEAN-FRANCOIS
 
Pluggable annotation processing api
Pluggable annotation processing apiPluggable annotation processing api
Pluggable annotation processing apiArnaud Tournier
 

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

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

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