Au cours des 10 précédentes années, nous avons eu des sessions de Devoxx FR et plusieurs versions dont certaines majeures de Java.
L’objectif de ce talk est de revenir rétrospectivement sur certaines annonces et sur certaines des nombreuses évolutions de Java, notamment récentes afin d’en profiter dans nos applications. Au-delà des évolutions syntaxiques et dans les API, ce sera aussi l’occasion de justifier la migration vers des versions plus récentes de Java.
50 nouvelles choses que l'on peut faire avec Java 8José Paumard
Java 8, c'est bien sûr l'arrivée des lambdas, des Stream et des Collectors. Mais ce n'est pas que cela. Plein de nouvelles choses sont aussi offertes : un nouvelle API pour les dates, un nouveau moteur Javascript, une nouvelle version de JavaFX, une nouvelle ConcurrentHashMap, une nouvelle HashMap, des nouveautés dans le domaine de la concurrence, et toutes sortes de petites choses qui vont nous faciliter la vie, que l'on se propose de passer en revue ici.
Net-a-Porter has embarked on the mission of separating database refactoring from code deployment. The solution we've come up with is "refactoring as a service" and a soon-to-be released Perl module which drives it.
I'll explain how Liquibase, our Git repositories, Puppet and Jenkins all fit together to make database refactoring easy and deployment safe and roll-backable.
I'll also tell you how I just discovered Sqitch as a possible replacement for Liquibase.
... and all within 20 minutes!
Bien que Docker soit facile d'utilisation, construire une image reste un exercice compliqué.
Optimisation, layers, et sécurité nécessitent de s'abstraire des Dockerfile basiques qu'on peut trouver sur internet.
Dans ce BBL, nous verrons comment bien packager une application Spring Boot dans une image Docker/OCI.
Nous allons parcourir les bonnes pratiques préconisées par Spring, les pièges à éviter, comment bien écrire un Dockerfile pour optimiser la construction et l'image finale pour une exécution dans Kubernetes et nous verrons aussi des moyens alternatifs de construction d'images Spring Boot et l'outillage d'analyse à ajouter à votre toolbox.
I talked about Vue.js at @agenciasomadev. In this talk I showed the basics about the Vue.js JavaScript Framework and it's simplicity. I hope you enjoy :)
50 nouvelles choses que l'on peut faire avec Java 8José Paumard
Java 8, c'est bien sûr l'arrivée des lambdas, des Stream et des Collectors. Mais ce n'est pas que cela. Plein de nouvelles choses sont aussi offertes : un nouvelle API pour les dates, un nouveau moteur Javascript, une nouvelle version de JavaFX, une nouvelle ConcurrentHashMap, une nouvelle HashMap, des nouveautés dans le domaine de la concurrence, et toutes sortes de petites choses qui vont nous faciliter la vie, que l'on se propose de passer en revue ici.
Net-a-Porter has embarked on the mission of separating database refactoring from code deployment. The solution we've come up with is "refactoring as a service" and a soon-to-be released Perl module which drives it.
I'll explain how Liquibase, our Git repositories, Puppet and Jenkins all fit together to make database refactoring easy and deployment safe and roll-backable.
I'll also tell you how I just discovered Sqitch as a possible replacement for Liquibase.
... and all within 20 minutes!
Bien que Docker soit facile d'utilisation, construire une image reste un exercice compliqué.
Optimisation, layers, et sécurité nécessitent de s'abstraire des Dockerfile basiques qu'on peut trouver sur internet.
Dans ce BBL, nous verrons comment bien packager une application Spring Boot dans une image Docker/OCI.
Nous allons parcourir les bonnes pratiques préconisées par Spring, les pièges à éviter, comment bien écrire un Dockerfile pour optimiser la construction et l'image finale pour une exécution dans Kubernetes et nous verrons aussi des moyens alternatifs de construction d'images Spring Boot et l'outillage d'analyse à ajouter à votre toolbox.
I talked about Vue.js at @agenciasomadev. In this talk I showed the basics about the Vue.js JavaScript Framework and it's simplicity. I hope you enjoy :)
Load Balancing MySQL with HAProxy - SlidesSeveralnines
Agenda:
* What is HAProxy?
* SQL Load balancing for MySQL
* Failure detection using MySQL health checks
* High Availability with Keepalived and Virtual IP
* Use cases: MySQL Cluster, Galera Cluster and MySQL Replication
* Alternative methods: Database drivers with inbuilt cluster support, MySQL proxy, MaxScale, ProxySQL
Introduction to Docker Networking options. We give in-depth description of the different options with single host examples. See our other presentations for multi-host, IPv6, and CoreOS Flannel descriptions.
The Loom project has been under work for many years, and just delivered Virtual Threads as a preview feature in the JDK 19. We now have a very precise idea of what they are and what you can do with them. Our good old Threads, created more than 25 years ago, will see a new kind of lightweight threads. This presentation shows you that creating a thread is easier and much cheaper, allowing the creation of millions of them in a single JVM. These virtual threads can be block at almost no cost. These new virtual threads bring with them new notions that will be covered in this talk. Loom threads are coming, and they will change the landscape of concurrent programming in Java.
JDK 17, the next LTS version of Java, is available and it contains not only new language constructs but also there are many operational improvements like higher performance. We have a look at what a Jakarta EE developer will find interesting, even if you are using Jakarta EE 8.
Learn about these features and improvements including Records, Text blocks, Garbage collection improvements, and monitoring through Flight Recorder in several live demos with Payara Micro. After this session you will be able to use all new shiny features of JDK 17 in your next Java Enterprise application.
Transactions and Concurrency Control PatternsJ On The Beach
Transactions and Concurrency Control Patterns by Vlad Mihalcea
Transactions and Concurrency Control are very of paramount importance when it comes to enterprise systems data integrity. However, this topic is very tough since you have to understand the inner workings of the database system, its concurrency control design choices (e.g. 2PL, MVCC), transaction isolation levels and locking schemes.
In this presentation, I’m going to explain what data anomalies can happen depending on the transaction isolation level, with references to Oracle, SQL Server, PostgreSQL, and MySQL.
I will also demonstrate that database transactions are not enough, especially for multi-request web flows. For this reason, I’m going to present multiple application-level transaction patterns based on both optimistic and pessimistic locking mechanisms.
Last, I’m going to talk about Concurrency Control strategies used in the Hibernate second-level caching mechanism, which can boost performance without compromising strong consistency.
From Zero to Spring Boot Hero with GitHub CodespacesVMware Tanzu
SpringOne 2021
Session Title: From Zero to Spring Boot Hero with GitHub Codespaces
Speakers: Martin Lippert, Spring Tools Lead at VMware; Sandra Ahlgrimm, Cloud Advocate at MicrosoftFrom Zero to Spring Boot Hero with GitHub Codespaces
Beaucoup d’applications utilisent encore Java 8 mais Java a beaucoup évolué depuis notamment avec la diffusion de deux versions LTS.
L’objectif de ce talk est de revenir sur certaines de ces nombreuses évolutions de Java, notamment récentes afin d’en profiter dans nos applications. Au-delà des évolutions syntaxiques et dans les API, ce sera aussi l’occasion de justifier la migration vers des versions plus récentes de Java.
Les versions de Java se suivent et leurs engouements ne se ressemblent pas : la version 8 de Java est probablement celle qui a suscité le plus d’intérêts chez les développeurs. Java 9, au contraire, est la version de Java qui génère le plus de craintes et d’interrogations voir de peurs. Il faut se préparer pour utiliser Java 9 d’autant que Java 10 est déjà là et les versions suivantes vont s’enchaîner. Le but de ce talk est de parcourir les avantages et les intérêts à utiliser ces nouvelles versions mais aussi certaines difficultés possibles lors de la migration.
Load Balancing MySQL with HAProxy - SlidesSeveralnines
Agenda:
* What is HAProxy?
* SQL Load balancing for MySQL
* Failure detection using MySQL health checks
* High Availability with Keepalived and Virtual IP
* Use cases: MySQL Cluster, Galera Cluster and MySQL Replication
* Alternative methods: Database drivers with inbuilt cluster support, MySQL proxy, MaxScale, ProxySQL
Introduction to Docker Networking options. We give in-depth description of the different options with single host examples. See our other presentations for multi-host, IPv6, and CoreOS Flannel descriptions.
The Loom project has been under work for many years, and just delivered Virtual Threads as a preview feature in the JDK 19. We now have a very precise idea of what they are and what you can do with them. Our good old Threads, created more than 25 years ago, will see a new kind of lightweight threads. This presentation shows you that creating a thread is easier and much cheaper, allowing the creation of millions of them in a single JVM. These virtual threads can be block at almost no cost. These new virtual threads bring with them new notions that will be covered in this talk. Loom threads are coming, and they will change the landscape of concurrent programming in Java.
JDK 17, the next LTS version of Java, is available and it contains not only new language constructs but also there are many operational improvements like higher performance. We have a look at what a Jakarta EE developer will find interesting, even if you are using Jakarta EE 8.
Learn about these features and improvements including Records, Text blocks, Garbage collection improvements, and monitoring through Flight Recorder in several live demos with Payara Micro. After this session you will be able to use all new shiny features of JDK 17 in your next Java Enterprise application.
Transactions and Concurrency Control PatternsJ On The Beach
Transactions and Concurrency Control Patterns by Vlad Mihalcea
Transactions and Concurrency Control are very of paramount importance when it comes to enterprise systems data integrity. However, this topic is very tough since you have to understand the inner workings of the database system, its concurrency control design choices (e.g. 2PL, MVCC), transaction isolation levels and locking schemes.
In this presentation, I’m going to explain what data anomalies can happen depending on the transaction isolation level, with references to Oracle, SQL Server, PostgreSQL, and MySQL.
I will also demonstrate that database transactions are not enough, especially for multi-request web flows. For this reason, I’m going to present multiple application-level transaction patterns based on both optimistic and pessimistic locking mechanisms.
Last, I’m going to talk about Concurrency Control strategies used in the Hibernate second-level caching mechanism, which can boost performance without compromising strong consistency.
From Zero to Spring Boot Hero with GitHub CodespacesVMware Tanzu
SpringOne 2021
Session Title: From Zero to Spring Boot Hero with GitHub Codespaces
Speakers: Martin Lippert, Spring Tools Lead at VMware; Sandra Ahlgrimm, Cloud Advocate at MicrosoftFrom Zero to Spring Boot Hero with GitHub Codespaces
Beaucoup d’applications utilisent encore Java 8 mais Java a beaucoup évolué depuis notamment avec la diffusion de deux versions LTS.
L’objectif de ce talk est de revenir sur certaines de ces nombreuses évolutions de Java, notamment récentes afin d’en profiter dans nos applications. Au-delà des évolutions syntaxiques et dans les API, ce sera aussi l’occasion de justifier la migration vers des versions plus récentes de Java.
Les versions de Java se suivent et leurs engouements ne se ressemblent pas : la version 8 de Java est probablement celle qui a suscité le plus d’intérêts chez les développeurs. Java 9, au contraire, est la version de Java qui génère le plus de craintes et d’interrogations voir de peurs. Il faut se préparer pour utiliser Java 9 d’autant que Java 10 est déjà là et les versions suivantes vont s’enchaîner. Le but de ce talk est de parcourir les avantages et les intérêts à utiliser ces nouvelles versions mais aussi certaines difficultés possibles lors de la migration.
Les versions de Java se suivent et leurs engouements ne se ressemblent pas : la version 8 de Java est probablement celle qui a suscité le plus d’intérêts chez les développeurs. Java 9, au contraire, est la version de Java qui génère le plus de craintes et d’interrogations voir de peurs. Il faut se préparer pour utiliser Java 9 d’autant que Java 10 est déjà là et les versions suivantes vont s’enchaîner. Le but de ce talk est de parcourir les avantages et les intérêts à utiliser ces nouvelles versions mais aussi certaines difficultés possibles lors de la migration.
Les versions de Java se suivent et leurs engouements ne se ressemblent pas : la version 8 de Java est probablement celle qui a suscité le plus d’intérêts chez les développeurs. Java 9, au contraire, est la version de Java qui génère le plus de craintes et d’interrogations voir de peurs. Il faut se préparer pour utiliser Java 9 d’autant que Java 10 est déjà là et les versions suivantes vont s’enchaîner. Le but de ce talk est de parcourir les avantages et les intérêts à utiliser ces nouvelles versions mais aussi certaines difficultés possibles lors de la migration.
Ce n'est pas qu'un slogan politique mais bien la réalité pour Java depuis l'année écoulée.
A tel point que plusieurs caractéristiques historiques de Java sont partiellement remises en cause notamment la lenteur patente entre deux releases, l'embonpoint endémique du JRE/JDK, et même la sacro sainte rétro-compatibilité, ...
Faisons un tour de ces évolutions qui sont parfois de profonds changements avant de fêter le 10ème anniversaire du Nantes JUG.
Le sujet principal de Java 9 est le support de la modularité mais Java 9 propose aussi de nombreuses autres fonctionnalités. Ce talk a pour but de faire une revue des principales d’entre-elles en attendant la sortie de Java 9 : support de standards, nouvelles API, évolutions dans certaines API, mises à jour des outils du JDK et améliorations de la JVM.
Ce chapitre est destiné pour les étudiants de la 2ème année année master Mathématiques, Cryptologie et Sécurité Informatique (MMCSI) Semestre 3. Il traite les concepts de base du langage Java.
Cette présentation brosse une revue détaillée des nouveautés qui sont proposées en standard, en preview et en incubation dans la version 22 du JDK issues des projets d’OpenJDK :
- Amber : String Templates, Unnamed Patterns and Variables, Unnamed Classes and Instance Main Methods
- Loom : Structured Concurrency, Scoped Values
- et Panama : Foreign Function & Memory API, Vector API
Mais aussi des fonctionnalités dans les API de Java Core et dans la JVM HotSpot qui ne font pas l'objet de JEP.
Cette présentation brosse une revue détaillée des nouveautés qui sont proposées en standard, en preview et en incubation dans la version 22 du JDK issues des projets d’OpenJDK :
- Amber : String Templates, Unnamed Patterns and Variables, Unnamed Classes and Instance Main Methods
- Loom : Structured Concurrency, Scoped Values
- et Panama : Foreign Function & Memory API, Vector API
Mais aussi des fonctionnalités dans les API de Java Core et dans la JVM HotSpot qui ne font pas l'objet de JEP.
Cette présentation brosse une revue détaillée des nouveautés qui sont proposées en standard, en preview et en incubation dans la version 21 LTS du JDK issues des projets d’OpenJDK :
- Amber : Record Patterns, Pattern Matching for switch, String Templates, Unnamed Patterns and Variables, Unnamed Classes and Instance Main Methods
- Loom : Virtual Threads, Structured Concurrency, Scoped Values
- et Panama : Foreign Function & Memory API, Vector API
mais aussi de fonctionnalités dans les API de Java Core qui ne font pas l'objet de JEP et dans la JVM HotSpot.
Cette présentation brosse une revue détaillée des nouveautés qui sont proposées en standard, en preview et en incubation dans la version 21 LTS du JDK issues des projets d’OpenJDK :
- Amber : Record Patterns, Pattern Matching for switch, String Templates, Unnamed Patterns and Variables, Unnamed Classes and Instance Main Methods
- Loom : Virtual Threads, Structured Concurrency, Scoped Values
- et Panama : Foreign Function & Memory API, Vector API
mais aussi de fonctionnalités dans les API de Java Core qui ne font pas l'objet de JEP et dans la JVM HotSpot.
Cette présentation brosse une revue détaillée des nouveautés qui sont proposées en standard, en preview et en incubation dans la version 21 LTS du JDK issues des projets d’OpenJDK :
- Amber : Record Patterns, Pattern Matching for switch, String Templates, Unnamed Patterns and Variables, Unnamed Classes and Instance Main Methods
- Loom : Virtual Threads, Structured Concurrency, Scoped Values
- et Panama : Foreign Function & Memory API, Vector API
mais aussi de fonctionnalités dans les API de Java Core qui ne font pas l'objet de JEP et dans la JVM HotSpot.
Les nouveautés de Java 21 - Rencontres dev Toulon octobre 2023.pdfJean-Michel Doudoux
Cette présentation brosse une revue détaillée des nouveautés qui sont proposées en standard, en preview et en incubation dans la version 21 LTS du JDK issues des projets d’OpenJDK :
- Amber : Record Patterns, Pattern Matching for switch, String Templates, Unnamed Patterns and Variables, Unnamed Classes and Instance Main Methods
- Loom : Virtual Threads, Structured Concurrency, Scoped Values
- et Panama : Foreign Function & Memory API, Vector API
mais aussi de fonctionnalités dans les API de Java Core qui ne font pas l'objet de JEP et dans la JVM HotSpot.
Cette présentation brosse une revue détaillée des nouveautés qui sont proposées en standard, en preview et en incubation dans la version 21 LTS du JDK issues des projets d’OpenJDK :
- Amber : Record Patterns, Pattern Matching for switch, String Templates, Unnamed Patterns and Variables, Unnamed Classes and Instance Main Methods
- Loom : Virtual Threads, Structured Concurrency, Scoped Values
- et Panama : Foreign Function & Memory API, Vector API
mais aussi de fonctionnalités dans les API de Java Core qui ne font pas l'objet de JEP et dans la JVM HotSpot.
Les versions 19 et 20 de Java, publiées en septembre et mars derniers, sont les 10eme et 11eme release en application du modèle de release tous les 6 mois.
En attendant la publication de Java 21, la prochaine version LTS publiée en septembre de cette année, et pour en donner quelques aperçus, cette présentation brosse une revue détaillée des nouveautés introduites dans ces nouvelles versions de Java, issues des projets Amber, Panama et Loom d’OpenJDK ainsi que des fonctionnalités non incluses dans des JEPs.
En attendant la publication de Java 21, la prochaine version diffusée en septembre de cette année, et pour en donner quelques aperçus, cette présentation brosse une revue détaillée des nouveautés qui devraient être proposées dans cette future version LTS de Java, issues des projets Amber, Loom et Panama d’OpenJDK.
Les versions 19 et 20 de Java, publiées en septembre et mars derniers, sont les 10eme et 11eme release en application du modèle de release tous les 6 mois.
En attendant la publication de Java 21, la prochaine version LTS publiée en septembre de cette année, et pour en donner quelques aperçus, cette présentation brosse une revue détaillée des nouveautés introduites dans ces nouvelles versions non-LTS de Java, issues des projets Amber, Panama et Loom d’OpenJDK ainsi que des fonctionnalités non incluses dans des JEPs.
Voxxeddays Lux 2022 - Profiling et monitoring avec le JDKJean-Michel Doudoux
Java Flight Recorder (JFR) est une fonctionnalité de la JVM qui après activation enregistre des événements émis par son activité mais aussi celle de l’application et même du système d’exploitation avec un très faible overhead. Il est possible d’émettre ses propres événements et même de consommer des événements grâce à une API de Java 14. Depuis Java 11, JFR est open source et il est donc utilisable maintenant en production sans licence commerciale. L’exploitation de ces événements avec l’outil JMC peut être particulièrement appréciable lors d’activité de profiling et de monitoring. Cette session sera l’occasion de faire un tour d’horizon de ces fonctionnalités qui peuvent s’avérer utiles pour certaines problématiques.
Ce n'est pas qu'un slogan politique mais bien la réalité pour Java depuis l'année écoulée.
A tel point que plusieurs caractéristiques historiques de Java sont partiellement remises en cause notamment la lenteur patente entre deux releases, l'embonpoint endémique du JRE/JDK, et même la sacro sainte rétro-compatibilité, ... Faisons un tour de ces évolutions qui sont parfois de profonds changements.
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMXJean-Michel Doudoux
Présentation lors du dixième anniversaire du Paris JUG.
Le but est de profiter de ce dixième anniversaire pour faire une rétrospective des apports de Java et du Paris JUG à la communauté durant cette décennie et esquisser leur futur.
Java SE 8 est sûrement la version la plus importante et la plus impactante pour les développeurs. Deux ans après sa sortie, ce talk propose des retours sur les bonnes ou moins bonnes utilisations des principales fonctionnalités de Java 8. Une connaissance de ces fonctionnalités est requise.
Java SE 8 est sûrement la version la plus importante et la plus impactante pour les développeurs. Deux ans après sa sortie, ce talk propose des retours sur les bonnes ou moins bonnes utilisations des principales fonctionnalités de Java 8. Une connaissance de ces fonctionnalités est requise.
2. Il y a 10 ans
2
• Présent à la keynote de Stephan Janssen à Devoxx Anvers
Annonce à la fin via une vidéo
• https://www.youtube.com/watch?v=CbjZBf-IWek
• A l'hôtel Marriott rive gauche
• Devoxx France
4. Java a évolué sur la décade
4
• Avec pas moins de 10 versions publiées
grâce au nouveau modèle de releases
• Avec un accueil partagé/mitigé selon les versions
qui sont passés par différentes couleurs de l’arc en ciel
• Trois versions LTS
Java 10,12, 13, 14, 15, 16 : transparence
Java 8 : fort engouement
Java 11 : adoption (très) lente
Java 17 : bonheur des devs
• Sept versions non-LTS
Java 9 : a cassé l’engouement
6. Roadmap
6
• Le présent
• La migration vers Java 11 et 17
• Convaincre l’exploitation
• Le futur
• Le passé
• 10 ans d’évolutions de Java
• Convaincre le management
• Mettre en œuvre la migration
8. 2012
8
• La version courante est Java 7 (juillet 2011)
• NIO 2
Path, Files, Glob, WatchService, DirectoryStream, walkFileTree() …
• Des APIs requises pour Java 8 : fork/join, invoke dynamic
• Le projet Coins
try with resources, exceptions multiples dans catch, opérateur diamant,
String dans switch, underscore dans les littéraux numériques
long valeur = 10_000_000_000L;
long valeur = 1_0_0_0_0_0_0_0_0_0_0L;
9. Java 8
9
• Sortie en mars 2014
• Les expressions Lambda et les références de méthode
• Une approche fonctionnelle du traitement de données
avec l’API Stream
• L’API Date & Time
• Redonne un fort engouement pour Java
• Les méthodes par défaut et static dans les interfaces
• Les classes Optional
• Les annotations répétées
10. Java 9 : syntaxe
10
• Evolutions mineures dans le langage
@SafeVarags sur des méthodes privées
l’opérateur diamant sur les classes anonymes
try with resources : utilisation directe de variables explicitement final
le caractère _ (underscore) est un mot clé réservé
les méthodes privées dans les interfaces
// Java 7 et 8
public void lire(FileInputStream fis) {
try(FileInputStream fisr = fis) {
// ...
}
// Java 9
public void lire(FileInputStream fis) {
try(fis) {
// ...
}
• Sortie en septembre 2017
11. Java 9 : API / Outils
11
• JShell : outil de type REPL
tester une portion de code ou expérimenter une API
• API Process
interface ProcessHandle
• Fabriques statiques pour collections immuables
• Stackwalking API
• Flow API (Reactive Streams)
• VarHandle
opérations atomiques/ordonnées via une référence typée à une variable
List<String> lettres = List.of("a", "b", "c", "d");
12. Java 9 : les modules
12
• Les principaux objectifs proposent d’améliorer :
la fiabilité de la configuration (reliable configuration)
la sécurité avec l’encapsulation forte (strong encapsulation)
la performance
la maintenabilité
• La fonctionnalité la plus impactante … et la plus controversée
• La mise en œuvre implique des contraintes
ruptures (visibilité, accessibilité, organisation du code, …)
• Solutions pour faire cohabiter monde modulaire et non modulaire
• Rendre modulaire une application n’est pas obligatoire
• Création de JRE personnalisés
via l’outil jlink
13. L’instruction var (Java 10)
13
• Pour faciliter la définition de variables var salutation = "Bonjour";
var bonneChancePourNommerCetteVariable = personnes.stream().collect(...)))))));
var service = new Object() {
void afficher() {}
void calculer() {}
};
service.calculer();
service.afficher();
• Le type inféré est parfois surprenant var liste = List.of("test",1);
List<Serializable & Comparable<? extends Serializable & Comparable<?>>>
En Java 11
List<Serializable & Comparable<? extends Serializable & Comparable<?> &
java.lang.constant.Constable & java.lang.constant.ConstantDesc> &
java.lang.constant.Constable & java.lang.constant.ConstantDesc>
En Java 17
• Nouvelles opportunités
avec les classes anonymes
Map<Integer, Map<String, Map<String, Map<Integer, List<Personne>>>>>
bonneChancePourNommerCetteVariable = personnes.stream.collect(...)))))));
var var = personnes.stream().collect(...)))))));
14. Java 11
14
• Diffusée en septembre 2018
• Version importante car LTS
• Exécution directe d’un unique fichier .java par la JVM
sans compilation préalable
• API HTTP Client
support HTTP 1.1 et 2, websockets, synchrone/asynchrone
• JDK Flight Recorder
15. Switch expressions(Java 14)
15
switch (niveau) {
case 1, 2 -> {
System.out.print("Débutant");
System.out.println(" et junior");
}
case 3, 4 -> System.out.println("Confirmé");
case 5 -> System.out.println("Expert");
}
String libelle = switch (niveau) {
case 1, 2 -> "Débutant";
case 3, 4 -> "Confirmé";
case 5 -> "Expert";
default -> {
System.out.println("cas par défaut");
yield "Non défini";
}
};
System.out.println(libelle);
String libelle = switch (niveau) {
case 1, 2 : yield "Débutant";
case 3, 4 : yield "Confirmé";
case 5 : yield "Expert";
default : {
System.out.println("cas par défaut");
yield "Non défini";
}
};
System.out.println(libelle);
switch (niveau) {
case 1, 2 :
System.out.print("Débutant");
System.out.println(" et junior");
break;
case 3, 4 :
System.out.println("Confirmé");
break;
case 5 :
System.out.println("Expert");
break;
}
16. Blocs de texte(Java 15)
16
• Exprimer une chaîne de caractères littérale multiligne
simplement : basiquement sans séquence d’échappement
• Gestion de l’indentation accessoire/significative en début et fin
en déplaçant le contenu vers la droite
en déplaçant le délimiteur de fermeture vers la gauche
• 2 nouveaux caractères d’échappement
s pour indiquer un espace
<retour_chariot> supprime la fin de ligne
String html = """
<HTML>
<BODY>
<H1>"Hello"</H1>
</BODY>
</HTML>""";
String html = """
<HTML>
<BODY>
<H1>"Hello"</H1>
</BODY>
</HTML>""";
String html = """
<HTML>
<BODY>
<H1>"Hello"</H1>
</BODY>
</HTML>
""";
17. Helpful NullPointerException (Java 15)
17
• On rencontre fréquemment des exceptions de type NPE
• Hormis la stacktrace, pas d’informations utiles
• JVM réalise une analyse du byte-code
pour fournir un message d’erreur utile sur une NPE (conséquence, cause)
d’autant plus précis avec info de débogage (-g du compilateur)
• Le message fourni est contextuel
C:java>javac -g TestNPE.java
C:java>java TestNPE
Exception in thread "main" java.lang.NullPointerException: Cannot invoke
"String.toUpperCase()" because "message" is null
at TestNPE.main(TestNPE.java:5)
18. Pattern matching pour instanceof (Java 16)
18
• Pour simplifier le code
• Utilisation de l’opérateur &&
if (obj instanceof Groupe) {
Groupe groupe = (Groupe) obj;
var membres = groupe.membres();
}
if (obj instanceof Groupe groupe) {
var membres = groupe.membres();
}
if (obj instanceof Groupe groupe && !groupe.membres().isEmpty()) {
System.out.println(groupe.membres());
}
19. Les records(Java 16)
19
• Un nouveau type pour définir une classe
• Encapsulant des données de manière immuable
• Avec une syntaxe concise
utilisant l’identifiant restreint record
• Un record peut être personnalisé
avec un constructeur compact
public record Formation(String titre, String code, Duration duree) {
}
public record Formation(String titre, String code, Duration duree) {
public Formation {
if (titre.isBlank()) {
throw new IllegalArgumentException("Le titre doit être renseigné");
}
}
}
20. Les records(Java 16)
20
• Possibilité de définir et utiliser des records locaux
implicitement static
• Mais aussi des interfaces et énumérations locales (Java 15)
• Les records sont immuables au sens Java
• Les records sont « vraiment » immuables
il n’est pas possible de modifier la valeur/référence d’un composant
même en utilisant l’API Reflection ou VarHandle
• La désérialisation d’un record est différente
elle invoque le constructeur cannonique
21. Les classes scellées (Java 17)
21
• Fonctionnalité standard pour restreindre par déclaration
les classes qui peuvent étendre une classe scellée
les classes qui peuvent implémenter une interface scellée
• But : connaître de manière exhaustive les sous-types
• 3 nouveaux mots-clés contextuels : sealed, non-sealed et permits
• Les classes filles doivent avoir un des modificateurs
final, sealed ou non-sealed
• 2 contraintes sur l’endroit où pourront être les classes filles
dans un module nommé : dans le même module que leur classe mère
dans un unnamed module : dans le même package que leur classe mère
public sealed class Forme permits Cercle, Triangle {}
22. Java 17
22
• Diffusée en septembre 2021
• Nouvelle version majeure car LTS
• Le Security Manager est déprécié forRemoval
• Oracle diffuse son JDK sous licence NFTC
No-Fee Terms and Conditions
• Réduction de la durée entre 2 LTS à 2 ans
23. Java 18
23
• Diffusée en mars 2022
• UTF-8 par défaut (sauf sortie console)
• Le mécanisme finalize est déprécié
• Les extraits de code dans la Javadoc avec @snippet
• Un serveur web minimaliste
• Des améliorations dans les ramasse-miettes et la sécurité
24. Bilan de ses évolutions
24
• Souvent la verbosité est reprochée à Java
• Java se modernise et se simplifie
• Les évolutions présentées ne sont que les principales
• Il y en a beaucoup d’autres :
Collector teeing (Java 12)
jpackage (java 16)
hidden class (Java 15)
default et dynamic CDS archive (Java 12 et 13)
Stream::toList() (Java 16)
java.text.CompactNumberFormat (Java 12)
…
26. Le plus dur reste à faire
26
• Maintenant que vous être convaincus
• Le plus dur reste à faire
• Convaincre l’exploitation
• Pour migrer vers une LTS plus récente : Java 11 ou 17
• Et donc budgéter et planifier cette migration
… et le management
28. Utiliser les évolutions vues
28
• Pour nous dev, beaucoup de choses sympa
• dans la syntaxe
• dans les API
• Mais malheureusement peu recevables
d’un point de vue exploitation
• Surtout que pour de (bonnes) raisons, elle est conservatrice
29. Les arguments recevables
29
• Les devs focalisent beaucoup sur la syntaxe et les API
• Mais l’élément majeur de Java c’est la JVM
• La JVM évolue aussi notamment sur
• La performance
• Et la sécurité
• Deux préoccupations majeures de l’exploitation
30. Performance
30
• La JVM de chaque version LTS améliore les performances
de manière globale
dépend du type d’application et de son activité
• Les ramasse-miettes évoluent
tous, G1 par défaut sur JVM server (Java 9)
• Et de nouveaux sont ajoutés :
ZGC, Shenandoah, Epsilon GC
• Le JIT
• Des optimisations dans les implémentations des API
compact String (Java 9), …
• Ça fonctionne bien en Java 8 -> encore mieux en 11 ou 17
31. Sécurité
31
• Maj Root CA Certificates et algo faibles désactivés
• Support de TLS 1.3 (Java 11)
• Algo de cryptographie :
ChaCha20 et ChaCha20-Poly1305 (Java 11)
Edwards-Curve Digital Signature Algorithm (EdDSA) (Java 15)
• PKCS12 par défaut dans le keystore (Java 9)
• SHA-3 (Java 9)
• Support de TLS 1.0 et 1.1 retirés (Java 16)
• Filter Incoming Serialization Data (Java 9)
Context-Specific Deserialization Filters (Java 17)
33. Les coûts
33
• Très variables pour la migration selon l’état de l’application
surtout avec les tests
• De la version courante (8 / 11) et ciblée de Java (11 / 17)
• Les performances peuvent réduire les coûts d’exploitation
surtout dans le cloud
GCs qui restituent la mémoire inutilisée au système
compact Strings (économie de heap)
jlink pour des runtimes personnalisés
….
34. D’autres arguments
34
• Très difficile de recruter actuellement
• Encore plus sur des technologies obsolètes
• Migrer pour être sur un socle plus récent, peut faciliter
• Mais aussi pour limiter le turn over
• Car au final le coût est parfois supérieur à celui de la migration
• Et puis … la RGPD pour un aspect légal
36. Règles générales de migration > 8
36
• Mettre à jour les outils
avec une version compatible avec la version de Java ciblée
• Mettre à jour les dépendances
avec une version compatible avec la version de Java ciblée
• Utiliser jdeps (sur app et toutes les dépendances) pour
une cartographie des dépendances
les API internes utilisées
détecter les splits packages
• Utiliser CI/CD pour migrer à chaque nouvelle version de Java
• Mythe urbain : aucune obligation de modulariser l’application
migrer en laissant tout dans le classpath
modulariser si possible
37. Des API retirées
37
• A partir de Java 11, toutes les versions de Java retirent des API
• Celles marquées dans la ou les versions précédentes avec
• Consultez les listes de différences entres versions de Java
https://javaalmanac.io/
https://foojay.io/almanac/java-17/
• Utilisez jdeprscan pour obtenir les API dépréciées du JDK
à utiliser sur tout le classpath et modulepath
@Deprecated(forRemoval=true)
38. Java 8 vers 11
38
• Régler les incompatibilités
les API retirées, …
• Ajouter en tant que dépendances les API retirées
JavaFX, API Java EE (JAX-B, JAX-WS, JTA, CORBA, …)
• Cohabitation classpath/modulepath
l’option --illegal-access par défaut à permit
les options pour assouplir les règles de JPMS
le Multi-Release JAR
• Différentes stratégies :
migration sans module (unnamed modules)
migration qu’avec des modules (named modules)
migration incrémentales (automatic modules)
39. Java 11 vers 17
39
• Plus simple que de Java 8 à 11
• Attention aux API retirées (celles forRemoval=true)
• Nashorn retiré (Java 15)
• Idéalement requiert un code coverage à 100%
à cause de l’encapsulation forte des API du JDK
40. Encapsulation forte des API internes du JDK
40
• Depuis Java 9, l’option --illegal-access
contrôle l’accès par introspection par les unnamed modules
par défaut à permit pour des raisons des compatibilités
affiche un warning à chaque premier accès
• Ne pas ignorer ces warnings
• Java 16 : --illegal-access dépréciée et deny par défaut
• Java 17 : --illegal-access est ignorée (JEP 403)
• L’option --add-opens de la JVM
• Impact potentiel à l’exécution d’une application
41. Java 8 vers 17
41
• Evitez le grand saut
• Migrer avec étapes, idéalement 2 minimum
• migrer de 8 à 11
• migrer de 11 à 17
• Avec un seul déploiement en production
pour réduire les coûts (notamment de tests)
• pour ne pas avoir tous les problèmes à gérer en même temps
• assurer un meilleur suivi de l’avancement
43. Le futur de Java
43
• De nombreux projets sont en cours
certains partiellement livrés ou en cours de livraison
• Amber : évolutions syntaxiques (pattern matching, …)
• Panama : interactions JVM / natif
Vector API, Foreign function & Memory API, …
• Loom : threads légers (fibers, continuations, …)
• Valhalla : fonctionnalités avancées
value/primitive types, generic specialization
• Java 19 sera diffusée en septembre 2022
• Java 21, prochaine LTS, sera diffusée en septembre 2023
44. Pattern Matching pour switch (Preview Java 17)
44
• Utilisation de patterns dans les case
guarded pattern, parenthesized pattern
• Support de null dans les case
• Doit évoluer dans les futures versions de Java
déconstruction, deconstruction pattern (array et record), …
static void afficherCercle(Forme f) {
String message = switch (f) {
case Cercle c && (c.getAire() > 100) -> "Grand cercle";
case Cercle c -> "Petit cercle";
default -> "Pas un cercle";
};
System.out.println(message);
}
45. Le futur de Devoxx FR
45
• Les informations indiquées n’engagent que moi
• Avoir des sessions pour les 10 prochaines années
• Toujours aussi riches, aussi intéressantes et aussi fun
• Sur les 2 étages du palais des Congrès
• Mes souhaits :
47. Conclusion
47
• Java poursuit son évolution
• pour offrir de nouvelles fonctionnalités
• pour simplifier le code et augmenter la productivité des devs
• La plateforme poursuit aussi sa cure d’amaigrissement
avec des fonctionnalités retirées ou bientôt retirées
• Pour en profiter, il faut migrer
• pour améliorer les performances et la sécurité
48. Conclusion
48
• Devoxx France nous enrichit chaque année
depuis 10 ans
• Durant les 10 prochaines années
• RDV dans 10 ans, même jour, même heure
• En avril 2032, pour en faire le bilan
• Bonne continuation avec Java et
• GROS remerciements aux organisateurs