Il y a 13 ans -
Temps de lecture 8 minutes
Rencontre Spring – Spring 3.0 – Interview avec Arjen Poutsma
Comme l’année dernière, j’ai assisté ce mercredi 4 novembre aux rencontres Spring Paris. Cette journée est l’occasion de rencontrer des acteurs de renom de la communauté Spring venant présenter leurs solutions et partager leur vision de l’écosystème Java.
Les grands thèmes du jour :
- Présentation de Spring 3.0 et de la roadmap SpringSource.
- Amélioration de la productivité avec Spring ROO.
- Standardisation et positionnement stratégique et face à Java EE.
- Cloud Computing avec le nouveau mouvement lancé par le rachat de SpringSource par VMWare.
Dans ce cadre, j’ai eu l’occasion de mener une interview d’Arjen Poutsma en marge des présentations (merci Michael). Ce billet retrace ce que j’ai retenu de cet entretien.
Arjen Poutsma est le créateur de Spring WS, projet sur lequel il est d’ailleurs toujours largement impliqué. C’est également le second committeur Spring 3.0 avec Juergen Hoeller, qui était venu l’an passé pour présenter le sujet.
Toutes les nouveautés Spring 3.0 abordées lors de la conférence n’ont pas été traitées lors de l’entretien. Cet article n’a pas pour but de les cataloguer, même si certaines d’entre elles y sont abordées …
Date de sortie de Spring 3.0 et le communiqué de presse récemment publié
À l’heure actuelle, le développement de l’ensemble des fonctionnalités que SpringSource voulait inclure dans Spring 3.0 est terminé, le code est complet et pleinement documenté. C’est Spring 3.0 RC1 est sortie en octobre.
Avant la sortie officielle prévue en décembre, une RC2 va sortir pour corriger les quelques jira restées ouvertes
Vous pouvez commander votre version Spring 3.0 pour Noël.
Spring 3.0, ce n’est pas un petit projet
Le projet est porté par Juergen Hoeller et Artjen Poutsma, qui en sont également les deux plus gros contributeurs. En plus de cela, de nombreux committeurs externes (environ 15 personnes) ont participé au projet, mais pas à plein temps. Le projet a commencé il y maintenant plus d’un an, ce n’est pas un petit projet. En plus des nouvelles fonctionnalités offertes par Spring 3.0, le gros du travail a résidé dans la réécriture et la simplification de Spring core. Un temps non négligeable a été passé pour aligner ou préparer les mises à jour des autres modules Spring. Un travail d’uniformisation des numéros de version est également en cours pour simplifier les interdépendances entre les différents projets. En effet, il devenait difficile de dire que Spring WS 1.5.8 est compatible avec Spring 2.5.x alors que la 1.5.9 n’est compatible qu’avec Spring 3.0. À l’image de Spring Sécurité, les principaux modules Spring devraient donc passer rapidement en 3.0.
Migrez à Spring 3.0 en 2 minutes chrono
Durant les présentations, Adrian Coyler et Arjen ont tous deux affirmé que Spring 3.0 était 100% rétro-compatible avec Spring 2.5. Arjen a même décrit le processus de migration comme une simple mise à jour de jars. Au-delà de la jolie phrase marketing qui fait sourire, un effort particulier a été apporté à la conservation de cette rétro-compatibilité. Les fonctionnalités Core restent complètement rétro-compatibles, voire inchangées. En revanche, si vous migrez un gros projet, vous tomberez probablement dans des cas d’utilisation spécifiques vous obligeant à modifier quelques petites choses. Difficile d’assurer que l’ensemble des cas d’utilisation sont rétro-compatibles (vu leur nombre), même si la plus grosse partie des ré-écritures concerne des classes de tambouille internes à Spring.
Message personnel pour Julien (Dubois) : Arjen m’a proposé d’offrir gracieusement tes services à mon client si la migration me prend plus d’une journée. On lance les paris ? :-)
D’autre part, Spring prônant le pruning, certaines fonctionnalités deprecated vont être supprimées. On salue le choix de SpringSource d’alléger son framework et de tout faire pour ne pas traîner du code legacy sur plusieurs générations (contrairement à d’autres).
Spring 3.0 nécessite a minima un JDK 5. Un sondage à été réalisé lors de la présentation et seule une personne de l’assemblée déclarait toujours utiliser le JDK 1.4. Le timing semble plutôt bon, le JDK 5 de Sun étant déjà passé au statut end of life récemment.
Un Expression Langage intégré à Spring core, plus costaud qu’il en a l’air …
L’une des grandes nouveautés de Spring 3.0 concerne la gestion d’un langage d’expression dans la déclaration des beans. Cette fonctionnalité est rendue possible par la modification du cœur de Spring. Si son utilisation reste pour le moment un peu timide, c’est l’une des briques nécessaires à certaines évolutions de modules annexes (Web). Il est vrai que nous ne sommes pas habitués à utiliser un tel mécanisme, le besoin peut même vous sembler limité, et pourtant … C’est également ce que je m’étais dit lors de la présentation de Juergen il y a un an . Depuis, chez mon client, je me suis surpris à constater à plusieurs reprises que cette solution m’aurait été utile.
L’utilisation des EL++ dans la déclaration de vos beans (XML ou annotations) vous permet d’une part de simplifier votre configuration et d’éviter de dupliquer certaines constantes dans vos fichiers de configurations. Cela dit, ce qui est décrit comme constante peut à ce jour déjà être centralisé par l’intermédiaire de variables gérées par le PropertyPlaceholderConfigurer
et remplacées à l’initialisation du contexte. L’utilisation des EL++ vous permet ce même résultat directement au runtime ! Différentes classes scopées ‘prototype’ peuvent donc être instanciées avec des paramètres différents.
La fonctionnalité vous permet d’accéder out-of-the-box à différents contextes : systemProperties, systemEnvironment, request, session ou à toute propriété de beans déclarés dans Spring. Notez qu’il est possible d’enrichir ceux-ci et d’y exposer vos propres contextes. Un mécanisme de SPI vous permet d’enrichir cette fonctionnalité et vous permet d’exposer vos propres contextes. A quoi cela sert il ? Il est par exemple possible, moyennant un peu de code, d’accéder via EL à une valeur stockée en base de données.
Le support REST, une surcouche à Spring MVC
Le support REST a été développé par Arjen, dans la mesure où il est également le fondateur de Spring WS. Nous aurions d’ailleurs pu penser qu’il se serait basé sur le fonctionnement de Spring WS pour réaliser cette fonctionnalité. Arjen m’a d’ailleurs dit avoir imaginé une telle solution avant de rebrousser chemin : le support de REST se rapproche beaucoup plus de Spring MVC que de Spring WS.
Le support REST de Spring 3.0 ne repose sur aucune implémentation existante. Ce n’est donc ni du RESTlet, ni du JAX-RS, c’est du 100% SpringSource et l’une des fonctionnalités proposées par Spring MVC.
Côté client, le nouveau RestTemplate
vous permet d’accéder très facilement à n’importe quel service REST.
Les meta-annotations, c’est bien mais pas universel
Arjen a présenté le mécanisme de méta-annotation proposé dans Spring 3.0. Il s’agit d’offrir la possibilité de regrouper plusieurs annotations en une seule. Il est ainsi possible de regrouper certaines caractéristiques par type de composant. Voici l’exemple d’une annotation @MyKindOfComponent
, qu’il est possible d’utiliser sur n’importe quelle classe. Celle ci possédera ainsi toutes les caractéristiques des différentes annotations.
@Service @Scope("request") @Transactionnal @Retention(RetentionPolicy.RUNTIME) Public @interface MyKindOfComponent { ... }
Au delà de la tentative d’apaisement des anti-annotations, ce mécanisme peut vous permettre de tagger certains types de classes selon vos besoins. Vous pourrez ainsi facilement retrouver ces classes via un aspect posé sur votre annotation personnalisée.
Spring 3.1 sera pleinement compatible Java EE 6
L’annonce a été faite lors des conférences par Arjen, et modéré ensuite par Alexis Moussine-Pouchkine lors de sa présentation sur « Java EE vs Spring » qui espère que SpringSource implémentera a minima le profil Web des spécifications Java EE 6. Un subset de fonctionnalités sera choisi pour être intégré à Spring 3.1. Il s’agira des fonctionnalités qui ont un intérêt direct pour Spring. Il serait un peu farfelu de penser que Spring implémentera Java EE 6 dans son intégralité. La liste de ces fonctionnalités n’est d’ailleurs à ce jour pas fixée définitivement. Certaines comme JPA 2.0 et JSF 2.0 sont déjà compatibles et intégrées à Spring 3.0. Les autres attendront la prochaine release.
Cela mis à part, Arjen se dit intéressé par certaines fonctionnalités de Java EE 6. Une configuration de Spring MVC simplifiée par l’utilisation des Web Fragments de Servlet 3.0 est envisagée. L’autre fonctionnalité que j’ai évoquée est l’exécution asynchrone d’handlers Spring MVC : Arjen s’est montré également intéressé même s’il m’a dit qu’il existait déjà des moyens d’avoir un mécanisme similaire (j’ai cherché, mais pas trouvé…).
Pour finir, deux sujets un peu moins ‘Spring 3.0’ …
Ayant effectué quelques applications Android, j’aurais aimé avoir une solution me permettant d’accéder le plus simplement possible à des services REST / MVC … Du coup, je lui ai demandé si, en interne, ils étaient intéressés par cette petite communauté de développeurs, et s’ils avaient des idées pour faciliter la création d’applications Android. Evidemment, je n’attendais pas beaucoup de cette question ; la réponse a ressemblé à cela : un restTemplate côté Android ou une version light de Spring remoting est une bonne idée … qu’il faudra creuser … par vous-même :-)
Enfin, l’interview s’est terminée par une question personnelle. Quel est, selon lui, le sujet le plus hype du moment : les langages de scripting sur JVM à la Groovy, les nouvelles techniques de concurrence avec les acteurs Scala, la modularisation et le rechargement d’applications, ou le Cloud Computing … C’est ce dernier qui a sa préférence.
Merci à Arjen pour sa présentation et pour le temps consacré à l’interview.
Au plaisir de renouveler cela l’année prochaine.
Commentaire
5 réponses pour " Rencontre Spring – Spring 3.0 – Interview avec Arjen Poutsma "
Published by Alexis MP , Il y a 13 ans
Comme discuté hier, l’affirmation « Spring 3.1 sera pleinement compatible Java EE 6 » est pour le moins ambigüe.
Clairement ni SpringSource ni aucun autre nouvel entrant ne peut (ni ne doit) implémenter tout Java EE 6. Par contre le profil web de Java EE 6, dont le contenu précis est maintenant connu, est une cible techniquement très atteignable. En fait c’est la seule cible à atteindre réellement.
Supporter certaines API et annotations de JavaEE 6 ce n’est pas la même chose que de supporter Java EE 6 Web Profile qui est une plate-forme sur laquelle on peut investir des développements sans dépendance aucune sur une implémentation donnée.
Published by Piwaï , Il y a 13 ans
A propos de Spring + Android, c’est pas gagné. Un certain nombre de classes/interfaces J2SE utilisées par Spring ne sont pas disponibles. Un exemple ? PropertyEditor…
Ca s’annonce beaucoup plus prometteur du côté de Guice + Android. J’ai déjà une appli Android déployée avec Guice, et une deuxième en cours de dev, et franchement ça simplifie quand même bien la vie.
Published by Michael , Il y a 13 ans
C’est vrai que nos slides sont un peu ambigus sur ce sujet. Il ne s’agit pas de compatibilité au sens « implémentation ». Ca veut juste dire que les utilitaires fournis dans Spring 3.1, comme le JpaTemplate, pourront s’appuyer sur les nouvelles briques Java EE6.
Published by Hikage , Il y a 13 ans
Piwai> C’est anecdotique ( car je connais en rien Android ), mais concernant PropertyEditor, Spring 3.0 arrive avec une alternative au PropertyEditor, qui n’est pas lié à des interfaces ou classe spécifique comme cela.
Published by Piwaï , Il y a 13 ans
Merci Hikage… but what about PropertyDescriptor ?
J’ai restesté pour voir, et voici ce que j’obtiens en utilisant une simple XmlBeanFactory et avec les jars core, context et beans :
WARN/dalvikvm(1029): VFY: unable to find class referenced in signature (Ljava/beans/PropertyDescriptor;)
ERROR/dalvikvm(1029): Could not find method java.beans.PropertyDescriptor.getPropertyType, referenced from method org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty
Enfin, c’est ptet pas l’endroit idéal pour discuter de tout ça…