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.
4. #ParisJUG
Le début de l’histoire
Pour être un des speakers
à leur dixième anniversaire
4
Il y a quelques mois,
l’équipe du Paris JUG me contacte
Au côté de Rémi Forax et Dr Venkat Subramaniam
5. #ParisJUG
Le lieu
Charles me fait comprendre
que cela aura lieu
5
Dans LE monument emblématique de Paris
Et bien SI, la preuve on est là
Pour le provincial que je suis
6. #ParisJUG
Le sujet
Importance du choix du sujet
6
Lieu emblématique,
public averti,
avec deux speakers de renommée mondiale
Charles me dit : tu as carte blanche
7. #ParisJUG
C’est un projet IT
Définition du cahier des charges
7
Sauf que contrairement aux autres,
Impossible de déraper
Ni en délai de livraison
Ni en temps d’exécution
Et j’ai carte blanche
8. #ParisJUG
Le cahier des charges
Sujet à la hauteur de l’événement
8
Doit parler de Java et/ou la JVM
A la Tour Eiffel
Et quelques recherches
…
Après une longue réflexion
9. #ParisJUG
Eiffel dans la JVM
La JVM est polyglothe
9
On est à la Tour Eiffel
Sujet hype, jamais abordé
pendant les 10 ans au Paris JUg
10. #ParisJUG
Eiffel
A influencé plusieurs langages dont Java
10
Design by contract
assertions, precondition, postcondition, class invariants
Langage orienté objet, repose sur des classes
héritage multiple, génériques, …
Créé par Bertrand Meyer en 1985
Typé statiquement
Gestion de la mémoire avec un ramasse-miettes
12. #ParisJUG
SmartEiffel
12
Propose un compilateur
qui transforme de l’Eiffel en C ou en Java
Implémentation GNU
Créé par Dominique Colnet
Projet du LORIA impliquant
INRIA: Institut National de Recherche en Informatique et Automatique
CNRS: Centre National de la Recherche Scientifique
Université Henri Poincaré, Nancy 1
Université Nancy 2
INPL: Institut National Polytechnique de Lorraine
15. #ParisJUG
2008
10 ans est une éternité en informatique
15
AOL abandonne le navigateur Netscape
1ere version public de Google Chrome
Microsoft propose Windows Server 2008 et HyperV
Apple lance l’iPhone 3G
Nokia acquière Symbian
16. #ParisJUG
2008 : écosystème Java
La version courante
Java SE 6 (nom de code Mustang)
Java EE 5
Livres de références :
16
Eclipse 3.4 (Ganymede)
NetBeans 6.5
Nov 2002Mai 2008 Mai 2007
IntelliJ IDEA 7
17. #ParisJUG
2008 : Paris JUG
1er événement le 12 février 2008
dans les locaux de Port Parallèle
17
65 participants
19. #ParisJUG
2009
Apple abandonne le PowerPC avec MacOS X v10.6
19
USB 3.0
Sort de la version béta
Microsoft lance Bing et Virtual PC et
créé sous le pseudo Satoshi Nakamoto
Google présente Go, AngularJS, goo.gl
Android version 1.5 (Cupcake) et version 1.6 (Donut)
20. #ParisJUG
2009 : écosystème Java
Spring 3.0
Hibernate 3.4
20
Mockito 1.8
Eclipse 3.5 (Galileo)
JetBrains open source le cœur d’IntelliJ IDEA
Community edition
21. #ParisJUG
2009 : Java EE 6
Thèmes : flexibilité, extensibilité et facilité d’utilisation
Web Profile
Sous ensemble de Java EE
Packaging dans un war (EJB Lite)
21
Nouvelles API :
CDI
JAX-RS
Bean Validation
Interceptors
API mises à jour :
EJB 3.1, Servlet 3.0, JPA 2.0, JSF 2.0,
API pruned : JAX-RPC, EJB 2.x Entity Beans, JAXR, JSR 88
22. #ParisJUG
2009
10 février : premier anniversaire du Paris JUG
Présentation des
autres JUGs
Dans les locaux de la Fiap
22
250 participants
23. #ParisJUG
Emulsion des JUGs
Alpes JUG
Bordeaux JUG
Breizh JUG
Ch’ti JUG
ElsassJUG
FinistJUG
Lava JUG
Lorraine JUG
Lyon JUG
Mars JUG
Montpellier JUG
Nantes JUG
Normandy JUG
Paris JUG
Poitou-Charentes JUG
Riviera JUG
Tours JUG
Toulouse JUG
Duchess France
Virtual JUG
23
24. #ParisJUG
2010
Format de compression audio et vidéo WebM
24
Hewlett Packard achète Palm
Android version 2.1, 2.2 (Froyo), 2.3 (Gingerbread)
Le vers Stuxnet
Apple iPad et iPhone 4
26. #ParisJUG
2010 : 2nd anniversaire
9 février 2010
Dans les locaux de la Sorbonne
26
500 participants
Thème l’open source en France
27. #ParisJUG
2011
Oracle donne OpenOffice à la fondation Apache
Google propose Dart et achète Motorola Mobility
27
Intel architecture Sandy Bridge
Android version 3.0 (Honeycomb), 3.1
Microsoft Internet Explorer 9, Office 365
Apple iPhone 4s
Décès de Steve Jobs et Dennis Ritchie
28. #ParisJUG
2011 : Java SE 7
En juillet, nom de code Mustang
Fork/Join
Projet Coin :
switch avec String
try with resources (ARM)
opérateur diamant <>
underscores dans les littéraux numériques
catch avec plusieurs exceptions
28
NIO 2
Invoke Dynamic
29. #ParisJUG
2011 : écosystème Java
Spring 3.1
NetBeans 7.0
Hibernate 4.0
29
Mockito 1.9
Tomcat 7.0
Eclipse 3.7 (Indigo) et 4.0 (Juno)
IntelliJ IDEA 11
30. #ParisJUG
2012
Facebook passe la barre du milliard d’utilisateurs
Apple iPhone 5
30
Google Play et Google Drive
Android version 4.1 (Jelly Bean) et 4.2
RasperBerry Pi
Microsoft Windows 8
Microsoft Surface
TypeScript
31. #ParisJUG
2012 : écosystème Java
Log4j 1.2.17
Pas de 4e anniversaire pour le Paris JUG
Hibernate 4.1
31
Eclipse 4.2
JetBrain open source Kotlin
IntelliJ IDEA 12
32. #ParisJUG
2012 : Devoxx France
A l'hôtel Marriott rive gauche
75 % des conférences en langue française
32
1248 participants
33. #ParisJUG
2013
Sony Playstation 4
Intel architecture Haswell
33
Microsoft remplace Messenger par Skype, XBox One
Affaire Edward Snowden
Google achète Waze, Android version 4.4 (KitKat), Wallet
Apple iPhone 5s
Facebook React
34. #ParisJUG
2013 : écosystème Java
Spring 4.0
Hibernate 4.2 et 4.3
34
Eclipse 4.3 (Kepler)
NetBeans 7.4
IntelliJ IDEA 13
35. #ParisJUG
2013 : Java EE 7
Thèmes : productivité et HTML 5
35
JPA 2.1
génération de schéma, proc stock, CriteriaUpdate et CriteriaDelete
EJB 3.2
JAX-RS 2.0
API cliente, asynchronisme, HATEOAS, filtres et intercepteurs
JMS 2.0
simplification de l’API, annotations
4 nouvelles API :
JSON-P 1.0 Batch 1.0
WebSocket 1.0 Concurrency 1.0
37. #ParisJUG
2014
Microsoft :
Satya Nadella devient le CEO,
achat de Nokia et Mojang
Apple
version Yosemite de MacOS X,
Swift,
iPhone 6 et 6 plus
37
Android version 5.0 (Lollipop), Android Studio
RAM DDR4
38. #ParisJUG
2014 : Java SE 8
Diffusé en mars, nom de code Spider
La plus importante version ?
A rendu Java great again ?
38
Méthode par défaut et static dans les interfaces
Introduit l’héritage multiple de comportement dans les interfaces
public interface MonInterface {
public static void main(String[] args) {
System.out.println("Hello");
}
}
public interface affichable {
default void afficher(String valeur) {
System.out.println("Valeur = "+valeur);
}
}
L’API Date & Time
39. #ParisJUG
2014 : Java SE 8
La classe Optional
39
L’interface CompletableFuture
Remplacement PermGen par MetaSpace
Approche fonctionnelle avec les API Streams et Collector
OptionalDouble ageMoyen = personnes
.stream()
.filter(p -> p.getNom().startsWith("A"))
.mapToInt(Personne::getAge)
.average();
System.out.println("age moyen = " + ageMoyen.orElse(0.0));
monBouton.setOnAction(event -> System.out.println(event));
monBouton.setOnAction(System.out::println);
Expression lambda et référence de méthodes
40. #ParisJUG
2014 : écosystème Java
Tomcat 8.0
Le Paris JUG quitte l’ISEP pour l’ESIA
Log4j 2.0
40
Mockito 1.10
JUnit 4.12
JHipster 1.0
NetBeans 8.0
Eclipse 4.4 (Luna)
Spring Boot 1.0, 1.1 et 1.2
IntelliJ IDEA 14
41. #ParisJUG
2014 : Devoxx FR
3e édition de Devoxx France, 16 au 18 avril 2014
678 propositions au CFP,
202 speakers,
1497 participants
41
Université de Rémi Forax sur les Lambda
42. #ParisJUG
2014 : Young blood
14 janvier 2014
Permettre à de speakers débutants de faire leur premières armes
42
Un CFP
5 sujets choisis et 1 tiré au sort
Le vainqueur fait sa présentation lors d’un quickie à Devoxx FR
Des sujets variés
Sessions de préparation
44. #ParisJUG
2015 : écosystème Java
Vingt ans de Java
44
Java redevient le langage de l’année au TIOBE
Eclipse 4.5 (Mars)
Spring 4.2, Spring Boot 1.3
Hibernate 5.0
JHipster 2.0
NetBeans 8.1
IntelliJ IDEA 15
45. #ParisJUG
2015 : nouveau président
Et évidemment une indéfectible passion pour la communauté
45
3 caractéristiques pour être président du Paris JUG
46. #ParisJUG
2015 : quizz de Charles
Il est temps d’y répondre (QCU) :
A - MrQuizz est un bon Leader
46
B - Le ParisJUG a su rester fun
C - Il y aura des modules dans la JVM
D - All of the above
47. #ParisJUG
2015 Devoxx FR
4e édition de Devoxx FR, 8 au 10 avril 2015
Changement de cadre et d’envergure
De l'Hôtel Marriott au Palais des congrès
47
2500 participants, 220 présentations
Des possibilités infinies avec le 8 de Java 8
52. #ParisJUG
2017 : Java SE 9
Diffusé en septembre, pas de nom de code ;-(
52
Sûrement la version la plus controversée
Première fois que l’EC du JCP vote Non
Introduit des changements majeurs
Java Module System, issu des travaux du projet Jigsaw
Tout en tentant d’offrir une certaine compatibilité
Pour permettre une nécessaire migration incrémentale
Implique des difficultés
La plupart des API internes sont encapsulées
Les modules Java EE ne sont pas résolus par défaut
JAX-B, JAX-WS, JavaBeans Activation Framework, JTA, Commons annotations, CORBA
…
53. #ParisJUG
2017 : Java SE 9
Les modules sont perçus comme contraignants
53
Exemple de contraintes :
plus d’accès par défaut aux classes public d’un module
plus d’introspection par défaut sur les classes d’un module
plus de split packages
plus de dépendances circulaires
La nécessité de définir les dépendances dans les module-info ET les outils de build
…
moins de liberté
utilisée pendant plus de 20 ans
parfois avec abus
Tous les systèmes de modules sont contraignants
54. #ParisJUG
2017 : Java SE 9
Mais on doit profiter des avantages des modules
54
L’occasion de remettre de l’ordre :
dans le design des livrables
dans les dépendances
dans les API utilisées (notamment celles non supportées du JDK)
Une configuration fiable
Réduire les problèmes du classpath hell
L’encapsulation forte
Améliorer la sécurité et la maintenabilité
55. #ParisJUG
2017 : Java SE 9
De nombreuses autres fonctionnalités : + 89 JEPs
55
API
Fabriques pour des collections immuables
Process API
Reactive Streams (Flow API)
Var Handles
…
Evolutions mineures dans le langage
_ est un mot clé
Méthodes private dans les interfaces
Variables effectivement finale dans try with ressources
Opérateur diamant dans les classes anonymes internes
@SafeVarags sur les méthodes d’instances private
Outils
JShell
Jlink pour créer des runtime compacts
Recherche dans la Javadoc en HTML 5
Jdeprscan
…
JVM
G1 est le ramasse-miettes par défaut
Réduction de la taille mémoire (Compact Strings)
Amélioration de la performance et de la sécurité
Multi-Release Jar
Unified JVM et GC logging
…
56. #ParisJUG
2017 : Java EE 8
CDI 2.0
événements asynchrones
56
JAX-RS 2.1
SSE, API client réactive
JSON-P 1.1
JSON Pointer, JSON Patch, JSON Merge Patch
Servlet 4.0
HTTP/2
Diffusé en septembre
Bean Validation 2.0
2 nouvelles API :
JSON-B 1.0
Security 1.0
57. #ParisJUG
2017 : écosystème Java
JUnit 5.0
Eclipse 4.7 (Oxygen)
57
Spring 5.0
Java 8 et API de Java EE 7
compatibilité Java 9 et Java EE 8
JHipster 4.0
Spring Boot 1.5
Fermeture du site java.net
Dec 2017
IntelliJ IDEA 2017.1
58. #ParisJUG
2017 : changements majeurs
Open JDK : nouveau modèle de releases cadencé sur 6 mois
2 releases majeures de Java par an : en mars et septembre
Java 10 en mars 2018 et Java 11 en septembre 2018
58
IBM open source
sa JVM J9 -> Eclipse OpenJ9
Websphere Liberty AS : OpenLiberty
Convergence Oracle JDK -> OpenJDK
Oracle annonce le transfert de Java EE -> la fondation Eclipse
LTS : le nouveau modèle de support
Version tous les 3 ans à partir de Java 11
62. #ParisJUG
2018 : Java 10
20 mars 2018 : première release du nouveau modèle
1) Durée de release réduite -> nombre de fonctionnalités réduites
12 JEPs
1 utile pour les développeurs
+ évolutions dans les API existantes
62
2) Java 9 quasiment pas utilisé
Mais déjà obsolète avec la sortie de Java 10
2 conséquences :
63. #ParisJUG
Java 10
63
Depuis Java 7, l’inférence de type est de plus en plus utilisée
Avec Java 10 : pour faciliter la déclaration de variables locales
var i = 2; // int
var j = 2L; // long
var var = "Bonjour"; // String
var references = new HashMap<Integer,String>(); // HashMap<Integer,String>
var chemin = Paths.get("fichier.txt"); // Path
var contenu = Files.readAllBytes(chemin); // byte[]
var objet = new Serializable() {} ; // MaClasse$1
var est utilisable dans les boucles et try with resources
for (var i = 0; i < 10; i++) { ... }
for (var arg : args) { ... }
try (var file = new FileInputStream(new File("monfichier.txt"))) { ... }
Avec l’instruction var
Qui n’est pas un mot clé
64. #ParisJUG
Java 10
64
Plusieurs situations sont illicites
var valeur; // cannot use 'var' on variable without initializer
var obj = null; // variable initializer is 'null'
var a=1, b=2; // 'var' is not allowed in a compound declaration
// var a=1; var b=2;
var chaines = {"e1","e2"}; // array initializer needs an explicit target-type
// var chaines = new String[] {"e1","e2"};
var additionner = (a,b) -> a+b; // lambda expression needs an explicit target-type
// var additionner = (IntBinaryOperator) (a,b) -> a+b
var comparerStr = String::compareTo; // method reference needs an explicit target-type
// var comparerStr = (Comparator<String>) String::compareTo
var valeur = 10;
valeur = "bonjour"; // incompatible types: String cannot be converted to int
// Java n’est pas Javascript et reste statiquement typé
Incompatibilité
jshell> class var {}
| Error:
| 'var' not allowed here
| as of release 10, 'var' is a restricted local variable type and cannot be used for type
declarations
65. #ParisJUG
Java 10
65
Meilleur support des conteneurs Docker
JDK-8189497 et JDK-8186315, JDK-8179498, JDK-8186248, JDK-8146115
Option UseContainerSupport (Linux uniquement)
activée par défaut, -XX:-UseContainerSupport pour désactiver
Extraction d’informations du conteneur (cgroup)
nombre de CPU alloué au conteneur
mémoire allouée au conteneur
Détection de l’exécution dans un conteneur
66. #ParisJUG
Java 10
66
Java 8u131 et Java 9
-XX:+UnlockExperimentalVMOptions (Linux uniquement)
-XX:+UseCGroupMemoryLimitForHeap (Linux uniquement)
-XX:InitialRAMFraction, -XX:MaxRAMFraction, -XX:MinRAMFraction (1, ½, 1/3, ¼, …)
Java 10 :
Ajout de :
-XX:InitialRAMPercentage=n
-XX:MaxRAMPercentage=n
-XX:MinRAMPercentage=n
-XX:ActiveProcessorCount=n
-Xlog:os+container
Deprecated
-XX:+UseCGroupMemoryLimitForHeap
-XX:MaxRAMFraction
-XX:InitialRAMFraction
-XX:MaxRAMFraction
Options pour le contrôle de la mémoire
67. #ParisJUG
2018 : Java 11
Le 25 septembre 2018, version LTS
67
JEP 318 : Epsilon GC
JEP 320 : Remove the Java EE and CORBA Modules
JEP 321 : HTTP Client
Module incubator depuis Java 9, support HTTP/2
JEP 323 : Local-Variable Syntax for Lambda Parameters
utilisation de var
(@Nonnull var x, @Nullable var y) -> x.calculer(y);
68. #ParisJUG
2018
7e édition de Devoxx France, du 18 au 20 avril
Le thème : Evolution / Révolution
68
Un code de conduite à passer sur Kahoot
Les 229 vidéos sont déjà en ligne sur YouTube
69. #ParisJUG
Le futur de Java
De nombreux projets en cours :
Amber : améliorer la productivité du langage Java (pattern matching, …)
Loom : faciliter l’écriture d’applications concurrentes
Panama : améliorer l’invocation de code natif dans la JVM
Metropolis : écrire des portions de la JVM en Java
Valhalla : fonctionnalités avancés (value type, …)
Pour fournir une partie de la feuille de route
des fréquentes releases
69
Pour la communauté :
S’adapter aux changements
Délicate et longue migration vers Java 9+
en tout cas plus longue et délicate que pour les précédentes versions
70. #ParisJUG
Jakarta EE
Après une consultation publique
Nouveau nom
Un logo
Le but est de faire évoluer la plateforme
de manière plus agile, fléxible et ouverte
focus sur cloud-native et microservices
Nouvelle gouvernance par la fondation Eclipse
Abandon du JCP
70
https://jakarta.ee/
Le working group intègre déjà plusieurs membres stratégiques
71. #ParisJUG
Le futur du Paris JUG ?
Malheureusement je n’ai pas de boule de cristal
Avec un plaisir aussi immense qu’aujourd’hui
Impossible de prédire son avenir
71
Ce que je lui souhaite
continuer à nous offrir des soirées mensuelles
sur des sujets intéressants
avec des speakers passionnés
comme durant ces 10 dernières années
pour les 10 prochaines années
Et pourquoi pas de venir parler à son 20e anniversaire
72. #ParisJUG
Devoxx FR 2019
8e édition, du 17 au 19 avril 2019
Quel sera le costume de Charles aux keynotes ?
72
Devoxx va t-il s’étendre sur les deux étages du Palais des Congrès ?
Et pourquoi pas un ou deux sujets de Venkat ?
@venkat_s : and why not one or two talks from you?
Et / Ou durer 5 jours ?
74. #ParisJUG
Un immense merci
Au Paris JUG
pour ses contributions à l’écosystème Java francophone
74
Et surtout aux bénévoles qui ont animé / animent le Paris JUG :
Antonio Goncalves
David Dewalle
Zouheir Cadi
Charles Sabourdin
Claude Falguière
Nicolas Martignole
Tanguy Bayard
José Paumard
…
Guillaume Duquesnay
Guillaume Dufour
François Ostyn
Khanh Tuong Maudoux
Jean-Christophe Sirot
Thierry Leriche
Sun Seng David Tan
Anthony Guillé
75. #ParisJUG
Profitons de ce cadre somptueux
Pour fêter ensemble un joyeux 10e anniversaire au Paris JUG
75
77. #ParisJUG
Le (vrai) cahier des charges
Parler du Paris JUG
J’ai carte blanche
77
(un peu) technique
Parler de Java
Rétrospective sur la décennie écoulée
78. #ParisJUG
Recette
Ais-je rempli ce cahier des charges ?
Si vous pensez que OUI
78
Venez aux prochaines sessions du Paris JUG
Si vous pensez que NON
Venez aux prochaines sessions du Paris JUG