Spring 3.0

             • Gildas Cuisinier




9 Novembre



                                  1
Gildas Cuisinier

                   • Consultant JEE, Gam Consult
                      – Basé au Luxembourg, depuis 2 ans
                      – Certifié Spring Framework


                   • Responsable Spring, Developpez.com
                      – Articles techniques, FAQ, Forum, Blog
                      – Reporter pour différents évènements


                   • Relecteur de Spring par la pratique,
                     2ème édition




<Date>                                                          2
Agenda


• Rétrospective de Spring
• Spring 3.0
  – Supports, dépréciations et suppressions
  – Présentation des nouveautés
  – Roadmap
Rétrospective de
Spring
Spring 1.0

• Mars 2004
• Alternative légère au EJB 2
• Fonctionnalités :
   –   Injection
   –   AOP
   –   Support de Jdbc, Hibernate, iBatis, JDO, ..
   –   Framework Web
Spring 1.0

• Configuration xml, basée sur une DTD
   – Un seul tag : <bean>
• Possibilité de métadonnées sur les classes
   – Basé sur Xdoclet
   – Utilisation :
      • Transaction
      • MVC
Spring 1.2

• Mai 2005
• DTD améliorée pour configuration plus souple
  – Alias, import


• Premier support du JDK 5 !
  – @Transactional, …
Spring 2.0

• Octobre 2006
• Simplification de la configuration XML
   – Basé sur XML Schema
   – Namespaces dédiés
      • JEE, Transaction, AOP, Lang, Util
   – Scope
• Annotations AspectJ
Spring 2.5

• Novembre 2007
• Nouveaux namespaces :
  – JMS
  – Context
• Annotations
  – Spring : IoC, Tests, Web
  – Standard JEE
• Toujours compatible JDK 1.4
Spring 3
Spring 3.0

• Supports, dépréciations et suppressions
• Nouveautés de Spring 3
• Roadmap
Supports

• JDK 1.5+
  – Rupture : JDK 1.4 n’est plus supporté
• Dépréciation
  – Hiérarchie de contrôleur Web
  – Hiérarchie de classe pour Junit 3.8
• Suppression
  – Le support de Commons Attributes
  – Le support de Toplink
  – Le support (héritage) de Struts 1.0
Nouveautés
Spring OXM

• Inclusion du module de mapping Object / XML
   – Provient de Spring WS
• Permet une abstraction des API communes
   – JAXB, JiBX, Xstream, Castor


• Utilisation
   – Gestion des payload REST en XML
   – Accès aux données SQL XML
JavaConfig

• Configuration par annotations
   – @Configuration, @Bean, @Lazy, @Primary, @Import, @Value


• Version XML :
   – <beans>
     <bean name=“monBean" class=“be.hikage.MonBeanImpl"/>
     </beans>

• Version Annotation:
   – @Configuration
     public class AppConfig {
     @Bean
     public MonBean monBean() { return new MonBeanImpl(); }
     }
Expression Language

• Syntaxe proche des Unified EL mais avec des
  fonctionnalités supplémentaires
• Développé selon les besoins des projets du
  portfolio
• Indépendant
Expression Language

• Supporte l’appel de méthode :
   – #{'Hello World'.concat('!')} => Hello World !
• Supporte les Map, List, Properties
   – #{monArray[1]}
   – #{maMap[‘maCle’]}
   – #{ systemProperties['user.region']"}
• Supporte les opérateurs
   – #{1==1} -> Vrai
• …
Expression Language

• Attributs du contexte
   – systemProperties, systemEnvironnent
   – Beans
   – Web :
       • contextParameters, contextAttributes
       • request, session
   – Securite :
       • hasRole(), isFullyAuthenticated(), …
       • Ex : hasRole('ROLE_SUPERVISOR') and hasIpAddress('192.168.1.0/24')
Expression
Language

             DEMO
REST

• Intégré dans Spring @MVC
• Fournir un support natif
   – Application visuelle Web
   – Service
• Alternative : Utiliser JAX-RS et son modèle propre
REST - MVC


@RequestMapping(value = "/speakers/{id}", method = GET)
public Speaker speakerDetail(@PathVariable("id") long id) {
  return this.speakersService.findById(id);
}

URL : http://localhost:8080/app/speakers/1

•   Intérêt ?
    –   Cachable
REST – HTTP Methods

• REST : Utilisation les méthodes HTTP :
   –   GET : Récupérer une ressource
   –   POST : Ajouter une ressource
   –   PUT : Modifier une ressource
   –   DELETE : Supprimer une ressource
• HTML ne gère que GET / POST
   – Solution : HiddenHttpMethodFilter
   – Taglib Spring MVC utilise cette solution
REST – Content Negociation

• URL = Resource
• Plusieurs représentations
• Solution : ContentNegotiatingViewResolver
  – Délègue aux autres ViewResolver
  – Sélectionne celui qui correspond à la demande


• @RequestBody
  – HttpMessageConverter
REST - Client

• RestTemplate
  – API de haut niveau pour REST
      • Accès au méthodes GET, PUT, POST, DELETE, OPTIONS
      • Gestion des conversions des objets
          – HttpMessageConverter : 4 implémentations
          – ByteArray, Form, String, Source
      • Reste extensible par utilisation de CallBack
          – Génération de la requête
          – Traduction de la réponse


  Speaker speaker = new Speaker();
  URI uri = template.postForLocation("http://localhost:8080/spring-
    rest/speakers/new", speaker);
REST

       DEMO
Support du scheduling

     • Avant :
         – Configuration verbeuse en XML
            •   Définition du Scheduler
            •   Définition du Trigger
            •   Définition du Job
            •   Définition du Bean « métier »
     • Après :




<Date>                lorrainejug@gmail.com | http://lorrainejug.blogspot.com   26
Support du scheduling

     • Alternative : Annotation
         – Cron




         – Delai fixe




         – Période fixe




<Date>                  lorrainejug@gmail.com | http://lorrainejug.blogspot.com   27
Support appel asynchrone

     • Permet de rendre asynchrone une méthode
         – @Async
         – Délègue l’appel à un TaskExecutor


     • Deux cas possibles
         – Méthode sans résultat




         – Méthode renvoyant un résultat




<Date>              lorrainejug@gmail.com | http://lorrainejug.blogspot.com   28
Support des DB embarquées

     • Namespace jdbc
         – Permet de configurer des bases embarquées
             • Derby
             • H2
             • HSQLDB
         – Permet de configurer des scripts d’initialisation




<Date>               lorrainejug@gmail.com | http://lorrainejug.blogspot.com   29
Support Bean Validation

     • JSR 303 – Bean Validation
         – Standardisation de Hibernate Validator
         – Permet de configurer les contraintes de validation directement
           sur les objets métiers




         – Permet de valider dans plusieurs couches
             • Présentation ( Spring MVC, JSF, .. )
             • Service
             • Génération de DDL ( JPA, Hibernate )

<Date>               lorrainejug@gmail.com | http://lorrainejug.blogspot.com   30
Support Bean Validation

     • Spring possède son propre système de validation
         – org.springframework.validation.Validator


     • Propose un adapteur
         – LocalValidatorFactoryBean


     • Toutes couches
         – Validation manuelle via injection du validateur
     • Spring MVC
         – Autovalidation des objets « commande »




<Date>               lorrainejug@gmail.com | http://lorrainejug.blogspot.com   31
Support JSR 330 - @Inject

     • JSR initiée par SpringSource et Google

     • Propose un jeu d’annotations
         –   @Inject    @AutoWired mais limité
         –   @Qualifier  @Qualifier mais limité
         –   @Named      @Qualifier sur le nom du Bean
         –   @Singleton
         –   @Scope


     • Utilisation identique aux annotations standards
         – Utilisation mixte permise




<Date>               lorrainejug@gmail.com | http://lorrainejug.blogspot.com   32
Roadmap
Spring 3.X Roadmap

• Spring 3.0 RC2 :
   – 11 Novembre selon la release note
• Spring 3.0 GA : Fin Novembre
   – Dépendant des retours de la RC2
• Spring 3.1 : Début 2010
   – Support complet de JEE 6
Conclusion

     • Spring 3.0
         – Release majeure car rupture du JDK 1.4
         – Nouvelles fonctionnalités intéressantes
            • REST
            • SpEL
            • Bean Validation


         – Pas une révolution pour autant


     • Spring 3.1
         – Release plus importante            Support JEE 6




<Date>              lorrainejug@gmail.com | http://lorrainejug.blogspot.com   35
Questions




lorrainejug@gmail.com | http://lorrainejug.blogspot.com   36
Offert par Eyrolles




<Date>         lorrainejug@gmail.com | http://lorrainejug.blogspot.com   37

YaJUG - Spring 3.0

  • 1.
    Spring 3.0 • Gildas Cuisinier 9 Novembre 1
  • 2.
    Gildas Cuisinier • Consultant JEE, Gam Consult – Basé au Luxembourg, depuis 2 ans – Certifié Spring Framework • Responsable Spring, Developpez.com – Articles techniques, FAQ, Forum, Blog – Reporter pour différents évènements • Relecteur de Spring par la pratique, 2ème édition <Date> 2
  • 3.
    Agenda • Rétrospective deSpring • Spring 3.0 – Supports, dépréciations et suppressions – Présentation des nouveautés – Roadmap
  • 4.
  • 5.
    Spring 1.0 • Mars2004 • Alternative légère au EJB 2 • Fonctionnalités : – Injection – AOP – Support de Jdbc, Hibernate, iBatis, JDO, .. – Framework Web
  • 6.
    Spring 1.0 • Configurationxml, basée sur une DTD – Un seul tag : <bean> • Possibilité de métadonnées sur les classes – Basé sur Xdoclet – Utilisation : • Transaction • MVC
  • 7.
    Spring 1.2 • Mai2005 • DTD améliorée pour configuration plus souple – Alias, import • Premier support du JDK 5 ! – @Transactional, …
  • 8.
    Spring 2.0 • Octobre2006 • Simplification de la configuration XML – Basé sur XML Schema – Namespaces dédiés • JEE, Transaction, AOP, Lang, Util – Scope • Annotations AspectJ
  • 9.
    Spring 2.5 • Novembre2007 • Nouveaux namespaces : – JMS – Context • Annotations – Spring : IoC, Tests, Web – Standard JEE • Toujours compatible JDK 1.4
  • 10.
  • 11.
    Spring 3.0 • Supports,dépréciations et suppressions • Nouveautés de Spring 3 • Roadmap
  • 12.
    Supports • JDK 1.5+ – Rupture : JDK 1.4 n’est plus supporté • Dépréciation – Hiérarchie de contrôleur Web – Hiérarchie de classe pour Junit 3.8 • Suppression – Le support de Commons Attributes – Le support de Toplink – Le support (héritage) de Struts 1.0
  • 13.
  • 14.
    Spring OXM • Inclusiondu module de mapping Object / XML – Provient de Spring WS • Permet une abstraction des API communes – JAXB, JiBX, Xstream, Castor • Utilisation – Gestion des payload REST en XML – Accès aux données SQL XML
  • 15.
    JavaConfig • Configuration parannotations – @Configuration, @Bean, @Lazy, @Primary, @Import, @Value • Version XML : – <beans> <bean name=“monBean" class=“be.hikage.MonBeanImpl"/> </beans> • Version Annotation: – @Configuration public class AppConfig { @Bean public MonBean monBean() { return new MonBeanImpl(); } }
  • 16.
    Expression Language • Syntaxeproche des Unified EL mais avec des fonctionnalités supplémentaires • Développé selon les besoins des projets du portfolio • Indépendant
  • 17.
    Expression Language • Supportel’appel de méthode : – #{'Hello World'.concat('!')} => Hello World ! • Supporte les Map, List, Properties – #{monArray[1]} – #{maMap[‘maCle’]} – #{ systemProperties['user.region']"} • Supporte les opérateurs – #{1==1} -> Vrai • …
  • 18.
    Expression Language • Attributsdu contexte – systemProperties, systemEnvironnent – Beans – Web : • contextParameters, contextAttributes • request, session – Securite : • hasRole(), isFullyAuthenticated(), … • Ex : hasRole('ROLE_SUPERVISOR') and hasIpAddress('192.168.1.0/24')
  • 19.
  • 20.
    REST • Intégré dansSpring @MVC • Fournir un support natif – Application visuelle Web – Service • Alternative : Utiliser JAX-RS et son modèle propre
  • 21.
    REST - MVC @RequestMapping(value= "/speakers/{id}", method = GET) public Speaker speakerDetail(@PathVariable("id") long id) { return this.speakersService.findById(id); } URL : http://localhost:8080/app/speakers/1 • Intérêt ? – Cachable
  • 22.
    REST – HTTPMethods • REST : Utilisation les méthodes HTTP : – GET : Récupérer une ressource – POST : Ajouter une ressource – PUT : Modifier une ressource – DELETE : Supprimer une ressource • HTML ne gère que GET / POST – Solution : HiddenHttpMethodFilter – Taglib Spring MVC utilise cette solution
  • 23.
    REST – ContentNegociation • URL = Resource • Plusieurs représentations • Solution : ContentNegotiatingViewResolver – Délègue aux autres ViewResolver – Sélectionne celui qui correspond à la demande • @RequestBody – HttpMessageConverter
  • 24.
    REST - Client •RestTemplate – API de haut niveau pour REST • Accès au méthodes GET, PUT, POST, DELETE, OPTIONS • Gestion des conversions des objets – HttpMessageConverter : 4 implémentations – ByteArray, Form, String, Source • Reste extensible par utilisation de CallBack – Génération de la requête – Traduction de la réponse Speaker speaker = new Speaker(); URI uri = template.postForLocation("http://localhost:8080/spring- rest/speakers/new", speaker);
  • 25.
    REST DEMO
  • 26.
    Support du scheduling • Avant : – Configuration verbeuse en XML • Définition du Scheduler • Définition du Trigger • Définition du Job • Définition du Bean « métier » • Après : <Date> lorrainejug@gmail.com | http://lorrainejug.blogspot.com 26
  • 27.
    Support du scheduling • Alternative : Annotation – Cron – Delai fixe – Période fixe <Date> lorrainejug@gmail.com | http://lorrainejug.blogspot.com 27
  • 28.
    Support appel asynchrone • Permet de rendre asynchrone une méthode – @Async – Délègue l’appel à un TaskExecutor • Deux cas possibles – Méthode sans résultat – Méthode renvoyant un résultat <Date> lorrainejug@gmail.com | http://lorrainejug.blogspot.com 28
  • 29.
    Support des DBembarquées • Namespace jdbc – Permet de configurer des bases embarquées • Derby • H2 • HSQLDB – Permet de configurer des scripts d’initialisation <Date> lorrainejug@gmail.com | http://lorrainejug.blogspot.com 29
  • 30.
    Support Bean Validation • JSR 303 – Bean Validation – Standardisation de Hibernate Validator – Permet de configurer les contraintes de validation directement sur les objets métiers – Permet de valider dans plusieurs couches • Présentation ( Spring MVC, JSF, .. ) • Service • Génération de DDL ( JPA, Hibernate ) <Date> lorrainejug@gmail.com | http://lorrainejug.blogspot.com 30
  • 31.
    Support Bean Validation • Spring possède son propre système de validation – org.springframework.validation.Validator • Propose un adapteur – LocalValidatorFactoryBean • Toutes couches – Validation manuelle via injection du validateur • Spring MVC – Autovalidation des objets « commande » <Date> lorrainejug@gmail.com | http://lorrainejug.blogspot.com 31
  • 32.
    Support JSR 330- @Inject • JSR initiée par SpringSource et Google • Propose un jeu d’annotations – @Inject @AutoWired mais limité – @Qualifier @Qualifier mais limité – @Named @Qualifier sur le nom du Bean – @Singleton – @Scope • Utilisation identique aux annotations standards – Utilisation mixte permise <Date> lorrainejug@gmail.com | http://lorrainejug.blogspot.com 32
  • 33.
  • 34.
    Spring 3.X Roadmap •Spring 3.0 RC2 : – 11 Novembre selon la release note • Spring 3.0 GA : Fin Novembre – Dépendant des retours de la RC2 • Spring 3.1 : Début 2010 – Support complet de JEE 6
  • 35.
    Conclusion • Spring 3.0 – Release majeure car rupture du JDK 1.4 – Nouvelles fonctionnalités intéressantes • REST • SpEL • Bean Validation – Pas une révolution pour autant • Spring 3.1 – Release plus importante Support JEE 6 <Date> lorrainejug@gmail.com | http://lorrainejug.blogspot.com 35
  • 36.
  • 37.
    Offert par Eyrolles <Date> lorrainejug@gmail.com | http://lorrainejug.blogspot.com 37