Après Groovy, j’attaque ma tournée par une conférence d’une personne absente de Devoxx 2008, Jürgen Holler de SpringSource, pour sa présentation sur Spring 3.0. Il nous présentera une version actualisée par rapport à JavaOne, l’avantage d’être à Jazoon.

Jurgen Hoeler SpringSource Jazoon 2009
Jurgen Hoeler SpringSource Jazoon 2009

Voici le plan de sa présentation:
– Java 5 Themes
– REST
– EL expression language
– Annotated web controllers
– RoadMap

Dans un premier temps, Jurgen Hoeler, que j’avais interviewé en novembre dernier, nous donne la vision de Spring. La version 3.0 sera tout d’abord le support de Java 5, avec l’utilisation massif des annotations. Il explique par exemple que dans Spring MVC, l’objectif est d’apporter les améliorations via les Annotations. Pour cette raison il nous encourage à utiliser celles-ci plutôt que le code classique pour les Controllers par exemple.
Le support de l’expression language (EL) permet d’offrir des fichiers XML et des classes encore plus configurable. L’exemple qu’il a prit nous montre ainsi une DataSource dont le nom exact de la base n’est connu qu’à l’exécution. Si vos fichiers de configuration XML de Spring sont déjà configurables à l’aide de propriétés externes, cela vous semblera familier.
Viens ensuite la présentation de REST. Dans l’architecture de Spring 3.0, le support de REST sera là, et vu le temps passé pour nous en parler, on pense à Java EE 6 et au profile Lite qui n’a justement pas… JAX-RS en standard.
Le support de la JSR-303 (Bean Validation) aussi présent dans Java EE 6, sera offert par Spring. Comprendre par là, que les annotations seront reconnues et que la validation des beans sera effectuée par le framework Spring. Intéressant à noter.
Les Portlets 2.0 retiennent mon attention, c’est l’un des sujets en ce moment chez mon client. Tout d’abord il explique que la spécification Portlet 1.0 étant assez incomplète, le support des Portlets 2.0 par Spring devrait permettre d’offrir un socle simple pour écrire des Portlets. Il cite JBoss Portal et eXo Portal.
Concernant le support de Java EE 6, Spring 3.0 attend la sortie de la version finale de Java EE 6. Tout ce qui est JSF2.0 et JPA2.0 ne sont donc pas encore prévu dans la version qui sortira… courant juillet. Tout du moins pas officiellement, mais en early preview.

Un retour sur Java 5 pour nous montrer ce qu’il y a de nouveau. Tout d’abord grâce aux génériques, le framework offrira un typage plus fort comme dans cet exemple:

BeanFactory returns typed bean instances as far as possible
T getBean(String name, Class requiredType)
Map getBeansOfType(Class type)

Concernant l’exécution de tâches asynchrones, Spring 3.0 proposera un TaskExecutor (ce n’est pas déjà le cas ?). La gestion des tâches asynchrones sera plus facile. Pas de mentions des Annotations.

A propos de Spring WebFlow : la nouvelle version propose une version révisée de la gestion du binding et de la conversion de type.
A propos ensuite (vous suivez ?) de la gestion des Annotations standards de Java, Spring offre le support des annotations du projet Java Config, la gestion de l’instanciation tardive des Beans avec le mot clé @Lazy.

A propos de l’Expression Language j’ai pris un exemple de l’un de ses slides pour vous montrer comment il serait possible d’injecter une proprieté à l’exécution :

@Repository
public class R {
	@Value("#{systemProps.dbname}")
	public void setDatabaseName(String dbName){
	...
	}

}

N’importe quel de vos Beans Spring est accessible avec l’EL, ce qui permet aussi de récupérer la valeur d’une propriété d’un autre Bean pour l’injecter en paramètre… Je ne vous parle pas des problèmes d’instanciations tardives, car il est tard.

Concernant le support de REST avec Spring 3.0 : Spring MVC offre un support de REST accessible facilement et qui permet d’ajouter à une application Spring MVC le support de REST. Par contre si vous souhaitez utiliser JAX-RS… ce n’est pas possible. C’est l’un ou l’autre… « On attendra de voir ce que les clients veulent »

@RequestMapping(value = "/rewards/{id}",nethod = GET)
public Reward reward (@PathVariable("id") long id){
	return this.rewardsService.findReward(id);
}

Du côté du code, on note aussi l’apparition d’annotations supplémentaires (youpi déjà qu’on avait terminé tout l’autre stock, sympa d’en remettre encore) pour par exemple lire les paramètres des entêtes HTTP ou des Cookies, ce qui peut être utile pour la gestion de la localisation par exemple. Les 2 annotations sont @RequestHeader et @CookieValue.

Conclusion
Voilà pour la présentation de Spring. Jürgen est un bon speaker qui présente son sujet de manière synthétique. On sent la pression pour sortir en juillet la version, avant la sortie en septembre de son copain Java EE 6. L’un n’ayant d’ailleurs rien à voir avec l’autre.

Next please !

PS: j’ai rectifé l’orthographe de Jürgen, il suffisait de regarder le premier slide au début de cet article.