Upload
lorraine-jug
View
1.388
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
Frédéric Renout
Nouveautés
Java SE 7
Novembre 2011
Frédéric Renout
IntroductionJava GUIJava « core »Java dynamic bindingJava Concurrent
Agenda
Novembre 2011
Frédéric Renout
Quoi de neuf ?
Langage
I/OConcurrent
SécuritéRéseau
Collections
Déploiement Client graphique
Dynamique
Novembre 2011
Frédéric Renout
Client GraphiqueDéploiement
Java GUI
Novembre 2011
Frédéric Renout
Client graphiqueNouveau Look and Feel : NimbusTransparence , gradient et formes libres pour
les fenêtres swing Interactions graphiques améliorées entre awt
et swing
DéploiementAmélioration de JNLP
Embeddable Signature partielle
Gui
Novembre 2011
Frédéric Renout Novembre 2011
GUI - Transparence
Frédéric Renout Novembre 2011
GUI - Gradient
Frédéric Renout Novembre 2011
GUI - Forme
Frédéric Renout Novembre 2011
GUI – AWT-Swing
Frédéric Renout
CollectionSécuritéRéseauLangage
Java « Core »
Novembre 2011
Frédéric Renout
Interface de Queue bloquante (LinkedTranferQueue)
Dérive de BlockingPermet d’attendre qu’un item envoyé soit
consomméMéthodes:
hasWaitingConsumer / getWaitingConsumerCount
transfer : bloquant tryTransfer : bon bloquant et paramétrable
Démo
CollectionsTransferQueue
Novembre 2011
Frédéric Renout
Nouveaux algo basés sur ECC (Elliptic Curve Cryptography)
Possibilité de désactiver l’utilisation d’algos « faibles » durant l’utilisation de TLS (=SSL)
Sécurité
Novembre 2011
Courbe elliptique : y2mod p =x3+ax+b mod pIci : y2=x3-5x+3
Courbe ayant des propriétés de calcul « simples » pour +
Sécurité - ECC
Novembre 2011Frédéric Renout
Sécurité - ECC
Novembre 2011Frédéric Renout
Algorithme :A et B choisissent publiquement une courbe C et un point P de
cette courbeA 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 longPlus d’infos :
http://www.apprendre-en-ligne.net/crypto/moderne/elliptique.htmlhttp://fr.wikipedia.org/wiki/Cryptographie_sur_les_courbes_elliptiques
Frédéric Renout
UrlClassLoader.close Fermer le classLoader pour libérer les
ressources chargées et les remplacerSocket Direct Protocol
Solaris & Linux Utilisé par infiniBand qui permet de faire des
accès mémoire entre machine sans passer par l’OS
Réseau
Novembre 2011
Frédéric Renout
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
Langage
Novembre 2011
Frédéric Renout
L’utilisation de varargs de types paramétrés génère des warnings à l’utilisation des méthodesJava 7 permet deGénérer un warning à la déclaration : possible heap pollutionSupprimer ces warnings @SafeVarargs
Retire tout warnings @SuppressWarnings(« unchecked », »varargs »)
Retire les warnings à la déclaration -Xlint:-varargs
LangageVarargs
Novembre 2011
Frédéric Renout
Possibilité de séparer les nombres par des _5000000 = 5_000_000Limite les erreurs de lecture
Possibilité de représenter un nombre sous sa forme binaire42 = 0b101010Facilite la représentation des bitmasks…
LangageNombres
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; }
Novembre 2011Frédéric Renout
LangageNombres
… 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; }
Novembre 2011Frédéric Renout
LangageNombres
Frédéric Renout
On peut switcher sur des types primitif (ou leurs wrappers)des enumsdes Strings
LangageSwitch
Novembre 2011
Frédéric Renout
List<IndexOutOfBoundsException> dictionnaire = new ArrayList<IndexOutOfBoundsException >();
Map<String,Map<String,String>> i18nDictionnaire = new HashMap<String,Map<String,String>>();
Langageinférence de type
Novembre 2011
Frédéric Renout
List<IndexOutOfBoundsException> dictionnaire = new ArrayList<>();
Map<String,Map<String,String>> i18nDictionnaire = new HashMap<>();
Langageinférence de type
Novembre 2011
Frédéric Renout
Multiple catchRe-throw precis
LangageException
Novembre 2011
Frédéric Renout
try {
File input = new File("input.txt");
FileReader fr = new FileReader(input);
File output = new File("output.txt");
FileWriter fw = new FileWriter(output);
int readed;
while ((readed = fr.read()) != -1) {
fw.write(readed);
}
fw.flush();
fw.close();
fr.close();
} catch (FileNotFoundException e) {
log(e);
}catch (IOException e) {
log(e);
}
}
Langage - ExceptionMultiple catch
Novembre 2011
try {
File input = new File("input.txt");
FileReader fr = new FileReader(input);
File output = new File("output.txt");
FileWriter fw = new FileWriter(output);
int readed;
while ((readed = fr.read()) != -1) {
fw.write(readed);
}
fw.flush();
fw.close();
fr.close();
} catch (FileNotFoundException | IOException e) {
log(e);
}
}
Frédéric Renout
public void copy() throws FileNotFoundException , IOException {try { File input = new File("input.txt"); FileReader fr = new FileReader(input); File output = new File("output.txt"); FileWriter fw = new FileWriter(output); int readed; while ((readed = fr.read()) != -1) { fw.write(readed); } fw.flush(); fw.close(); fr.close(); } catch (FileNotFoundException e) { log(e); throw e; }catch (IOException e) { log(e); throw e; } }}
Langage – Exceptionre-throw précis
Novembre 2011
public void copy() throws FileNotFoundException , IOException {try { File input = new File("input.txt"); FileReader fr = new FileReader(input); File output = new File("output.txt"); FileWriter fw = new FileWriter(output); int readed; while ((readed = fr.read()) != -1) { fw.write(readed); } fw.flush(); fw.close(); fr.close(); } catch (Exception e) { log(e); throw e; } }}
Frédéric Renout
Nouvelle interface : AutoClosableOn passe les ressources au tryEn sortie les ressources sont fermées dans le
sens inverse de la déclarationEn cas d’exception dans le try les exceptions
du à la fermeture sont supprimées mais accessibles via Throwable.getSuppressed
Démo
Langagetry with resources
Novembre 2011
Frédéric Renout
JVM
Novembre 2011
InvokeDynamic
Frédéric Renout
Quels langages tournent sur une JVM?
JVMInvokeDynamic
Novembre 2011
Java
ScalaGroovy
Jython
RhinoErjang
JRubyEt pleins d’autres...
Frédéric Renout
Beaucoup de ces langages sont des langages dynamiquesJava est fortement typé. Les traitements dynamiques doivent être « émulés » et sont couteux.Nouvelle instruction au niveau du bytecode : invokeDynamicNouvelle API de réflection : java.lang.invoke
CallSiteMethodHandle
Démo
JVMInvokeDynamic
Novembre 2011
Frédéric Renout
ThreadLocaleRandomPhaserFork/join
Concurrent
Novembre 2011
Frédéric Renout
Utilisation de nombre aléatoires dans des threads ou des ForkJoinTask
Garanti que chaque Thread à son propre Random
ConcurrentThreadLocaleRandom
Novembre 2011
Frédéric Renout
Permet de synchroniser de traitements, de gérer des phases :1. Enregistrer le nombre d’entités se
synchronisant sur le Phaser2. Démarrer les Threads3. Se synchroniser avec
arriveAndAwaitAdvance()4. Attendre une phase : awaitAdvance(#phase)
Démo
ConcurrentPhaser
Novembre 2011
Frédéric Renout
Fork : diviser un tache en sous-tachesJoin : combiner les résultats des sous-tâches
ConcurrentFork/join
Novembre 2011
Frédéric Renout
Utiliser efficacement plusieurs processeursWorkStealing : 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
ConcurrentFork/join
Novembre 2011
Frédéric Renout
Déclenchements Synchrone -> invoke Asynchrone -> execute Asynchrone et future ->submit
ConcurrentFork/join
Novembre 2011
Frédéric Renout
ConcurrentFork/join
ForkJoinPool
fork() join
()
ForkJoinTask
compute()invocation
compute()
Novembre 2011
Frédéric Renout
ConcurrentFork/join
Démo
Novembre 2011
Frédéric Renout
A Jean-Michel
NIO2
Novembre 2011
Frédéric Renout
Questions
Novembre 2011