Rencontres Spring 2009 – Spring 3 -
novembre 9, 2009
J’ai assisté aux rencontres Spring 2009 coorganisées par SpringSource et SFEIR à la défense.
Objectifs de la rencontre, Roadmap Spring, Cloud Computing, Spring 3, ROO et au final un arena death match duel entre JEE6 et Spring 3.
pour ma part, je ferai un retour sur Spring 3, les nouveautés, les anciennetés, et ce que Spring est sensé apporté aux développeurs en matière d’agilité, simplicité et performance.
Signes distinctifs
Java 5
La première information qui saute aux yeux c’est que Spring 3 est complétement écrit en Java 5, ce qui d’emblée signifie qu’un projet utilisant Spring 3 est nécessairement compatible Java 5. ça peut paraitre brutal mais il faut savoir que depuis le 30 Octobre dernier, Java 5 n’est plus supporté par sun lire ceci.
pour illustrer ce changement voici un exemple qui met l’accent sur l’utilisation massive de Java 5 :
T getBean(String name, Class<T> requiredType)
la BeanFactory, et qui représente de loin une brique assez importante dans Spring, est elle même -Généric complient-
plus besoin d’XML, ou presque
l’autre nouveauté apportée par Spring 3, c’est la possibilité de configurer la bean factory sans le moindre XML ! cependant, Spring 3 reste totalement rétro compatible avec les version précédentes.
Utilisation de l’annotation @Configuration :
@Configuration
public class ApplicationConfig {
}
la classe ApplicationConfig sera donc responsable de l’instantiation des Beans, pour déclarer un Bean, rien de plus simple :
@Configuration
public class AppConfig {
@Bean
public TransferService transferService() {
return new TransferServiceImpl();
}
}
Cette approche permet d’une part de donner au développeur le moyen de contrôler du code spécifique avant de rendre le Bean, d’autre part ça permet au code de l’application d rester totalement indépendant de la plateforme. L’autre façon est par l’utilisation des Meta Annotation
Restructuration du repository du code
l’organisation des modules de Spring 3 a été complétement revue, désormais le code source de chaque module est maintenu séparément.
Plus d’information sur le site de Spring. <<LINK>>
Spring Expression Language
Spring EL et qui s’apparente à Unified EL, propose des possibilités de simplification très puissantes et notamment lors de la définition des Beans dans une XML ou par annotations.
voici un exemple illustrant les possibilités qu’offre Spring EL :
<bean class=”mycompany.RewardsTestDatabase”>
<property name=”databaseName” value=”#{systemProperties.databaseName}”/>
<property name=”keyGenerator” value=”#{strategyBean.databaseKeyGenerator}”/>
</bean>
dans cet exemple, l’attribut databaseName et keyGenerator font référence à deux Beans précédemment initialisés dans le contexte.
le même comportement est facilement reproductible par l’utilisation des annotations selon l’exemple suivant :
@Repository
public class RewardsTestDatabase {
@Value(“#{systemProperties.databaseName}”)
public void setDatabaseName(String dbName) {
…
}
@Value(“#{strategyBean.databaseKeyGenerator}”)
public voidsetKeyGenerator(KeyGenerator kg) {
…
}
}
La résolution des @Value se fait automatiquement et dynamiquement par Spring au Runtime, ce qui offre une nouvelle possibilité pour les développeurs qui la prise en compte à chaud par Spring 3 d’un changement effectué dans les fichiers de configurations .properties.
Web
Spring MVC
Pas de nouveauté concernant le volé Spring MVC depuis la version 2.5 de Spring, qui a introduit l’utilisation des Annotations pour construire des Contrôleurs MVC dans une applicaiton, ce que Spring 3 ajoute -ou supprime- c’est la déprécation de “SimpleFormController” dans le but de faire orienté les nouveaux développement vers l’utilisation “systématique” des annotations pour les contrôleurs Spring.
Amélioration du support REST
Le support de REST a été amélioré dans cette version de Spring 3. REST est devenu en quelques années le standard de facto pour quiconque souhaite mettre en place une architecture orientée service par l’utilisation de Web Service, cependant REST est beacoup plus que ça. Le modèle de développement REST est assez simple et passe par l’utilisation intensive des Annotations. Un aspect non négligeable que REST permet d’atteindre est la normalisation des URI, je m’explique, pour faire passer des valeurs à travers une URL standard en GET le moyen le plus simple est de faire comme ci-dessous :
http://www.application.com?VARIABLE=VALUE,….
le problème qui se pose est qu’un certain nombre de proxy refuserons ce genre d’URL. le format des URI REST sont de pure URL qui respecte le standard HTTP.
pour pouvoir utiliser REST avec Spring 3, rien de plus simple :
URI Templates
@RequestMapping(“/hotels/{hotelId}”)
Quand une requête arrive à “/hotels/1″, le serveur repondera par le renvoi de la chaine “hotels”, noté cependant que {hotelId} dans “@RequestMapping” au début de la classe est repris dans la déclaration de la méthode “ getHotel” par l’utilisation de l’annotation “@PathVariable“.
d’autres possibilités sont offerte et notamment avoir plusieurs variables sur le même path ce qui permet de faire des filtres assez affinés :
@RequestMapping(value=”/hotels/{hotel}/bookings/{booking}”, method=RequestMethod.GET)
public String getBooking(@PathVariable(“hotel”) long hotelId, @PathVariable(“booking”) long bookingId, Model model) {
Hotel hotel = hotelService.getHotel(hotelId);
Booking booking = hotel.getBooking(bookingId);
model.addAttribute(“booking”, booking);
return “booking”;
}
Je vous conseil vivement d’aller sur le blog de Arjen Poutsma qui vous donnera de plus amples informations.
View
Spring-MVC permet au @Controler de décider quelle vue rendre pour une requête donnée, via ViewResolver. Dans un scénario RESTful, c’est le client qui décide du rles représentations acceptables, en passant par l’en-tête HTTP Accept. Le serveur répond avec la représentation livrés via l’entête Content-Type. Ce processus est connu comme la négociation de contenu.
Spring Integration
Spring Integration est un framework léger d’intégration à l’image de Apache Camel ou Mule, il permet par exemple l’échange de données entre applications Spring se trouvant dans plusieurs instances JVM à travers un canal de communication. pas de bouleversement concernant Spring Integration pour la version 3 de Spring à part le fait d’une meilleure prise charge ,un modèle simplifié d’utilisation et un découplage Framework-application amélioré.
Support de JEE 6
Une prise en compte du support de la très prochaine version JEE 6 annoncée pour la mi Décembre 2009 est existe déjà dans Spring 3 et notamment le support de la JSR 330. La version Spring 3.1 aura pour mission la prise en compte totale de JEE 6.
Depricated & Pruned
Plusieurs packages et Classes font désormais partie du grand nettoyage du printemps engagé par les équipes de Spring et cela dans le but d’avoir du code encore plus facilement “maintenable“, évolutif et moins complexe. Je vous invite vivement de jeté un coup d’œil dans la documentation de Spring pour prendre en compte les changements dans vos projets respectifs.
Téléchargements
voici comment vous devez faire si vous voulez utiliser Spring 3 RC1. Je pars de l’hypothèse que vous utilisez maven pour le build de vos projets.
Pour commencer ajouter les URL des différents repository des Bundles dans votre settings.xml :
<repository>
<id>com.springsource.repository.bundles.snapshot</id>
<name>SpringSource Enterprise Bundle Repository – SpringSource Bundle Snapshots</name>
<url>http://repository.springsource.com/maven/bundles/snapshot</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.milestone</id>
<name>SpringSource Enterprise Bundle Repository – SpringSource Bundle Milestones</name>
<url>http://repository.springsource.com/maven/bundles/milestone</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.release</id>
<name>SpringSource Enterprise Bundle Repository – SpringSource Bundle Releases</name>
<url>http://repository.springsource.com/maven/bundles/release</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.external</id>
<name>SpringSource Enterprise Bundle Repository – External Bundle Releases</name>
<url>http://repository.springsource.com/maven/bundles/external</url>
</repository>
et puis ajouter les dépendances des modules que vous voulez utilis, il faudra prendre en compte le changement des noms des différents ArtifacId qui désormais suivent tous le format suivant :
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.core</artifactId>
<version>3.0.0.BUILD-SNAPSHOT</version>
</dependency>
la version actuelle est 3.0.0.BUILD-SNAPSHOT.
Veuillez noté que l’artifact spring tout court n’existe plus.
Ressources
Arjen poutsma REST in Spring 3 post
Juregen Hoeller Annotated Web MVC in Spring 2.5 post
Slim Tebourbi sur insideit.fr autour de Spring Expression Language
Welcome back
novembre 3, 2009
Bienvenue et merci pour votre confiance et votre fidélité.
J’essaierai de continuer avec vous mon évolution dans le monde des blog, je ferai attention au fait que ce dernier ne devienne pas un BLOB.
à bientôt.