SlideShare une entreprise Scribd logo
1  sur  40
Nouveautés




    Frédéric Renout   Novembre 2011
 Introduction
 Java GUI
 Java « core »
 Java dynamic binding
 Java Concurrent




                         Frédéric Renout   Novembre 2011
Déploiement              Client graphique


    Collections              Langage
            Réseau
                                        Sécurité


Dynamique         Concurrent                  I/O


                      Frédéric Renout               Novembre 2011
Client Graphique
Déploiement




                   Frédéric Renout   Novembre 2011
Client graphique
 Nouveau Look and Feel : Nimbus
 Transparence , gradient et formes libres pour les
  fenêtres swing
 Interactions graphiques améliorées entre awt et swing

Déploiement
 Amélioration de JNLP
   Embeddable
   Signature partielle

                             Frédéric Renout    Novembre 2011
Frédéric Renout   Novembre 2011
Frédéric Renout   Novembre 2011
Frédéric Renout   Novembre 2011
Frédéric Renout   Novembre 2011
 Collection
 Sécurité
 Réseau
 Langage




               Frédéric Renout   Novembre 2011
 Interface de Queue bloquante (LinkedTranferQueue)
 Dérive de Blocking
 Permet d’attendre qu’un item envoyé soit consommé
 Méthodes:
   hasWaitingConsumer / getWaitingConsumerCount
   transfer : bloquant
   tryTransfer : bon bloquant et paramétrable


 Démo


                             Frédéric Renout     Novembre 2011
 Nouveaux algo basés sur ECC (Elliptic Curve
  Cryptography)
 Possibilité de désactiver l’utilisation d’algos « faibles »
  durant l’utilisation de TLS (=SSL)




                               Frédéric Renout      Novembre 2011
Courbe elliptique :
y2mod p =x3+ax+b mod p
Ici : y2=x3-5x+3

Courbe ayant des propriétés de
calcul « simples » pour +




                           Frédéric Renout   Novembre 2011
Algorithme :
         A et B choisissent publiquement une courbe C et un point P de
cette courbe
         A choisi secrètement un entier dA
         B choisi secrètement un entier dB
         A envoie publiquement dAP = P+P+…dA fois…+P
         B envoie publiquement dBP = P+P+…dB fois…+P
         A et B peuvent calculer dA(dBP) = dB(dAP) = (dBdA)P qui est leur
clé de chiffrement secrète
         Un espion E doit pouvoir retrouver dA et dB et aujourd’hui le
temps nécessaire pour résoudre ce problème est très long
Plus d’infos :
     http://www.apprendre-en-ligne.net/crypto/moderne/elliptique.html
http://fr.wikipedia.org/wiki/Cryptographie_sur_les_courbes_elliptiques

                                    Frédéric Renout          Novembre 2011
 UrlClassLoader.close
   Fermer le classLoader pour libérer les ressources
    chargées et les remplacer
 Socket Direct Protocol
   Solaris & Linux
   Utilisé par infiniBand qui permet de faire des accès
    mémoire entre machine sans passer par l’OS




                                Frédéric Renout     Novembre 2011
Projet Coin

coin something :
       to invent a new word or phrase that other people
then begin to use

Modification mineure du langage visant à rendre le code
plus facile à écrire et à maintenir



                            Frédéric Renout     Novembre 2011
L’utilisation de varargs de types paramétrés génère des
warnings à l’utilisation des méthodes
Java 7 permet de
Générer un warning à la déclaration : possible heap
pollution
Supprimer ces warnings
 @SafeVarargs
   Retire tout warnings
 @SuppressWarnings(« unchecked », »varargs »)
   Retire les warnings à la déclaration
 -Xlint:-varargs

                              Frédéric Renout   Novembre 2011
Possibilité de séparer les nombres par des _
5000000 = 5_000_000
Limite les erreurs de lecture

Possibilité de représenter un nombre sous sa forme
binaire
42 = 0b101010
Facilite la représentation des bitmasks…



                             Frédéric Renout   Novembre 2011
… ou d’une bitmap
public static final short[] HAPPY_FACE = {
(short)0b0000011111100000;
(short)0b0000100000010000;
(short)0b0001000000001000;
(short)0b0010000000000100;
(short)0b0100000000000010;
(short)0b1000011001100001;
(short)0b1000011001100001;
(short)0b1000000000000001;
(short)0b1000000000000001;
(short)0b1001000000001001;
(short)0b1000100000010001;
(short)0b0100011111100010;
(short)0b0010000000000100;
(short)0b0001000000001000;
(short)0b0000100000010000;
(short)0b0000011111100000; }


                        Frédéric Renout      Novembre 2011
… ou d’une bitmap
public static final short[] HAPPY_FACE = {
(short)0b0000011111100000;
(short)0b0000100000010000;
(short)0b0001000000001000;
(short)0b0010000000000100;
(short)0b0100000000000010;
(short)0b1000011001100001;
(short)0b1000011001100001;
(short)0b1000000000000001;
(short)0b1000000000000001;
(short)0b1001000000001001;
(short)0b1000100000010001;
(short)0b0100011111100010;
(short)0b0010000000000100;
(short)0b0001000000001000;
(short)0b0000100000010000;
(short)0b0000011111100000; }


                        Frédéric Renout      Novembre 2011
On peut switcher sur
 des types primitif (ou leurs wrappers)
 des enums
 des Strings




                            Frédéric Renout   Novembre 2011
List<IndexOutOfBoundsException> dictionnaire = new
ArrayList<IndexOutOfBoundsException >();



Map<String,Map<String,String>> i18nDictionnaire = new
HashMap<String,Map<String,String>>();




                            Frédéric Renout     Novembre 2011
List<IndexOutOfBoundsException> dictionnaire = new
ArrayList<>();



Map<String,Map<String,String>> i18nDictionnaire = new
HashMap<>();




                            Frédéric Renout     Novembre 2011
 Multiple catch
 Re-throw precis




                    Frédéric Renout   Novembre 2011
try {                                               try {
          File input = new File("input.txt");                 File input = new File("input.txt");
          FileReader fr = new FileReader(input);              FileReader fr = new FileReader(input);
          File output = new File("output.txt");               File output = new File("output.txt");
          FileWriter fw = new FileWriter(output);             FileWriter fw = new FileWriter(output);
          int readed;                                         int readed;
          while ((readed = fr.read()) != -1) {                while ((readed = fr.read()) != -1) {
              fw.write(readed);                                   fw.write(readed);
          }                                                   }
          fw.flush();                                         fw.flush();
          fw.close();                                         fw.close();
          fr.close();                                         fr.close();
      } catch (FileNotFoundException e) {                 } catch (FileNotFoundException | IOException e) {
          log(e);                                             log(e);
      }catch (IOException e) {                            }
          log(e);                                     }
      }
  }



                                                     Frédéric Renout                                    Novembre 2011
public void copy() throws FileNotFoundException , IOException {     public void copy() throws FileNotFoundException , IOException {
try {                                                               try {
            File input = new File("input.txt");                                 File input = new File("input.txt");
            FileReader fr = new FileReader(input);                              FileReader fr = new FileReader(input);
            File output = new File("output.txt");                               File output = new File("output.txt");
            FileWriter fw = new FileWriter(output);                             FileWriter fw = new FileWriter(output);
            int readed;                                                         int readed;
            while ((readed = fr.read()) != -1) {                                while ((readed = fr.read()) != -1) {
                fw.write(readed);                                                   fw.write(readed);
            }                                                                   }
            fw.flush();                                                         fw.flush();
            fw.close();                                                         fw.close();
            fr.close();                                                         fr.close();
        } catch (FileNotFoundException e) {                                 } catch (Exception e) {
            log(e);                                                             log(e);
            throw e;                                                            throw e;
        }catch (IOException e) {                                            }
            log(e);                                                     }
            throw e;                                                }
        }
    }
}



                                                                  Frédéric Renout                                         Novembre 2011
 Nouvelle interface : AutoClosable
 On passe les ressources au try
 En sortie les ressources sont fermées dans le sens
  inverse de la déclaration
 En cas d’exception dans le try les exceptions du à la
  fermeture sont supprimées mais accessibles via
  Throwable.getSuppressed
 Démo




                             Frédéric Renout      Novembre 2011
InvokeDynamic




                Frédéric Renout   Novembre 2011
Quels langages tournent sur une JVM?



                      Groovy
          Scala
                                         Jython
                     Java
          Erjang                              Rhino

             JRuby
                       Et pleins d’autres...


                            Frédéric Renout           Novembre 2011
Beaucoup de ces langages sont des langages
dynamiques
Java est fortement typé. Les traitements dynamiques
doivent être « émulés » et sont couteux.
Nouvelle instruction au niveau du bytecode :
invokeDynamic
Nouvelle API de réflection : java.lang.invoke
       CallSite
       MethodHandle
Démo
                           Frédéric Renout    Novembre 2011
 ThreadLocaleRandom
 Phaser
 Fork/join




                       Frédéric Renout   Novembre 2011
 Utilisation de nombre aléatoires dans des threads ou
  des ForkJoinTask
 Garanti que chaque Thread à son propre Random




                            Frédéric Renout    Novembre 2011
Permet de synchroniser de traitements, de gérer des
phases :
1. Enregistrer le nombre d’entités se synchronisant sur
   le Phaser
2. Démarrer les Threads
3. Se synchroniser avec arriveAndAwaitAdvance()
4. Attendre une phase : awaitAdvance(#phase)


Démo

                            Frédéric Renout    Novembre 2011
Fork : diviser un tache en sous-taches
Join : combiner les résultats des sous-tâches




                             Frédéric Renout    Novembre 2011
 Utiliser efficacement plusieurs processeurs
 WorkStealing : les threads inutilisés prennent des
  tâches à ceux occupés.
 Similaire à Map/Reduce de Google mais avec une
  granularité différente (on peut définir des seuils de
  fork) et une scalabilité différente : MapReduce
  fonctionne sur des clusters, fork/join sur une JVM et sa
  machine



                             Frédéric Renout     Novembre 2011
 Déclenchements
   Synchrone -> invoke
   Asynchrone -> execute
   Asynchrone et future ->submit




                            Frédéric Renout   Novembre 2011
ForkJoinPool


ForkJoinTask
           invocation   compute()




                             compute()




                           Frédéric Renout   Novembre 2011
Frédéric Renout   Novembre 2011
A Jean-Michel 




       Frédéric Renout   Novembre 2011
Frédéric Renout   Novembre 2011

Contenu connexe

Tendances

PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensionsjulien pauli
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
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
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...MICHRAFY MUSTAFA
 
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
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPjulien pauli
 
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
 
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
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
StHack 2014 - Ninon Eyrolles Obfuscation 101
StHack 2014 - Ninon Eyrolles Obfuscation 101StHack 2014 - Ninon Eyrolles Obfuscation 101
StHack 2014 - Ninon Eyrolles Obfuscation 101StHack
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Emeric Tapachès
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simplesPethrvs
 

Tendances (20)

PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensions
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
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
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 
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
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 
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
 
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
 
Java Nio 2
Java Nio 2Java Nio 2
Java Nio 2
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
StHack 2014 - Ninon Eyrolles Obfuscation 101
StHack 2014 - Ninon Eyrolles Obfuscation 101StHack 2014 - Ninon Eyrolles Obfuscation 101
StHack 2014 - Ninon Eyrolles Obfuscation 101
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 

Similaire à Java SE 7

Entrees sorties
Entrees sortiesEntrees sorties
Entrees sortiesyazidds2
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPjulien pauli
 
Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012Pablo Tamarit
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzlesMicrosoft
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Frederic Hardy
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Engineor
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afupJulien Vinber
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Les nouveautés de java 7 et les promesses
Les nouveautés de java 7  et les promessesLes nouveautés de java 7  et les promesses
Les nouveautés de java 7 et les promessesEric Toguem
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5halleck45
 

Similaire à Java SE 7 (20)

Entrees sorties
Entrees sortiesEntrees sorties
Entrees sorties
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
 
fortran 2.pdf
fortran 2.pdffortran 2.pdf
fortran 2.pdf
 
Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
 
Programmation Fonctionnelle
Programmation FonctionnelleProgrammation Fonctionnelle
Programmation Fonctionnelle
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Theme 8
Theme 8Theme 8
Theme 8
 
Ce bon vieux propel
Ce bon vieux propelCe bon vieux propel
Ce bon vieux propel
 
Les nouveautés de java 7 et les promesses
Les nouveautés de java 7  et les promessesLes nouveautés de java 7  et les promesses
Les nouveautés de java 7 et les promesses
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
PHP_intro.pdf
PHP_intro.pdfPHP_intro.pdf
PHP_intro.pdf
 

Plus de Lorraine JUG

Milou fait un régime Guava Lombok
Milou fait un régime Guava LombokMilou fait un régime Guava Lombok
Milou fait un régime Guava LombokLorraine JUG
 
De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()Lorraine JUG
 
Java Message Services
Java Message ServicesJava Message Services
Java Message ServicesLorraine JUG
 
Bonita Open Solution why, what, how?
Bonita Open Solution why, what, how?Bonita Open Solution why, what, how?
Bonita Open Solution why, what, how?Lorraine JUG
 
Stack Technologique Google
Stack Technologique GoogleStack Technologique Google
Stack Technologique GoogleLorraine JUG
 
The Java EE 6 platform
The Java EE 6 platformThe Java EE 6 platform
The Java EE 6 platformLorraine JUG
 
Comment concilier Agilité et projet au forfait ?
Comment concilier Agilité et projet au forfait ?Comment concilier Agilité et projet au forfait ?
Comment concilier Agilité et projet au forfait ?Lorraine JUG
 
Scrum, iceScrum et Rock'n Roll
Scrum, iceScrum et Rock'n RollScrum, iceScrum et Rock'n Roll
Scrum, iceScrum et Rock'n RollLorraine JUG
 

Plus de Lorraine JUG (13)

Couchbase
CouchbaseCouchbase
Couchbase
 
Milou fait un régime Guava Lombok
Milou fait un régime Guava LombokMilou fait un régime Guava Lombok
Milou fait un régime Guava Lombok
 
De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()
 
NIO 2
NIO 2NIO 2
NIO 2
 
Java Message Services
Java Message ServicesJava Message Services
Java Message Services
 
Bonita Open Solution why, what, how?
Bonita Open Solution why, what, how?Bonita Open Solution why, what, how?
Bonita Open Solution why, what, how?
 
Stack Technologique Google
Stack Technologique GoogleStack Technologique Google
Stack Technologique Google
 
GWT
GWTGWT
GWT
 
The Java EE 6 platform
The Java EE 6 platformThe Java EE 6 platform
The Java EE 6 platform
 
Tapestry
TapestryTapestry
Tapestry
 
Comment concilier Agilité et projet au forfait ?
Comment concilier Agilité et projet au forfait ?Comment concilier Agilité et projet au forfait ?
Comment concilier Agilité et projet au forfait ?
 
Fcitr public
Fcitr publicFcitr public
Fcitr public
 
Scrum, iceScrum et Rock'n Roll
Scrum, iceScrum et Rock'n RollScrum, iceScrum et Rock'n Roll
Scrum, iceScrum et Rock'n Roll
 

Java SE 7

  • 1. Nouveautés Frédéric Renout Novembre 2011
  • 2.  Introduction  Java GUI  Java « core »  Java dynamic binding  Java Concurrent Frédéric Renout Novembre 2011
  • 3. Déploiement Client graphique Collections Langage Réseau Sécurité Dynamique Concurrent I/O Frédéric Renout Novembre 2011
  • 4. Client Graphique Déploiement Frédéric Renout Novembre 2011
  • 5. Client graphique  Nouveau Look and Feel : Nimbus  Transparence , gradient et formes libres pour les fenêtres swing  Interactions graphiques améliorées entre awt et swing Déploiement  Amélioration de JNLP  Embeddable  Signature partielle Frédéric Renout Novembre 2011
  • 6. Frédéric Renout Novembre 2011
  • 7. Frédéric Renout Novembre 2011
  • 8. Frédéric Renout Novembre 2011
  • 9. Frédéric Renout Novembre 2011
  • 10.  Collection  Sécurité  Réseau  Langage Frédéric Renout Novembre 2011
  • 11.  Interface de Queue bloquante (LinkedTranferQueue)  Dérive de Blocking  Permet d’attendre qu’un item envoyé soit consommé  Méthodes:  hasWaitingConsumer / getWaitingConsumerCount  transfer : bloquant  tryTransfer : bon bloquant et paramétrable  Démo Frédéric Renout Novembre 2011
  • 12.  Nouveaux algo basés sur ECC (Elliptic Curve Cryptography)  Possibilité de désactiver l’utilisation d’algos « faibles » durant l’utilisation de TLS (=SSL) Frédéric Renout Novembre 2011
  • 13. Courbe elliptique : y2mod p =x3+ax+b mod p Ici : y2=x3-5x+3 Courbe ayant des propriétés de calcul « simples » pour + Frédéric Renout Novembre 2011
  • 14. Algorithme : A et B choisissent publiquement une courbe C et un point P de cette courbe A choisi secrètement un entier dA B choisi secrètement un entier dB A envoie publiquement dAP = P+P+…dA fois…+P B envoie publiquement dBP = P+P+…dB fois…+P A et B peuvent calculer dA(dBP) = dB(dAP) = (dBdA)P qui est leur clé de chiffrement secrète Un espion E doit pouvoir retrouver dA et dB et aujourd’hui le temps nécessaire pour résoudre ce problème est très long Plus d’infos : http://www.apprendre-en-ligne.net/crypto/moderne/elliptique.html http://fr.wikipedia.org/wiki/Cryptographie_sur_les_courbes_elliptiques Frédéric Renout Novembre 2011
  • 15.  UrlClassLoader.close  Fermer le classLoader pour libérer les ressources chargées et les remplacer  Socket Direct Protocol  Solaris & Linux  Utilisé par infiniBand qui permet de faire des accès mémoire entre machine sans passer par l’OS Frédéric Renout Novembre 2011
  • 16. Projet Coin coin something : to invent a new word or phrase that other people then begin to use Modification mineure du langage visant à rendre le code plus facile à écrire et à maintenir Frédéric Renout Novembre 2011
  • 17. L’utilisation de varargs de types paramétrés génère des warnings à l’utilisation des méthodes Java 7 permet de Générer un warning à la déclaration : possible heap pollution Supprimer ces warnings  @SafeVarargs  Retire tout warnings  @SuppressWarnings(« unchecked », »varargs »)  Retire les warnings à la déclaration  -Xlint:-varargs Frédéric Renout Novembre 2011
  • 18. Possibilité de séparer les nombres par des _ 5000000 = 5_000_000 Limite les erreurs de lecture Possibilité de représenter un nombre sous sa forme binaire 42 = 0b101010 Facilite la représentation des bitmasks… Frédéric Renout Novembre 2011
  • 19. … ou d’une bitmap public static final short[] HAPPY_FACE = { (short)0b0000011111100000; (short)0b0000100000010000; (short)0b0001000000001000; (short)0b0010000000000100; (short)0b0100000000000010; (short)0b1000011001100001; (short)0b1000011001100001; (short)0b1000000000000001; (short)0b1000000000000001; (short)0b1001000000001001; (short)0b1000100000010001; (short)0b0100011111100010; (short)0b0010000000000100; (short)0b0001000000001000; (short)0b0000100000010000; (short)0b0000011111100000; } Frédéric Renout Novembre 2011
  • 20. … ou d’une bitmap public static final short[] HAPPY_FACE = { (short)0b0000011111100000; (short)0b0000100000010000; (short)0b0001000000001000; (short)0b0010000000000100; (short)0b0100000000000010; (short)0b1000011001100001; (short)0b1000011001100001; (short)0b1000000000000001; (short)0b1000000000000001; (short)0b1001000000001001; (short)0b1000100000010001; (short)0b0100011111100010; (short)0b0010000000000100; (short)0b0001000000001000; (short)0b0000100000010000; (short)0b0000011111100000; } Frédéric Renout Novembre 2011
  • 21. On peut switcher sur  des types primitif (ou leurs wrappers)  des enums  des Strings Frédéric Renout Novembre 2011
  • 22. List<IndexOutOfBoundsException> dictionnaire = new ArrayList<IndexOutOfBoundsException >(); Map<String,Map<String,String>> i18nDictionnaire = new HashMap<String,Map<String,String>>(); Frédéric Renout Novembre 2011
  • 23. List<IndexOutOfBoundsException> dictionnaire = new ArrayList<>(); Map<String,Map<String,String>> i18nDictionnaire = new HashMap<>(); Frédéric Renout Novembre 2011
  • 24.  Multiple catch  Re-throw precis Frédéric Renout Novembre 2011
  • 25. try { try { File input = new File("input.txt"); File input = new File("input.txt"); FileReader fr = new FileReader(input); FileReader fr = new FileReader(input); File output = new File("output.txt"); File output = new File("output.txt"); FileWriter fw = new FileWriter(output); FileWriter fw = new FileWriter(output); int readed; int readed; while ((readed = fr.read()) != -1) { while ((readed = fr.read()) != -1) { fw.write(readed); fw.write(readed); } } fw.flush(); fw.flush(); fw.close(); fw.close(); fr.close(); fr.close(); } catch (FileNotFoundException e) { } catch (FileNotFoundException | IOException e) { log(e); log(e); }catch (IOException e) { } log(e); } } } Frédéric Renout Novembre 2011
  • 26. public void copy() throws FileNotFoundException , IOException { public void copy() throws FileNotFoundException , IOException { try { try { File input = new File("input.txt"); File input = new File("input.txt"); FileReader fr = new FileReader(input); FileReader fr = new FileReader(input); File output = new File("output.txt"); File output = new File("output.txt"); FileWriter fw = new FileWriter(output); FileWriter fw = new FileWriter(output); int readed; int readed; while ((readed = fr.read()) != -1) { while ((readed = fr.read()) != -1) { fw.write(readed); fw.write(readed); } } fw.flush(); fw.flush(); fw.close(); fw.close(); fr.close(); fr.close(); } catch (FileNotFoundException e) { } catch (Exception e) { log(e); log(e); throw e; throw e; }catch (IOException e) { } log(e); } throw e; } } } } Frédéric Renout Novembre 2011
  • 27.  Nouvelle interface : AutoClosable  On passe les ressources au try  En sortie les ressources sont fermées dans le sens inverse de la déclaration  En cas d’exception dans le try les exceptions du à la fermeture sont supprimées mais accessibles via Throwable.getSuppressed  Démo Frédéric Renout Novembre 2011
  • 28. InvokeDynamic Frédéric Renout Novembre 2011
  • 29. Quels langages tournent sur une JVM? Groovy Scala Jython Java Erjang Rhino JRuby Et pleins d’autres... Frédéric Renout Novembre 2011
  • 30. Beaucoup de ces langages sont des langages dynamiques Java est fortement typé. Les traitements dynamiques doivent être « émulés » et sont couteux. Nouvelle instruction au niveau du bytecode : invokeDynamic Nouvelle API de réflection : java.lang.invoke CallSite MethodHandle Démo Frédéric Renout Novembre 2011
  • 31.  ThreadLocaleRandom  Phaser  Fork/join Frédéric Renout Novembre 2011
  • 32.  Utilisation de nombre aléatoires dans des threads ou des ForkJoinTask  Garanti que chaque Thread à son propre Random Frédéric Renout Novembre 2011
  • 33. Permet de synchroniser de traitements, de gérer des phases : 1. Enregistrer le nombre d’entités se synchronisant sur le Phaser 2. Démarrer les Threads 3. Se synchroniser avec arriveAndAwaitAdvance() 4. Attendre une phase : awaitAdvance(#phase) Démo Frédéric Renout Novembre 2011
  • 34. Fork : diviser un tache en sous-taches Join : combiner les résultats des sous-tâches Frédéric Renout Novembre 2011
  • 35.  Utiliser efficacement plusieurs processeurs  WorkStealing : les threads inutilisés prennent des tâches à ceux occupés.  Similaire à Map/Reduce de Google mais avec une granularité différente (on peut définir des seuils de fork) et une scalabilité différente : MapReduce fonctionne sur des clusters, fork/join sur une JVM et sa machine Frédéric Renout Novembre 2011
  • 36.  Déclenchements  Synchrone -> invoke  Asynchrone -> execute  Asynchrone et future ->submit Frédéric Renout Novembre 2011
  • 37. ForkJoinPool ForkJoinTask invocation compute() compute() Frédéric Renout Novembre 2011
  • 38. Frédéric Renout Novembre 2011
  • 39. A Jean-Michel  Frédéric Renout Novembre 2011
  • 40. Frédéric Renout Novembre 2011