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 de Spring
• Spring 3.0
– Supports, dépréciations et suppressions
– Présentation des nouveautés
– Roadmap
5. Spring 1.0
• Mars 2004
• Alternative légère au EJB 2
• Fonctionnalités :
– Injection
– AOP
– Support de Jdbc, Hibernate, iBatis, JDO, ..
– Framework Web
6. 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
7. Spring 1.2
• Mai 2005
• DTD améliorée pour configuration plus souple
– Alias, import
• Premier support du JDK 5 !
– @Transactional, …
8. 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
9. Spring 2.5
• Novembre 2007
• Nouveaux namespaces :
– JMS
– Context
• Annotations
– Spring : IoC, Tests, Web
– Standard JEE
• Toujours compatible JDK 1.4
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
14. 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
15. 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(); }
}
16. 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
17. 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
• …
18. 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')
20. REST
• Intégré dans Spring @MVC
• Fournir un support natif
– Application visuelle Web
– Service
• Alternative : Utiliser JAX-RS et son modèle propre
22. 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
23. 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
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);
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 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
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
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