SlideShare une entreprise Scribd logo
1  sur  40
SYLVAIN MOUGENOT
•Sylvain.Mougenot@gmail.com
•14 ans avec Java
2
•https://github.com/smougenot/
Sur la route de Java
1995
JDK Beta
1996
JDK 1.0
1997
JDK 1.1
1998
JDK 1.2
2000
JDK 1.3
2002
JDK 1.4
2004
JDK 5
2006
JDK 6
EOL : 2013/02
3
2011
JDK7
2013
JDK8
2015
JDK9
EOL : 2013/02
Des versions régulières
- SE tous les 2 ans
- EE tous les 2 ans
Une règle du jeu claire
Sur la route de Java
Une règle du jeu claire
- Un contenu prévu mais pas impératif
- Un report des contenus en retard
4
Objectifs
- Simplification
- Productivité
- Moderniser le language
- Moderniser la plateforme
S’adapter aux usages
Sur la route de Java
- Cloud
- Embarqué
- Internet des objets
- Cycles courts
5
Java est partout
Sur la route de Java
Mac OS X Linux ARM Java Card
6
HTTP://WWW.APPLE.COM/ HTTP://WWW.RASPBERRYPI.ORG/
SE8
- Septembre 2013
- Lambda
- Nashorn
- Dates
- Annotations
- JavaFx
- Optimisations
SE8
- Optimisations
Evolution majeure
Migration transparente
8
SE8
9
λ
Evolution du language
- Closure façon java
- Limité à la notion d’interface fonctionnelle
- Implémentation par défaut d’une méthode dans une interface
- Refonte des API
- Parallélisation
SE8 : λ
Impact profond dans la plateforme
- Introduction de nouveautés dans le bytecode
Pour en savoir plus
- http://cr.openjdk.java.net/~briangoetz/lambda/sotc3.html
10
SE8 : λ
Runnable ditBonjour = new Runnable() {
@Override
public void run() {
System.out.print("Bonjour");
}
};
11
Runnable ditBonjourL = () -> System.out.print("Bonjour");
SE8 : λ
public interface Maximum<T extends Number>{
T max(T a, T b );
}
Maximum<Integer> maxL1 = (Integer a, Integer b) -> { return Math.max(a, b); };
Maximum<Integer> maxL2 = (a, b) -> { return Math.max(a, b); };
Maximum<Integer> maxL3 = (a, b) -> Math.max(a, b);
12
Maximum<Integer> maxL3 = (a, b) -> Math.max(a, b);
Maximum<Integer> maxL4 = Math::max ;
SE8 : λ
public interface Taille<T extends CharSequence>{
int taille(T text);
boolean estVide(T text);
13
}
Taille<String> taille = text -> text.length();
default boolean estVide(T text)
{return 0 == taille(text);}
SE8 : λ
public interface Taille<T extends CharSequence>{
int taille(T text);
14
}
Taille<String> taille = text -> text.length();
SE8 : λ
@FunctionalInterface
public interface Taille<T extends CharSequence>{
int taille(T text);
default boolean estVide(T text)
{return 0 == taille(text);}
15
}
Taille<String> taille = text -> text.length();
Evolution majeure des collections
- Parallélisation, « lazyness »
Package java.util.streams
- Construction de pipelines d’opérations : filter map reduce
SE8 : λ
D’autres API vont utiliser ces extensions
16
SE8 : λ
class Developpeur{
String nom; int anneeEmbauche; int nbProjets;
}
...
int maxPrj = 0;
for (Developpeur d : devs){
if(d.anneeEmbauche > 2010){
17
if(d.anneeEmbauche > 2010){
maxPrj = Math.max(maxPrj, d.nbProjets);
}
}
int maxPrj =
devs
.stream()
.filter(d -> d.anneeEmbauche > 2010)
.map(d -> d.nbProjets)
.reduce(0, Math::max);
.parallelStream()
Stream<T>
SE8 : λ
Stream<T> filter(Predicate<? super T> predicate);
<R> Stream<R> map(Mapper<? extends R, ? super T> mapper);
T reduce(T base, BinaryOperator<T> op);
Stream<T> sorted(Comparator<? super T> comparator);
Stream<T> cumulate(BinaryOperator<T> operator);
19
Optional<T> findFirst();
Optional<T> findAny();
boolean anyMatch(Predicate<? super T> predicate);
boolean allMatch(Predicate<? super T> predicate);
boolean noneMatch(Predicate<? super T> predicate);
...
FunctionalInterface
Runnable
Comparable
Comparator
Iterable
FileFilter
java.util.function.*
SE8 : λ
java.util.function.*
BinaryOperator
Function
Predicate
org.springframework.jdbc.core.ResultSetExtractor
org.springframework.jdbc.core.StatementCallback
20
JavaScript
v-language
Funnel
Mini
Lisp
Drools
G
Jython
Bex Script
JudoScript
Tiger
Rexx
Scheme
TermWare
Tea
FScript
Pascal
Luck
Scala Sather
foo
Ada
iScript
Oberon
JRuby
Dawn
Forth
Zigzag
C#
BeanShell
CAL
+SE8 : NASHORN
21
| Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
Clojure
Tcl
LogoJHCR
Prolog
LLP
JESS
Eiffel
Smalltalk
Correlate
Sleep
Simkin
WebL
Processing Icon
Modula-2
E
Present
Basic
Hojo
PHP
Jickle
Piccola
PLAN
ObjectScript
iScript
SALSA
Oberon
Phobos
Groovy
Yassl
Nice
Yoix
Anvil
Pnuts
SE8 : Nashorn
Ajout d’un language dynamique
- Valide « invoke dynamic »
- Ajoute une implémentation performante de JS
- ECMA Script 262
- Remplace rhino
Fait parti du projet « Multi Language VM »
22
- Continuera sur SE9
SE8 :
23
Besoin de Refonte de l’API
- Non intuitive
- Cause de bug
- Pas de sémantiques ex: pas de durée
- …
SE8 : Date
24
BEURK !!!
SE8 : Date
int year = 2013 - 1900;
int month = 3 - 1;
Date date = new Date(year, month, 19, 10, 50);
TimeZone zone = TimeZone.getTimeZone("Asia/Hong_Kong");
Calendar cal = new GregorianCalendar(zone);
cal.setTime(date);
25
DateFormat fm = new SimpleDateFormat("yyyy/MM/dd HH:mm Z");
fm.setTimeZone(zone);
Date calDate = cal.getTime();
String str = fm.format(calDate);
System.out.printf("La date est %sn", str);
Refonte
- L’ancienne API est intégrée
- java.util.Date, java.util.Calendar, …
- Sémantique claire
- Instant, durée, année, jour du mois, … seconde de la minute,
…
- Manipulation naturelle
- Ex : Ajout entre les types, accès direct aux éléments d’une
SE8 : Date
- Ex : Ajout entre les types, accès direct aux éléments d’une
date
- Immuable et threadsafe
- Déjà disponible (RI)
- https://github.com/ThreeTen/threeten
26
SE8 : Date
LocalDateTime.of(2013, 3, 19, 10, 50);
ZonedDateTime.of(2013, 3, 19, 10, 50, 0, 0, TimeZone.of("Asia/Hong_Kong"));
27
SE8 : Date
Instant
Duration
LocalDate
LocalTime
LocalDateTime
ZonedDateTime
28
YearMonth
MonthDay
Year
MonthOfYear
DayOfWeek
Œuf coque
SE8 : Date
int tempsCuisson = 3 * 60 * 1_000;
long fin = System.currentTimeMillis() + tempsCuisson;
//boucle d'attente
...
if(System.currentTimeMillis()>fin){
//c'est prêt
29
//c'est prêt
} ...
Duration tempsCuisson = Duration.ofStandardMinutes(3);
Instant fin = Instant.now().plus(tempsCuisson);
//boucle d'attente
...
if(Instant.now().isAfter(fin)){
//c'est prêt
} ...
Détecter une date
SE8 : Date
Calendar cible = Calendar.getInstance();
cible.set(DAY_OF_MONTH, 31);
cible.set(MONTH, DECEMBER);
Calendar aujourdhui = Calendar.getInstance();
if ( aujourdhui.get(MONTH) == cible.get(MONTH)
&&
30
&&
aujourdhui.get(DAY_OF_MONTH) == cible.get(DAY_OF_MONTH)) {
// c'est le jour J
}
MonthDay cible = MonthDay.of(12, 31);
if(cible.equals(MonthDay.now())){
// c'est le jour J
}
SE8 :
31
@
Annotations de type
- Renforcer le typage
- Documenter, renforcer les contrôles à la compilation
- Pouvoir placer des annotations sur toute utilisation de type
- Ajout de plugins pour le compilateur
- Détection de bug
- Plusieurs plugins existent
- http://types.cs.washington.edu/checker-framework/
SE8 : Annotation
- http://types.cs.washington.edu/checker-framework/
32
Mettre des annotations partout
SE8 : Annotation de type
String myStr = (@NonNull String) myObject;
List<@Immutable T> myList ;
class Folder<F extends @Existing File> { ... }
33
@Immutable Date date = new Date(0);
date.setTime(70); // erreur de compilation
javac -processor MyChecker *.java
+AMÉLIORER LE CODE EN AJOUTANT DE LA VÉRIFICATION
SE8 : Annotation
@JoinColumns({
@JoinColumn(name="ADR_CODE", referencedColumnName="CODE"),
@JoinColumn(name="ADR_CP", referencedColumnName="CP")
})
private Address address;
34
@JoinColumn(name="ADR_CODE", referencedColumnName="CODE")
@JoinColumn(name="ADR_CP", referencedColumnName="CP")
private Address address;
SE8 : Annotation
@Target({METHOD, FIELD})
@Retention(RUNTIME)
@ContainerFor(JoinColumn.class)
public @interface JoinColumns {
JoinColumn[] value();
}
35
@Target({METHOD, FIELD})
@Retention(RUNTIME)
@ContainedBy(JoinColumns.class)
public @interface JoinColumn { ... }
- Webview
- Html5 javascript
SE8
- Html5 javascript
- 3d
- Scene builder 2
- Démo sous IOS, Android
36
Optimisations
SE8
37
Disparition du perm gen space
- Simplification du tuning
- Changement à chaud
- Mais un MetaSpace
Définition de profils pour la JVM
SE8 : OptimisationS
Définition de profils pour la JVM
- Limiter l’empreinte du runtime Java
- Convergence ME SE
- En attendant la modularisation
- http://openjdk.java.net/jeps/161
Flight Recorder
- Enregistreur de bord pour java
38
ça ne vous suffit pas ?
- Sumatra
- Utiliser la carte graphique pour les calculs
- Client http
- G1 amélioré
- Faire plus sans full GC
- Améliore l’inférence de type
- Chainage, à l’intérieur de l’appel d’une méthode
SE8
- Chainage, à l’intérieur de l’appel d’une méthode
- Encodages
- Crypto
- … plus de 40 points
- Sur plus de 70 dans le JEP (Jdk Enhancement Proposal)
39
Java EE7 Avril 2013
http://java.net/projects/javaee-spec/pages/Home
Java se8 Septembre 2013
http://openjdk.java.net/projects/jdk8/
Ressources
Java se9 2015
Java EE8 2015
40
MERCI

Contenu connexe

Tendances

Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesECAM Brussels Engineering School
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketStéphane Legrand
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionECAM Brussels Engineering School
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielleECAM Brussels Engineering School
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simplesPethrvs
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...ECAM Brussels Engineering School
 
JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJosé Paumard
 
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Yi YANG
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
Introdot Netc Sharp Fr
Introdot Netc Sharp FrIntrodot Netc Sharp Fr
Introdot Netc Sharp FrGregory Renard
 
Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2epixelic
 

Tendances (20)

Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacket
 
R Devtools
R DevtoolsR Devtools
R Devtools
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
 
Une Introduction à R
Une Introduction à RUne Introduction à R
Une Introduction à R
 
Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
 
JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne Tour
 
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Programmation Fonctionnelle
Programmation FonctionnelleProgrammation Fonctionnelle
Programmation Fonctionnelle
 
Introdot Netc Sharp Fr
Introdot Netc Sharp FrIntrodot Netc Sharp Fr
Introdot Netc Sharp Fr
 
Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2
 

En vedette

Presentación métricas 10 principios - Ecommerce Day Lima Perú 2010
Presentación métricas   10 principios - Ecommerce Day Lima Perú 2010Presentación métricas   10 principios - Ecommerce Day Lima Perú 2010
Presentación métricas 10 principios - Ecommerce Day Lima Perú 2010Neo Consulting
 
Distribution resume syllabus ISE
Distribution resume syllabus ISEDistribution resume syllabus ISE
Distribution resume syllabus ISEClaireISE
 
Instants photos
Instants photosInstants photos
Instants photosminne
 
CPN | Clinical Psychiatry Network, premier réseau visant à faciliter, amélior...
CPN | Clinical Psychiatry Network, premier réseau visant à faciliter, amélior...CPN | Clinical Psychiatry Network, premier réseau visant à faciliter, amélior...
CPN | Clinical Psychiatry Network, premier réseau visant à faciliter, amélior...Connected Concepts
 
Les PME à la pointe de l’investissement dans le développement durable (Etude ...
Les PME à la pointe de l’investissement dans le développement durable (Etude ...Les PME à la pointe de l’investissement dans le développement durable (Etude ...
Les PME à la pointe de l’investissement dans le développement durable (Etude ...Ministère de l'Économie et des Finances
 
Ebook preforo hosteltur 2010
Ebook preforo hosteltur 2010Ebook preforo hosteltur 2010
Ebook preforo hosteltur 2010Hosteltur
 
Anticipation et gestion du risque numérique : Proposition d’un guide de trava...
Anticipation et gestion du risque numérique : Proposition d’un guide de trava...Anticipation et gestion du risque numérique : Proposition d’un guide de trava...
Anticipation et gestion du risque numérique : Proposition d’un guide de trava...Andres Coronado
 
Presentationite : Maladie courante des présentations actuelles
Presentationite : Maladie courante des présentations actuellesPresentationite : Maladie courante des présentations actuelles
Presentationite : Maladie courante des présentations actuellesJohanne Martel
 
[Webinar] Optimisez votre site en alliant Digital Analytics & A/B Testing
[Webinar] Optimisez votre site en alliant Digital Analytics & A/B Testing[Webinar] Optimisez votre site en alliant Digital Analytics & A/B Testing
[Webinar] Optimisez votre site en alliant Digital Analytics & A/B TestingAT Internet
 
5707 report-01-inserción-laboral
5707 report-01-inserción-laboral5707 report-01-inserción-laboral
5707 report-01-inserción-laboralgiandre88
 
Graduados 2013 - Educación Infantil 5 años
Graduados 2013 - Educación Infantil 5 añosGraduados 2013 - Educación Infantil 5 años
Graduados 2013 - Educación Infantil 5 añosCEIP Isabel Casablanca
 
Fiche-Projet n°2 MRC75 Paris2014 Sécurité
Fiche-Projet n°2 MRC75 Paris2014 SécuritéFiche-Projet n°2 MRC75 Paris2014 Sécurité
Fiche-Projet n°2 MRC75 Paris2014 Sécuritébpetitjean
 
Reseaux sociaux-strategie-cyrille-frank-mediaculture-130723014406-phpapp01
Reseaux sociaux-strategie-cyrille-frank-mediaculture-130723014406-phpapp01Reseaux sociaux-strategie-cyrille-frank-mediaculture-130723014406-phpapp01
Reseaux sociaux-strategie-cyrille-frank-mediaculture-130723014406-phpapp01Raymond Morin
 

En vedette (20)

3. progr. dec. 2013
3. progr. dec. 20133. progr. dec. 2013
3. progr. dec. 2013
 
Presentación métricas 10 principios - Ecommerce Day Lima Perú 2010
Presentación métricas   10 principios - Ecommerce Day Lima Perú 2010Presentación métricas   10 principios - Ecommerce Day Lima Perú 2010
Presentación métricas 10 principios - Ecommerce Day Lima Perú 2010
 
Distribution resume syllabus ISE
Distribution resume syllabus ISEDistribution resume syllabus ISE
Distribution resume syllabus ISE
 
Instants photos
Instants photosInstants photos
Instants photos
 
CPN | Clinical Psychiatry Network, premier réseau visant à faciliter, amélior...
CPN | Clinical Psychiatry Network, premier réseau visant à faciliter, amélior...CPN | Clinical Psychiatry Network, premier réseau visant à faciliter, amélior...
CPN | Clinical Psychiatry Network, premier réseau visant à faciliter, amélior...
 
Médicalisation première ligne_Abdoulaye Sow
Médicalisation première ligne_Abdoulaye SowMédicalisation première ligne_Abdoulaye Sow
Médicalisation première ligne_Abdoulaye Sow
 
Videopowerpoint
VideopowerpointVideopowerpoint
Videopowerpoint
 
Hdr merlo v4
Hdr merlo v4Hdr merlo v4
Hdr merlo v4
 
Les PME à la pointe de l’investissement dans le développement durable (Etude ...
Les PME à la pointe de l’investissement dans le développement durable (Etude ...Les PME à la pointe de l’investissement dans le développement durable (Etude ...
Les PME à la pointe de l’investissement dans le développement durable (Etude ...
 
Ebook preforo hosteltur 2010
Ebook preforo hosteltur 2010Ebook preforo hosteltur 2010
Ebook preforo hosteltur 2010
 
Anticipation et gestion du risque numérique : Proposition d’un guide de trava...
Anticipation et gestion du risque numérique : Proposition d’un guide de trava...Anticipation et gestion du risque numérique : Proposition d’un guide de trava...
Anticipation et gestion du risque numérique : Proposition d’un guide de trava...
 
Presentationite : Maladie courante des présentations actuelles
Presentationite : Maladie courante des présentations actuellesPresentationite : Maladie courante des présentations actuelles
Presentationite : Maladie courante des présentations actuelles
 
[Webinar] Optimisez votre site en alliant Digital Analytics & A/B Testing
[Webinar] Optimisez votre site en alliant Digital Analytics & A/B Testing[Webinar] Optimisez votre site en alliant Digital Analytics & A/B Testing
[Webinar] Optimisez votre site en alliant Digital Analytics & A/B Testing
 
Martes
MartesMartes
Martes
 
5707 report-01-inserción-laboral
5707 report-01-inserción-laboral5707 report-01-inserción-laboral
5707 report-01-inserción-laboral
 
Testimoniales
TestimonialesTestimoniales
Testimoniales
 
Graduados 2013 - Educación Infantil 5 años
Graduados 2013 - Educación Infantil 5 añosGraduados 2013 - Educación Infantil 5 años
Graduados 2013 - Educación Infantil 5 años
 
Fiche-Projet n°2 MRC75 Paris2014 Sécurité
Fiche-Projet n°2 MRC75 Paris2014 SécuritéFiche-Projet n°2 MRC75 Paris2014 Sécurité
Fiche-Projet n°2 MRC75 Paris2014 Sécurité
 
Reseaux sociaux-strategie-cyrille-frank-mediaculture-130723014406-phpapp01
Reseaux sociaux-strategie-cyrille-frank-mediaculture-130723014406-phpapp01Reseaux sociaux-strategie-cyrille-frank-mediaculture-130723014406-phpapp01
Reseaux sociaux-strategie-cyrille-frank-mediaculture-130723014406-phpapp01
 
Couveuse innovation
Couveuse innovationCouveuse innovation
Couveuse innovation
 

Similaire à 201303 - Java8

Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8OLBATI
 
JUG Nantes - Telosys Tools - Avril 2014
JUG Nantes - Telosys Tools - Avril 2014 JUG Nantes - Telosys Tools - Avril 2014
JUG Nantes - Telosys Tools - Avril 2014 telosys
 
Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2Laurent Guérin
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Jean-Michel Doudoux
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8José Paumard
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Laurent BUNIET
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
Client riche et nouvelles technologies
Client riche et nouvelles technologiesClient riche et nouvelles technologies
Client riche et nouvelles technologiesSébastien Letélié
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipseISIG
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web5pidou
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Yannick Chartois
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeksjviet
 

Similaire à 201303 - Java8 (20)

iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
CV_Bilel CHAOUADI
CV_Bilel CHAOUADICV_Bilel CHAOUADI
CV_Bilel CHAOUADI
 
Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8
 
Apple : iOS
Apple : iOSApple : iOS
Apple : iOS
 
JUG Nantes - Telosys Tools - Avril 2014
JUG Nantes - Telosys Tools - Avril 2014 JUG Nantes - Telosys Tools - Avril 2014
JUG Nantes - Telosys Tools - Avril 2014
 
Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
Client riche et nouvelles technologies
Client riche et nouvelles technologiesClient riche et nouvelles technologies
Client riche et nouvelles technologies
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipse
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeks
 

Plus de lyonjug

DIY: Analyse statique en Java
DIY: Analyse statique en JavaDIY: Analyse statique en Java
DIY: Analyse statique en Javalyonjug
 
Lightning talk LyonJUG février 2016 - Ansible
Lightning talk LyonJUG février 2016 - AnsibleLightning talk LyonJUG février 2016 - Ansible
Lightning talk LyonJUG février 2016 - Ansiblelyonjug
 
Introduction LyonJUG décembre 2015
Introduction LyonJUG décembre 2015Introduction LyonJUG décembre 2015
Introduction LyonJUG décembre 2015lyonjug
 
Introduction LyonJUG Janvier 2016
Introduction LyonJUG Janvier 2016Introduction LyonJUG Janvier 2016
Introduction LyonJUG Janvier 2016lyonjug
 
Presentation jug novembre2015
Presentation jug novembre2015Presentation jug novembre2015
Presentation jug novembre2015lyonjug
 
201502 - Integration Testing
201502 - Integration Testing201502 - Integration Testing
201502 - Integration Testinglyonjug
 
201311 - Middleware
201311 - Middleware201311 - Middleware
201311 - Middlewarelyonjug
 
201303 - Golo
201303 - Golo201303 - Golo
201303 - Gololyonjug
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Foraxlyonjug
 
201301 - Focus Neo4j
201301 - Focus Neo4j201301 - Focus Neo4j
201301 - Focus Neo4jlyonjug
 
201301 - Panorama NoSQL
201301 - Panorama NoSQL201301 - Panorama NoSQL
201301 - Panorama NoSQLlyonjug
 
201209 Lombok & Guava
201209 Lombok & Guava201209 Lombok & Guava
201209 Lombok & Guavalyonjug
 
201209 LT Clojure
201209 LT Clojure201209 LT Clojure
201209 LT Clojurelyonjug
 
Spring Batch Workshop (advanced)
Spring Batch Workshop (advanced)Spring Batch Workshop (advanced)
Spring Batch Workshop (advanced)lyonjug
 
Spring Batch Workshop
Spring Batch WorkshopSpring Batch Workshop
Spring Batch Workshoplyonjug
 
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...lyonjug
 
GlassFish, Application versioning et rolling upgrade en haute disponibilité
GlassFish, Application versioning et rolling upgrade en haute disponibilitéGlassFish, Application versioning et rolling upgrade en haute disponibilité
GlassFish, Application versioning et rolling upgrade en haute disponibilitélyonjug
 
Développement dans le cloud - Sacha Labourey
Développement dans le cloud - Sacha LaboureyDéveloppement dans le cloud - Sacha Labourey
Développement dans le cloud - Sacha Laboureylyonjug
 
Présentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William DraïPrésentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William Draïlyonjug
 
20091020 JPA2
20091020 JPA220091020 JPA2
20091020 JPA2lyonjug
 

Plus de lyonjug (20)

DIY: Analyse statique en Java
DIY: Analyse statique en JavaDIY: Analyse statique en Java
DIY: Analyse statique en Java
 
Lightning talk LyonJUG février 2016 - Ansible
Lightning talk LyonJUG février 2016 - AnsibleLightning talk LyonJUG février 2016 - Ansible
Lightning talk LyonJUG février 2016 - Ansible
 
Introduction LyonJUG décembre 2015
Introduction LyonJUG décembre 2015Introduction LyonJUG décembre 2015
Introduction LyonJUG décembre 2015
 
Introduction LyonJUG Janvier 2016
Introduction LyonJUG Janvier 2016Introduction LyonJUG Janvier 2016
Introduction LyonJUG Janvier 2016
 
Presentation jug novembre2015
Presentation jug novembre2015Presentation jug novembre2015
Presentation jug novembre2015
 
201502 - Integration Testing
201502 - Integration Testing201502 - Integration Testing
201502 - Integration Testing
 
201311 - Middleware
201311 - Middleware201311 - Middleware
201311 - Middleware
 
201303 - Golo
201303 - Golo201303 - Golo
201303 - Golo
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Forax
 
201301 - Focus Neo4j
201301 - Focus Neo4j201301 - Focus Neo4j
201301 - Focus Neo4j
 
201301 - Panorama NoSQL
201301 - Panorama NoSQL201301 - Panorama NoSQL
201301 - Panorama NoSQL
 
201209 Lombok & Guava
201209 Lombok & Guava201209 Lombok & Guava
201209 Lombok & Guava
 
201209 LT Clojure
201209 LT Clojure201209 LT Clojure
201209 LT Clojure
 
Spring Batch Workshop (advanced)
Spring Batch Workshop (advanced)Spring Batch Workshop (advanced)
Spring Batch Workshop (advanced)
 
Spring Batch Workshop
Spring Batch WorkshopSpring Batch Workshop
Spring Batch Workshop
 
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
Engagement des sociétés d'Ingénierie dans la contribution open source : un ce...
 
GlassFish, Application versioning et rolling upgrade en haute disponibilité
GlassFish, Application versioning et rolling upgrade en haute disponibilitéGlassFish, Application versioning et rolling upgrade en haute disponibilité
GlassFish, Application versioning et rolling upgrade en haute disponibilité
 
Développement dans le cloud - Sacha Labourey
Développement dans le cloud - Sacha LaboureyDéveloppement dans le cloud - Sacha Labourey
Développement dans le cloud - Sacha Labourey
 
Présentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William DraïPrésentation Granite ds lyon 2011 par William Draï
Présentation Granite ds lyon 2011 par William Draï
 
20091020 JPA2
20091020 JPA220091020 JPA2
20091020 JPA2
 

201303 - Java8

  • 1.
  • 2. SYLVAIN MOUGENOT •Sylvain.Mougenot@gmail.com •14 ans avec Java 2 •https://github.com/smougenot/
  • 3. Sur la route de Java 1995 JDK Beta 1996 JDK 1.0 1997 JDK 1.1 1998 JDK 1.2 2000 JDK 1.3 2002 JDK 1.4 2004 JDK 5 2006 JDK 6 EOL : 2013/02 3 2011 JDK7 2013 JDK8 2015 JDK9 EOL : 2013/02
  • 4. Des versions régulières - SE tous les 2 ans - EE tous les 2 ans Une règle du jeu claire Sur la route de Java Une règle du jeu claire - Un contenu prévu mais pas impératif - Un report des contenus en retard 4
  • 5. Objectifs - Simplification - Productivité - Moderniser le language - Moderniser la plateforme S’adapter aux usages Sur la route de Java - Cloud - Embarqué - Internet des objets - Cycles courts 5
  • 6. Java est partout Sur la route de Java Mac OS X Linux ARM Java Card 6 HTTP://WWW.APPLE.COM/ HTTP://WWW.RASPBERRYPI.ORG/
  • 7.
  • 8. SE8 - Septembre 2013 - Lambda - Nashorn - Dates - Annotations - JavaFx - Optimisations SE8 - Optimisations Evolution majeure Migration transparente 8
  • 10. Evolution du language - Closure façon java - Limité à la notion d’interface fonctionnelle - Implémentation par défaut d’une méthode dans une interface - Refonte des API - Parallélisation SE8 : λ Impact profond dans la plateforme - Introduction de nouveautés dans le bytecode Pour en savoir plus - http://cr.openjdk.java.net/~briangoetz/lambda/sotc3.html 10
  • 11. SE8 : λ Runnable ditBonjour = new Runnable() { @Override public void run() { System.out.print("Bonjour"); } }; 11 Runnable ditBonjourL = () -> System.out.print("Bonjour");
  • 12. SE8 : λ public interface Maximum<T extends Number>{ T max(T a, T b ); } Maximum<Integer> maxL1 = (Integer a, Integer b) -> { return Math.max(a, b); }; Maximum<Integer> maxL2 = (a, b) -> { return Math.max(a, b); }; Maximum<Integer> maxL3 = (a, b) -> Math.max(a, b); 12 Maximum<Integer> maxL3 = (a, b) -> Math.max(a, b); Maximum<Integer> maxL4 = Math::max ;
  • 13. SE8 : λ public interface Taille<T extends CharSequence>{ int taille(T text); boolean estVide(T text); 13 } Taille<String> taille = text -> text.length();
  • 14. default boolean estVide(T text) {return 0 == taille(text);} SE8 : λ public interface Taille<T extends CharSequence>{ int taille(T text); 14 } Taille<String> taille = text -> text.length();
  • 15. SE8 : λ @FunctionalInterface public interface Taille<T extends CharSequence>{ int taille(T text); default boolean estVide(T text) {return 0 == taille(text);} 15 } Taille<String> taille = text -> text.length();
  • 16. Evolution majeure des collections - Parallélisation, « lazyness » Package java.util.streams - Construction de pipelines d’opérations : filter map reduce SE8 : λ D’autres API vont utiliser ces extensions 16
  • 17. SE8 : λ class Developpeur{ String nom; int anneeEmbauche; int nbProjets; } ... int maxPrj = 0; for (Developpeur d : devs){ if(d.anneeEmbauche > 2010){ 17 if(d.anneeEmbauche > 2010){ maxPrj = Math.max(maxPrj, d.nbProjets); } } int maxPrj = devs .stream() .filter(d -> d.anneeEmbauche > 2010) .map(d -> d.nbProjets) .reduce(0, Math::max); .parallelStream()
  • 18.
  • 19. Stream<T> SE8 : λ Stream<T> filter(Predicate<? super T> predicate); <R> Stream<R> map(Mapper<? extends R, ? super T> mapper); T reduce(T base, BinaryOperator<T> op); Stream<T> sorted(Comparator<? super T> comparator); Stream<T> cumulate(BinaryOperator<T> operator); 19 Optional<T> findFirst(); Optional<T> findAny(); boolean anyMatch(Predicate<? super T> predicate); boolean allMatch(Predicate<? super T> predicate); boolean noneMatch(Predicate<? super T> predicate); ...
  • 21. JavaScript v-language Funnel Mini Lisp Drools G Jython Bex Script JudoScript Tiger Rexx Scheme TermWare Tea FScript Pascal Luck Scala Sather foo Ada iScript Oberon JRuby Dawn Forth Zigzag C# BeanShell CAL +SE8 : NASHORN 21 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Clojure Tcl LogoJHCR Prolog LLP JESS Eiffel Smalltalk Correlate Sleep Simkin WebL Processing Icon Modula-2 E Present Basic Hojo PHP Jickle Piccola PLAN ObjectScript iScript SALSA Oberon Phobos Groovy Yassl Nice Yoix Anvil Pnuts
  • 22. SE8 : Nashorn Ajout d’un language dynamique - Valide « invoke dynamic » - Ajoute une implémentation performante de JS - ECMA Script 262 - Remplace rhino Fait parti du projet « Multi Language VM » 22 - Continuera sur SE9
  • 24. Besoin de Refonte de l’API - Non intuitive - Cause de bug - Pas de sémantiques ex: pas de durée - … SE8 : Date 24
  • 25. BEURK !!! SE8 : Date int year = 2013 - 1900; int month = 3 - 1; Date date = new Date(year, month, 19, 10, 50); TimeZone zone = TimeZone.getTimeZone("Asia/Hong_Kong"); Calendar cal = new GregorianCalendar(zone); cal.setTime(date); 25 DateFormat fm = new SimpleDateFormat("yyyy/MM/dd HH:mm Z"); fm.setTimeZone(zone); Date calDate = cal.getTime(); String str = fm.format(calDate); System.out.printf("La date est %sn", str);
  • 26. Refonte - L’ancienne API est intégrée - java.util.Date, java.util.Calendar, … - Sémantique claire - Instant, durée, année, jour du mois, … seconde de la minute, … - Manipulation naturelle - Ex : Ajout entre les types, accès direct aux éléments d’une SE8 : Date - Ex : Ajout entre les types, accès direct aux éléments d’une date - Immuable et threadsafe - Déjà disponible (RI) - https://github.com/ThreeTen/threeten 26
  • 27. SE8 : Date LocalDateTime.of(2013, 3, 19, 10, 50); ZonedDateTime.of(2013, 3, 19, 10, 50, 0, 0, TimeZone.of("Asia/Hong_Kong")); 27
  • 29. Œuf coque SE8 : Date int tempsCuisson = 3 * 60 * 1_000; long fin = System.currentTimeMillis() + tempsCuisson; //boucle d'attente ... if(System.currentTimeMillis()>fin){ //c'est prêt 29 //c'est prêt } ... Duration tempsCuisson = Duration.ofStandardMinutes(3); Instant fin = Instant.now().plus(tempsCuisson); //boucle d'attente ... if(Instant.now().isAfter(fin)){ //c'est prêt } ...
  • 30. Détecter une date SE8 : Date Calendar cible = Calendar.getInstance(); cible.set(DAY_OF_MONTH, 31); cible.set(MONTH, DECEMBER); Calendar aujourdhui = Calendar.getInstance(); if ( aujourdhui.get(MONTH) == cible.get(MONTH) && 30 && aujourdhui.get(DAY_OF_MONTH) == cible.get(DAY_OF_MONTH)) { // c'est le jour J } MonthDay cible = MonthDay.of(12, 31); if(cible.equals(MonthDay.now())){ // c'est le jour J }
  • 32. Annotations de type - Renforcer le typage - Documenter, renforcer les contrôles à la compilation - Pouvoir placer des annotations sur toute utilisation de type - Ajout de plugins pour le compilateur - Détection de bug - Plusieurs plugins existent - http://types.cs.washington.edu/checker-framework/ SE8 : Annotation - http://types.cs.washington.edu/checker-framework/ 32
  • 33. Mettre des annotations partout SE8 : Annotation de type String myStr = (@NonNull String) myObject; List<@Immutable T> myList ; class Folder<F extends @Existing File> { ... } 33 @Immutable Date date = new Date(0); date.setTime(70); // erreur de compilation javac -processor MyChecker *.java +AMÉLIORER LE CODE EN AJOUTANT DE LA VÉRIFICATION
  • 34. SE8 : Annotation @JoinColumns({ @JoinColumn(name="ADR_CODE", referencedColumnName="CODE"), @JoinColumn(name="ADR_CP", referencedColumnName="CP") }) private Address address; 34 @JoinColumn(name="ADR_CODE", referencedColumnName="CODE") @JoinColumn(name="ADR_CP", referencedColumnName="CP") private Address address;
  • 35. SE8 : Annotation @Target({METHOD, FIELD}) @Retention(RUNTIME) @ContainerFor(JoinColumn.class) public @interface JoinColumns { JoinColumn[] value(); } 35 @Target({METHOD, FIELD}) @Retention(RUNTIME) @ContainedBy(JoinColumns.class) public @interface JoinColumn { ... }
  • 36. - Webview - Html5 javascript SE8 - Html5 javascript - 3d - Scene builder 2 - Démo sous IOS, Android 36
  • 38. Disparition du perm gen space - Simplification du tuning - Changement à chaud - Mais un MetaSpace Définition de profils pour la JVM SE8 : OptimisationS Définition de profils pour la JVM - Limiter l’empreinte du runtime Java - Convergence ME SE - En attendant la modularisation - http://openjdk.java.net/jeps/161 Flight Recorder - Enregistreur de bord pour java 38
  • 39. ça ne vous suffit pas ? - Sumatra - Utiliser la carte graphique pour les calculs - Client http - G1 amélioré - Faire plus sans full GC - Améliore l’inférence de type - Chainage, à l’intérieur de l’appel d’une méthode SE8 - Chainage, à l’intérieur de l’appel d’une méthode - Encodages - Crypto - … plus de 40 points - Sur plus de 70 dans le JEP (Jdk Enhancement Proposal) 39
  • 40. Java EE7 Avril 2013 http://java.net/projects/javaee-spec/pages/Home Java se8 Septembre 2013 http://openjdk.java.net/projects/jdk8/ Ressources Java se9 2015 Java EE8 2015 40 MERCI