Java SE 7

Preview:

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

Recommended