SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Les Nouveautés du JAVA 7

 Réalisé par Aziz GHABRY
Modularité du Java
Swing
Types et génériques

NIO 2
Support natif XML

Support des propriétés JavaBean

Closures - abstraction
API Date & Time
Units & Quantities

JMX 2.0
Javadoc
Java Modularity


• Superpackages (JSR 294)
• Java Module System (JSR 277)
• Java Kernel (no JSR)
Superpackages

• définit un module de
  développement constitué de packages.

• Indique les packages qui sont exportés.
Superpackages (JSR 294)


src/com/foo/super-package.java:

superpackage com.foo {
  member package com.foo.api, com.foo.model, com.foo.util;
  export com.foo.api;    // Make api package public
}
Java Module System (JSR 277)




      Format de distribution de déploiement du module
      Versioning et dépendance
      Dépôt API
      L’appui d'exécution dans le lanceur / classloaders
Module Definition Metadata
– /MODULE-INF/METADATA.module:
– name=com.wombat.webservice

– extensible-metadata=[@Version(”1.0”)]
– members=[com.wombat.webservice.MainApp,
– com.wombat.webservice.PrivateClassA,
– com.wombat.webservice.PrivateInterfaceB]
– imports=[ImportModule(org.foo.xml,
  @VersionConstraint(”1.3.0”)),
– ImportModule(org.foo.soap,
  @VersionConstraint(”2.0.0+”))]

– class-exports=[com.wombat.webservice.MainApp]
Java Kernel

• Réorganiser JRE dans le noyau + modules
  optionnels, charger dynamiquement

• Concurrence avec Flex, Silverlight
Améliorations de Swing

• Swing Application Framework (JSR 296)
• Bean Binding Framework (JSR 295)
• Bean Validation Framework (JSR 303)
Swing Application Framework
                    JSR 296
                             Action        Application
       Application                                         @Action
                            Manager        ActionMap
initialize(String[] args)
startup()
shutdown()                  Resource        Resource      Resource
exit()                      Manager           Map         Converter


      SingleFrame           Session
       Appliction           Storage


                             Local
                            Storage                      SwingWorker

  ApplicationContext
                             Task      *   TaskService      Task
getInstance()               Monitor
Bean Binding Framework
                      JSR 295
• Utilisez une Binding pour lier les propriétés de deux beans:
Binding binding = new Binding(source, "sourcePath",
  target, "targetPath");
binding.bind();
• Une fois lié, les changements de chaque source ou cible sont envoyés
  vers l'autre.
• Changements passer par un BindingConverter et un BindingValidator le long
  du chemin.
• Le langage d'expression JSP (EL) est utilisé pour spécifier les conversions.
Bean Validation
                               JSR 303
•   Voici un exemple de Hibnerate Validator qui peut être évocateur:

public class Address {
   @NotNull
   private String line1;
   private String line2;
   private String zip;
   private String state;

    @Length(max = 20)
    @NotNull
    private String country;

    @Range(min = -2, max = 50, message = "Floor out of range")
    public int floor;
}
Choix des Generics

class NewCollection<class E> extends
  Collection<E> { ... }

class NewList<class E> extends
  NewCollection<E>, List<E> { ... }
Annotations sur types JSR 308

•   pour les arguments de type générique à des classes paramétrées:
    Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;
•   pour les arguments de type générique à une méthode générique ou d'invocation du
    constructeur:
    o.<@NonNull String>m("...");
•   Pour paramètres de type bounds et wildcards:
    class Folder<F extends @Existing File> { ... }
     Collection<? super @Existing File>
•   pour l'héritage de classe :
     class UnmodifiableList<T> implements @Readonly List<@Readonly T> { ...
        }
•   Pour les clauses throws :
     void monitorTemperature() throws @Critical TemperatureException { ... }
•   Pour les conversions de type :
     myString = (@NonNull String) myObject;
•   Pour les types du test:
     boolean isNonNull = myString instanceof @NonNull String;
•   Pour la création des objets:
     new @NonEmpty @Readonly List<String>(myNonEmptyStringSet)
Création d'une instance raccourcie

public static void main(String[] args) {
   map := new HashMap<String, Integer>();
   for(word : args) {
          freq := map.get(word);
          map.put(word, (freq==null) ? 1 : freq+1);
   }
   System.out.println(map); }

public static void main(String[] args) {
   final map = new HashMap<String, Integer>();
   for(final word : args) {
          final freq = map.get(word);
          map.put(word, (freq==null) ? 1 : freq+1);
   }
   System.out.println(map); }
NIO 2 (JSR 203)

•       Les principales caractéristiques :
    –     Nouvelle interface filesystem
          • Permissions
          • Les attributs de fichiers
          • Implémentations débrochables
          • Échapper vers les spécifications de l’API filesystem
    –      API pour E/S asynchrones sur les sockets et les fichiers
    –     La réalisation de canaux socket (multicast, options, etc)
NIO 2 – File System API

                    Closeable                    WatchService   WatchEvent

                                                                WatchKey
                                  Watchable
    Files
                                                    FileId

 FileSystems       FileSystem

                                 FileReference    Directory
 FileSystem
  Provider
                   BackingFile
                                 PathReference      Path
                     System
 FileSystem
AttributeView
                                                     File
  DiskSpace
AttributeView
NIO 2: Copie d'un fichier

PathReference source =
      PathReference.from(“spongebob.jpg”);
PathReference target =
      PathReference.from(“squarepants.jpg”);
int flags = CopyFlag.COPY_ATTRIBUTES |
            CopyFlag.REPLACE_EXISTING;
source.copyTo(target, flags);
NIO 2 – Accès permissions sur les
                      fichiers
PathReference ref = PathReference.from("foo.txt");
PosixFileAttributeView view =
   ref.newFileAttributeView(PosixFileAttributeView.class);
PosixFileAttributes attrs = view.readAttributes();
int perms = attrs.getPermissions();

// prints "-rw-r--r-- alice bandits"
System.out.format("%st%st%s%n",
   PosixFilePermission.toString(perms), attrs.getOwner(),
   attrs.getGroup());

// deny others
perms &= ~OTHERS_READ & ~OTHERS_WRITE & ~OTHERS_EXECUTE;
view.updatePermissions(perms);

// change group
UserPrincipal cops = view.lookupPrincipalByGroupName("cops");
view.updateOwners(null, cops);
Type XML: Construction

void addReviewer(XML feature,
                    String reviewer,
                    String time) {

    feature.add(<reviewed>
                      <who>{ reviewer }</who>
                      <when>{ time }</when>
               </reviewed>);
}
Type XML: Codeur des données

package java.xml;
abstract class DataCoder {
   String encode(Object o);
   String encode(Object o, String type);
   <T> T decode(String data, Class<T> c);
   <T> T decode(String data, Class<T> c, String type);
   boolean supports(Class<?> c);
   boolean supports(Class<?> c, String type);

    static final DataCoder JAVA;
    static final DataCoder XSD;
}
Type XML: Exemple Datacoder

void addReviewer(XML feature,
                    String reviewer,
                    Timestamp time) {

    DataCoder dc = DataCoder.XSD;
    feature.add(<reviewed>
                      <who>{ reviewer }</who>
                      <when>{ dc.encode(time) }</when>
               </reviewed>);
}
Type XML: Navigation

void rejectOpenFeatures(XML featureList) {
    List<XML> fs = featureList.findAll(
      “feature[state!=„approved‟]”);

    for(XML f : fs) {
      f.get(“state”).set(“rejected”);
    }
}
Support des propriétés JavaBean

Proposition de nouveau mot-clé :
public class Point {
   property double x;
   property double y;
}
Point p = new Point(1, 2);
System.out.println(p.x + " " + p.y);

Nouvelle proposition de la syntaxe d'accesseur:
Point p = new Point();
p->X = 56;
p->Y = 87;
int z = p->X;
Closures - abstraction

Closures :
Commencer à penser à eux comme des blocs de code, vous pouvez passer autour et invoquer plus tard.
Peut déjà le faire en Java avec les classes internes ou des objets de la méthode

void validateWithMax(Stat[] stats, final int max) throws InvalidStatException {
      for(Stat stat : stats) {
          if(! (stat.value() <= max)) {
            throw new InvalidStatException();
         }
       }
   }

    void validateWithMin(Stat[] stats, final int min) throws InvalidStatException {
      for(Stat stat : stats) {
        if(! (stat.value() >= min)) {
           throw new InvalidStatException();
        }
      }
    }
Closures– Inner Classes

void validateWithMax(Stat[] stats, final int max) throws InvalidStatException {
       validate( stats, new Validator() {
                     public boolean isValid(Stat stat) { return stat.value() <= max; }
                   } ); }

void validateWithMin(Stat[] stats, final int min) throws InvalidStatException {
       validate( stats, new Validator() {
                     public boolean isValid(Stat stat) { return stat.value() >= min; }
                   } ); }

interface Validator { boolean isValid(Stat stat); }
void validate(Stat[] stats, Validator validator) {
       for(Stat stat : stats) {
                   if(! validator.isValid(stat)) { throw new InvalidStatException(); }
       }
}
Les propositions des Closures

• BGGA – Gilad Bracha, Neal Gafter, James Gosling,
  Peter von der Ahe
• CICE – “Concise Instance Creation Expressions”
   – Josh Bloch, Bob Lee, Doug Lea
• FCM – “First Class Methods” / JCA “Java Control
  Abstraction”
   – Stephen Colebourne, Stefan Schulz, Ricky Clarkson
Closures - CICE

void validateWithMax(Stat[] stats, int max) throws InvalidStatException {
          validate( stats,
                   Validator(Stat stat) {
                            return stat.value() <= max;
                   } );
   }

• L'interface Validator et méthode validate () sont inchangés.
Closures - BGGA

void validateWithMax(Stat[] stats, int max) throws InvalidStatException {
      validate(stats, {Stat stat =>
                stat.value() <= max
      });
}

void validate(Stat[] stats, {Stat stat => boolean} block) {
      for(Stat stat : stats) {
                 if(! block.invoke(stat)) {
                             throw new InvalidStatException();
                 }
      }
}
Closures - FCM

void validateWithMax(Stat[] stats, final int max) throws InvalidStatException {
       validate( stats,
                   #(boolean(Stat stat)) {
                             return stat.value() <= max;
                   } );
}

void validate(Stat[] stats, #(boolean(Stat)) block) {
       for(Stat stat : stats) {
                   if(! block.invoke(stat)) {
                                throw new InvalidStatException();
                   }
       }
}
Closures– structures de contrôle

 File file = ...;
 FileReader reader = null;
 try {
    reader = new FileReader(file);
    reader.read…

 } finally {
    if (reader != null) {
      try {
        reader.close();
      } catch (IOException e) {
        // ignore
      }
 }
Closures - JCA

File file = ...;
usingFileReader(FileReader reader : file) {
   reader.read…
}

public static void usingFileReader(#(void(FileReader)) block : File file) throws IOException {
  FileReader reader = null;
  try {
    reader = new FileReader(file);
    block.invoke(reader);
  } finally {
    if (reader != null) {
      try {
         reader.close();
      } catch (IOException e) { }
   }
}
- c'est la définition de type de bloc, variables passées dans le bloc
- Passer des variables nécessaires par le bloc dans la méthode invoke
Closures - BGGA

File file = ...;
usingFileReader(FileReader reader : file) {
   reader.read…
}

public static <T,throws E extends Exception>
T usingFileReader(File file, {=>T throws E} block) throws E {
  FileReader reader = null;
  try {
    reader = new FileReader(file);
    return block.invoke(reader);
  } finally {
    if (reader != null) {
      try {
        reader.close();
      } catch (IOException e) { }
  }
}
• La syntaxe BGGA est beaucoup plus compliquée car elle est la manipulation à la fois la syntaxe et la
      syntaxe avant l'abstraction de contrôle.
• Avoir à gérer cas d'exception, mais fondamentalement semblable dans son concept
API Date / Time

•   Correction des APIs existantes date/heure
•   Problèmes heure d'été
•   Threads DateTimeFormat
•   Mutabilité Date/Calendar
•   Manque des classes interval/duration
•   Basé sur JodaTime
•   Analyse, de mise en forme, l'arithmétique, etc
Units and Quantities (JSR 275)

               Unit                             UnitFormatter                   SI

                                                                               NonSI


  BaseUnit            DerivedUnit                                          Dimension




 ProductUnit          AlternateUnit        TransformedUnit             Converter




                                      MultiplyConverter         AddConverter           LogConverter
Exemples des Unités

 // Conversion entre les unités.
KILO(METER).getConverterTo(MILE).convert(10)
• 6.2137119223733395

// Récupération de l'unité système (identifie le type de mesure).
REVOLUTION.divide(MINUTE).getSystemUnit()
• rad/s

// Vérifier la dimension
ELECTRON_VOLT.isCompatible(WATT.times(HOUR))
• true

// Récupération de dimension unitaire (dépend du modèle actuel).
ELECTRON_VOLT.getDimension()
• [L]²·[M]/[T]²
JMX (Java Management Extensions)

 • JMX 2.0 (JSR 255)
   – Rénovation avec les types génériques
   – Utilisation les annotations
   – Faire MBeans ouverts facile à utiliser
   – Généraliser les moniteurs pour supporter types
     complexes
   – serveurs Mbean Cascade/fédéré
   – Les connecteurs services Web (JSR 262)
Javadoc (JSR 260)

• De nouvelles étiquettes pour des exemples,

• Catégorisations nouveaux types de
  méthodes, propriétés de bean, etc

• Mettre à jour le look old school
Autres..

• Support des opérateurs numérique pour le type
  BigDecimal
      BigDecimal a = …
      BigDecimal b = …
      BigDecimal s = a + b;
• Comparaisons de chaines de caractères dans la
  clause switch:
      switch(stooge) {
        case ‘Moe’: …
• Comparaison pour les énumérations
  JACK < QUEEN
Merci pour votre attention

Weitere ähnliche Inhalte

Was ist angesagt?

Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchronesAbdoulaye Dieng
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objetsAbdoulaye Dieng
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donneesAmir Souissi
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLHervé Leclerc
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java Youness Boukouchi
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8Antoine Rey
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012Jean-Michel Doudoux
 
Fmin103 0910 tpjdbc
Fmin103 0910 tpjdbcFmin103 0910 tpjdbc
Fmin103 0910 tpjdbcKarim Amane
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generaleAmir Souissi
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHPAbdoulaye Dieng
 

Was ist angesagt? (16)

Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
Java Nio 2
Java Nio 2Java Nio 2
Java Nio 2
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012
 
Fmin103 0910 tpjdbc
Fmin103 0910 tpjdbcFmin103 0910 tpjdbc
Fmin103 0910 tpjdbc
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generale
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
 
Jdbc
JdbcJdbc
Jdbc
 

Ähnlich wie Présentation nouveauté java7

GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbcabderrahim marzouk
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur SpringAntoine Rey
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 EeST informatique services
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaCh'ti JUG
 
Atelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWikiAtelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWikiKorteby Farouk
 
Jug algeria x wiki-atelier
Jug algeria x wiki-atelierJug algeria x wiki-atelier
Jug algeria x wiki-atelierAlgeria JUG
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applicationsDamien Seguy
 
Activity
ActivityActivity
Activitydido
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsDenis Voituron
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootDNG Consulting
 

Ähnlich wie Présentation nouveauté java7 (20)

GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Services rest & jersey
Services rest & jerseyServices rest & jersey
Services rest & jersey
 
2
22
2
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 Ee
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
 
Atelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWikiAtelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWiki
 
Jug algeria x wiki-atelier
Jug algeria x wiki-atelierJug algeria x wiki-atelier
Jug algeria x wiki-atelier
 
NIO 2
NIO 2NIO 2
NIO 2
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
 
Activity
ActivityActivity
Activity
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénients
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
jpa.pdf
jpa.pdfjpa.pdf
jpa.pdf
 

Mehr von Cynapsys It Hotspot

Présentation data warehouse etl et olap
Présentation data warehouse etl et olapPrésentation data warehouse etl et olap
Présentation data warehouse etl et olapCynapsys It Hotspot
 
Introduction à la Business Intelligence
Introduction à la Business Intelligence Introduction à la Business Intelligence
Introduction à la Business Intelligence Cynapsys It Hotspot
 
Catalogue pfe cynapsys_2016_2017
Catalogue pfe cynapsys_2016_2017Catalogue pfe cynapsys_2016_2017
Catalogue pfe cynapsys_2016_2017Cynapsys It Hotspot
 
Présentation noura baccar " Innovation on Indoor GeoLocalization Applications...
Présentation noura baccar " Innovation on Indoor GeoLocalization Applications...Présentation noura baccar " Innovation on Indoor GeoLocalization Applications...
Présentation noura baccar " Innovation on Indoor GeoLocalization Applications...Cynapsys It Hotspot
 
Comment manager une équipe de 100 ingénieurs
Comment manager une équipe de 100 ingénieurs Comment manager une équipe de 100 ingénieurs
Comment manager une équipe de 100 ingénieurs Cynapsys It Hotspot
 
Automotive : Domaine & applications
Automotive : Domaine & applicationsAutomotive : Domaine & applications
Automotive : Domaine & applicationsCynapsys It Hotspot
 
Presentaion fpga µc µp quelles est la solution
Presentaion  fpga µc µp quelles est la solutionPresentaion  fpga µc µp quelles est la solution
Presentaion fpga µc µp quelles est la solutionCynapsys It Hotspot
 

Mehr von Cynapsys It Hotspot (20)

Présentation data warehouse etl et olap
Présentation data warehouse etl et olapPrésentation data warehouse etl et olap
Présentation data warehouse etl et olap
 
Présentation Angular 2
Présentation Angular 2 Présentation Angular 2
Présentation Angular 2
 
Introduction à la Business Intelligence
Introduction à la Business Intelligence Introduction à la Business Intelligence
Introduction à la Business Intelligence
 
Catalogue pfe cynapsys_2016_2017
Catalogue pfe cynapsys_2016_2017Catalogue pfe cynapsys_2016_2017
Catalogue pfe cynapsys_2016_2017
 
Présentation noura baccar " Innovation on Indoor GeoLocalization Applications...
Présentation noura baccar " Innovation on Indoor GeoLocalization Applications...Présentation noura baccar " Innovation on Indoor GeoLocalization Applications...
Présentation noura baccar " Innovation on Indoor GeoLocalization Applications...
 
Comment manager une équipe de 100 ingénieurs
Comment manager une équipe de 100 ingénieurs Comment manager une équipe de 100 ingénieurs
Comment manager une équipe de 100 ingénieurs
 
Exposé 1 brevet med truki (1)
Exposé 1  brevet  med truki (1)Exposé 1  brevet  med truki (1)
Exposé 1 brevet med truki (1)
 
Exposé 2 brevet med truki (2)
Exposé 2  brevet  med truki (2)Exposé 2  brevet  med truki (2)
Exposé 2 brevet med truki (2)
 
Cloud presentation
Cloud  presentationCloud  presentation
Cloud presentation
 
Présentation cloud computing
Présentation cloud computingPrésentation cloud computing
Présentation cloud computing
 
Présentation banc_ test
Présentation banc_ testPrésentation banc_ test
Présentation banc_ test
 
Automotive : Domaine & applications
Automotive : Domaine & applicationsAutomotive : Domaine & applications
Automotive : Domaine & applications
 
PRESENTATION CYN APSYS/MANTIS
PRESENTATION CYN APSYS/MANTISPRESENTATION CYN APSYS/MANTIS
PRESENTATION CYN APSYS/MANTIS
 
Formation traitement d_images
Formation traitement d_imagesFormation traitement d_images
Formation traitement d_images
 
Informatique Quantique
Informatique QuantiqueInformatique Quantique
Informatique Quantique
 
Informatique Quantique
Informatique QuantiqueInformatique Quantique
Informatique Quantique
 
Présentation Cryptographie
Présentation CryptographiePrésentation Cryptographie
Présentation Cryptographie
 
Presentaion fpga µc µp quelles est la solution
Presentaion  fpga µc µp quelles est la solutionPresentaion  fpga µc µp quelles est la solution
Presentaion fpga µc µp quelles est la solution
 
Comminucation v&nv
Comminucation v&nvComminucation v&nv
Comminucation v&nv
 
Presentation mantis
Presentation mantisPresentation mantis
Presentation mantis
 

Présentation nouveauté java7

  • 1. Les Nouveautés du JAVA 7 Réalisé par Aziz GHABRY
  • 2. Modularité du Java Swing Types et génériques NIO 2 Support natif XML Support des propriétés JavaBean Closures - abstraction API Date & Time Units & Quantities JMX 2.0 Javadoc
  • 3. Java Modularity • Superpackages (JSR 294) • Java Module System (JSR 277) • Java Kernel (no JSR)
  • 4. Superpackages • définit un module de développement constitué de packages. • Indique les packages qui sont exportés.
  • 5. Superpackages (JSR 294) src/com/foo/super-package.java: superpackage com.foo { member package com.foo.api, com.foo.model, com.foo.util; export com.foo.api; // Make api package public }
  • 6. Java Module System (JSR 277)  Format de distribution de déploiement du module  Versioning et dépendance  Dépôt API  L’appui d'exécution dans le lanceur / classloaders
  • 7. Module Definition Metadata – /MODULE-INF/METADATA.module: – name=com.wombat.webservice – extensible-metadata=[@Version(”1.0”)] – members=[com.wombat.webservice.MainApp, – com.wombat.webservice.PrivateClassA, – com.wombat.webservice.PrivateInterfaceB] – imports=[ImportModule(org.foo.xml, @VersionConstraint(”1.3.0”)), – ImportModule(org.foo.soap, @VersionConstraint(”2.0.0+”))] – class-exports=[com.wombat.webservice.MainApp]
  • 8. Java Kernel • Réorganiser JRE dans le noyau + modules optionnels, charger dynamiquement • Concurrence avec Flex, Silverlight
  • 9. Améliorations de Swing • Swing Application Framework (JSR 296) • Bean Binding Framework (JSR 295) • Bean Validation Framework (JSR 303)
  • 10. Swing Application Framework JSR 296 Action Application Application @Action Manager ActionMap initialize(String[] args) startup() shutdown() Resource Resource Resource exit() Manager Map Converter SingleFrame Session Appliction Storage Local Storage SwingWorker ApplicationContext Task * TaskService Task getInstance() Monitor
  • 11. Bean Binding Framework JSR 295 • Utilisez une Binding pour lier les propriétés de deux beans: Binding binding = new Binding(source, "sourcePath", target, "targetPath"); binding.bind(); • Une fois lié, les changements de chaque source ou cible sont envoyés vers l'autre. • Changements passer par un BindingConverter et un BindingValidator le long du chemin. • Le langage d'expression JSP (EL) est utilisé pour spécifier les conversions.
  • 12. Bean Validation JSR 303 • Voici un exemple de Hibnerate Validator qui peut être évocateur: public class Address { @NotNull private String line1; private String line2; private String zip; private String state; @Length(max = 20) @NotNull private String country; @Range(min = -2, max = 50, message = "Floor out of range") public int floor; }
  • 13. Choix des Generics class NewCollection<class E> extends Collection<E> { ... } class NewList<class E> extends NewCollection<E>, List<E> { ... }
  • 14. Annotations sur types JSR 308 • pour les arguments de type générique à des classes paramétrées: Map<@NonNull String, @NonEmpty List<@Readonly Document>> files; • pour les arguments de type générique à une méthode générique ou d'invocation du constructeur: o.<@NonNull String>m("..."); • Pour paramètres de type bounds et wildcards: class Folder<F extends @Existing File> { ... } Collection<? super @Existing File> • pour l'héritage de classe : class UnmodifiableList<T> implements @Readonly List<@Readonly T> { ... } • Pour les clauses throws : void monitorTemperature() throws @Critical TemperatureException { ... } • Pour les conversions de type : myString = (@NonNull String) myObject; • Pour les types du test: boolean isNonNull = myString instanceof @NonNull String; • Pour la création des objets: new @NonEmpty @Readonly List<String>(myNonEmptyStringSet)
  • 15. Création d'une instance raccourcie public static void main(String[] args) { map := new HashMap<String, Integer>(); for(word : args) { freq := map.get(word); map.put(word, (freq==null) ? 1 : freq+1); } System.out.println(map); } public static void main(String[] args) { final map = new HashMap<String, Integer>(); for(final word : args) { final freq = map.get(word); map.put(word, (freq==null) ? 1 : freq+1); } System.out.println(map); }
  • 16. NIO 2 (JSR 203) • Les principales caractéristiques : – Nouvelle interface filesystem • Permissions • Les attributs de fichiers • Implémentations débrochables • Échapper vers les spécifications de l’API filesystem – API pour E/S asynchrones sur les sockets et les fichiers – La réalisation de canaux socket (multicast, options, etc)
  • 17. NIO 2 – File System API Closeable WatchService WatchEvent WatchKey Watchable Files FileId FileSystems FileSystem FileReference Directory FileSystem Provider BackingFile PathReference Path System FileSystem AttributeView File DiskSpace AttributeView
  • 18. NIO 2: Copie d'un fichier PathReference source = PathReference.from(“spongebob.jpg”); PathReference target = PathReference.from(“squarepants.jpg”); int flags = CopyFlag.COPY_ATTRIBUTES | CopyFlag.REPLACE_EXISTING; source.copyTo(target, flags);
  • 19. NIO 2 – Accès permissions sur les fichiers PathReference ref = PathReference.from("foo.txt"); PosixFileAttributeView view = ref.newFileAttributeView(PosixFileAttributeView.class); PosixFileAttributes attrs = view.readAttributes(); int perms = attrs.getPermissions(); // prints "-rw-r--r-- alice bandits" System.out.format("%st%st%s%n", PosixFilePermission.toString(perms), attrs.getOwner(), attrs.getGroup()); // deny others perms &= ~OTHERS_READ & ~OTHERS_WRITE & ~OTHERS_EXECUTE; view.updatePermissions(perms); // change group UserPrincipal cops = view.lookupPrincipalByGroupName("cops"); view.updateOwners(null, cops);
  • 20. Type XML: Construction void addReviewer(XML feature, String reviewer, String time) { feature.add(<reviewed> <who>{ reviewer }</who> <when>{ time }</when> </reviewed>); }
  • 21. Type XML: Codeur des données package java.xml; abstract class DataCoder { String encode(Object o); String encode(Object o, String type); <T> T decode(String data, Class<T> c); <T> T decode(String data, Class<T> c, String type); boolean supports(Class<?> c); boolean supports(Class<?> c, String type); static final DataCoder JAVA; static final DataCoder XSD; }
  • 22. Type XML: Exemple Datacoder void addReviewer(XML feature, String reviewer, Timestamp time) { DataCoder dc = DataCoder.XSD; feature.add(<reviewed> <who>{ reviewer }</who> <when>{ dc.encode(time) }</when> </reviewed>); }
  • 23. Type XML: Navigation void rejectOpenFeatures(XML featureList) { List<XML> fs = featureList.findAll( “feature[state!=„approved‟]”); for(XML f : fs) { f.get(“state”).set(“rejected”); } }
  • 24. Support des propriétés JavaBean Proposition de nouveau mot-clé : public class Point { property double x; property double y; } Point p = new Point(1, 2); System.out.println(p.x + " " + p.y); Nouvelle proposition de la syntaxe d'accesseur: Point p = new Point(); p->X = 56; p->Y = 87; int z = p->X;
  • 25. Closures - abstraction Closures : Commencer à penser à eux comme des blocs de code, vous pouvez passer autour et invoquer plus tard. Peut déjà le faire en Java avec les classes internes ou des objets de la méthode void validateWithMax(Stat[] stats, final int max) throws InvalidStatException { for(Stat stat : stats) { if(! (stat.value() <= max)) { throw new InvalidStatException(); } } } void validateWithMin(Stat[] stats, final int min) throws InvalidStatException { for(Stat stat : stats) { if(! (stat.value() >= min)) { throw new InvalidStatException(); } } }
  • 26. Closures– Inner Classes void validateWithMax(Stat[] stats, final int max) throws InvalidStatException { validate( stats, new Validator() { public boolean isValid(Stat stat) { return stat.value() <= max; } } ); } void validateWithMin(Stat[] stats, final int min) throws InvalidStatException { validate( stats, new Validator() { public boolean isValid(Stat stat) { return stat.value() >= min; } } ); } interface Validator { boolean isValid(Stat stat); } void validate(Stat[] stats, Validator validator) { for(Stat stat : stats) { if(! validator.isValid(stat)) { throw new InvalidStatException(); } } }
  • 27. Les propositions des Closures • BGGA – Gilad Bracha, Neal Gafter, James Gosling, Peter von der Ahe • CICE – “Concise Instance Creation Expressions” – Josh Bloch, Bob Lee, Doug Lea • FCM – “First Class Methods” / JCA “Java Control Abstraction” – Stephen Colebourne, Stefan Schulz, Ricky Clarkson
  • 28. Closures - CICE void validateWithMax(Stat[] stats, int max) throws InvalidStatException { validate( stats, Validator(Stat stat) { return stat.value() <= max; } ); } • L'interface Validator et méthode validate () sont inchangés.
  • 29. Closures - BGGA void validateWithMax(Stat[] stats, int max) throws InvalidStatException { validate(stats, {Stat stat => stat.value() <= max }); } void validate(Stat[] stats, {Stat stat => boolean} block) { for(Stat stat : stats) { if(! block.invoke(stat)) { throw new InvalidStatException(); } } }
  • 30. Closures - FCM void validateWithMax(Stat[] stats, final int max) throws InvalidStatException { validate( stats, #(boolean(Stat stat)) { return stat.value() <= max; } ); } void validate(Stat[] stats, #(boolean(Stat)) block) { for(Stat stat : stats) { if(! block.invoke(stat)) { throw new InvalidStatException(); } } }
  • 31. Closures– structures de contrôle File file = ...; FileReader reader = null; try { reader = new FileReader(file); reader.read… } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { // ignore } }
  • 32. Closures - JCA File file = ...; usingFileReader(FileReader reader : file) { reader.read… } public static void usingFileReader(#(void(FileReader)) block : File file) throws IOException { FileReader reader = null; try { reader = new FileReader(file); block.invoke(reader); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { } } } - c'est la définition de type de bloc, variables passées dans le bloc - Passer des variables nécessaires par le bloc dans la méthode invoke
  • 33. Closures - BGGA File file = ...; usingFileReader(FileReader reader : file) { reader.read… } public static <T,throws E extends Exception> T usingFileReader(File file, {=>T throws E} block) throws E { FileReader reader = null; try { reader = new FileReader(file); return block.invoke(reader); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { } } } • La syntaxe BGGA est beaucoup plus compliquée car elle est la manipulation à la fois la syntaxe et la syntaxe avant l'abstraction de contrôle. • Avoir à gérer cas d'exception, mais fondamentalement semblable dans son concept
  • 34. API Date / Time • Correction des APIs existantes date/heure • Problèmes heure d'été • Threads DateTimeFormat • Mutabilité Date/Calendar • Manque des classes interval/duration • Basé sur JodaTime • Analyse, de mise en forme, l'arithmétique, etc
  • 35. Units and Quantities (JSR 275) Unit UnitFormatter SI NonSI BaseUnit DerivedUnit Dimension ProductUnit AlternateUnit TransformedUnit Converter MultiplyConverter AddConverter LogConverter
  • 36. Exemples des Unités // Conversion entre les unités. KILO(METER).getConverterTo(MILE).convert(10) • 6.2137119223733395 // Récupération de l'unité système (identifie le type de mesure). REVOLUTION.divide(MINUTE).getSystemUnit() • rad/s // Vérifier la dimension ELECTRON_VOLT.isCompatible(WATT.times(HOUR)) • true // Récupération de dimension unitaire (dépend du modèle actuel). ELECTRON_VOLT.getDimension() • [L]²·[M]/[T]²
  • 37. JMX (Java Management Extensions) • JMX 2.0 (JSR 255) – Rénovation avec les types génériques – Utilisation les annotations – Faire MBeans ouverts facile à utiliser – Généraliser les moniteurs pour supporter types complexes – serveurs Mbean Cascade/fédéré – Les connecteurs services Web (JSR 262)
  • 38. Javadoc (JSR 260) • De nouvelles étiquettes pour des exemples, • Catégorisations nouveaux types de méthodes, propriétés de bean, etc • Mettre à jour le look old school
  • 39. Autres.. • Support des opérateurs numérique pour le type BigDecimal BigDecimal a = … BigDecimal b = … BigDecimal s = a + b; • Comparaisons de chaines de caractères dans la clause switch: switch(stooge) { case ‘Moe’: … • Comparaison pour les énumérations JACK < QUEEN
  • 40. Merci pour votre attention