Spring MVC : Développer un convertisseur personnalisé

La modélisation d'une API REST permettant de gérer une ressource naturellement arborescente pose un problème technique intéressant.

Pour l'exemple, imaginons une API permettant de lire les métadonnées (taille, date d'accès...) d'un fichier sur disque, identifié par son chemin.
Selon la logique RESTful, l'URI associée au fichier foo/bar/baz.txt doit être http://<server:port>/file/foo/bar/baz.txt, et le endpoint Spring MVC associé mappé comme ceci :

@GetMapping("/file/{path}")
public HttpEntity<FileInfo> fileInfo(@PathVariable("path") String path) {
    return filesystemDao.getFileInfo(path);
}

Problème : Spring MVC ne sait pas capturer les fragments d'URL (@PathVariable) contenant des "slash" , même encodés en %2F.

En réfléchissant plus avant, on s'aperçoit que les "slash" ne sont pas les seuls caractères pouvant poser problème : les noms des répertoire et fichiers sont autorisés à contenir des caractères incompatibles avec les URLs. Il nous faut donc encoder tout le chemin, mais, à cause du bug indiqué plus haut, un simple "urlencode" ne suffit pas.
We need a bigger boat.

Lire la suite...

Implémenter le pattern Session Object avec Spring MVC

HTTP est un protocole déconnecté : un client se connecte à un serveur, lui transmet une requête, attend une réponse, et se déconnecte. Bonjour, au revoir, et on recommence à zéro.

Pour servir des documents sur un réseau, c'est parfait ; mais pour interagir avec une application web professionnelle, c'est un peu limité. L'utilisateur apprécie qu'on se rappelle de lui tout au long de sa session de travail, qui peut nécessiter de nombreux cycles requête/réponse.
Pour conserver ce contexte applicatif entre les requêtes, le serveur propose donc la notion de Session. Chaque utilisateur se voit ainsi attribuer un petit coffre-fort personnel, dans lequel les données qui le concernent sont stockées entre les requêtes.

Lire la suite...

Développer une application REST avec Spring MVC & Angular.js

Aujourd'hui plus que jamais, le Javascript a le vent en poupe. On le trouve même côté serveur - ce que je trouve personnellement d'une absurdité étourdissante, mais passons.

En ce moment, la mode est aux frameworks MVC côté client ; là, j'y crois déjà un peu plus. Mais il en sort environ un par semaine, et il est difficile de faire son choix, malgré la pléthore de comparatifs qui fleurissent sur le net (ici, , ou encore là-bas).

Thoughtworks, de son côté, estime que la peinture n'est pas encore sèche et qu'il vaut mieux attendre un peu avant de se lancer dans ce genre d'aventure en production. En effet, on a encore très peu de retours d'expérience, et la pérennité des frameworks n'est pas encore démontrée.

Pourtant, dans le tas, il y en a un qui m'a fait de l'oeil : Angular.js. Je vous propose donc une petite démonstration de son intégration avec Spring MVC côté serveur, pour réaliser une application, totalement originale n'est-ce pas, de "todo-list".

Lire la suite...

SUG-France : Lancement du premier Spring User Group français !

SUG.pngJ'ai le plaisir de vous annoncer la création du Spring User Group France (SUG-France) !
Sur le même modèle que le Paris JUG, il vise à rassembler tous les deux mois la communauté des utilisateurs de Spring autour de conférences thématiques.

La première conférence, présentée par Arnaud Cogoluègnes[1], aura lieu le jeudi 25 février et portera sur les nouveautés de Spring 3.0 (Spring EL, support REST...).
Et pour fêter ce lancement, un tirage au sort sera organisé parmi les participants afin de faire gagner deux exemplaires du livre "Spring par la pratique, 2° édition" (que je vous recommande chaudement).

Pour participer, il suffit de s'inscrire sur la page du Google Group du SUG, mais attention, les places sont limitées !

Pour finir, voici l'ensemble des coordonnées du SUG :

A bientôt au SUG-France !

Notes

[1] Arnaud Cogoluègnes est auteur de "Spring par la Pratique 2° édition" et de "Spring Dynamic Modules in action" (à paraître).

VMWare acquiert SpringSource

SS.pngL'annonce fait l'effet d'une petite bombe dans le milieu du développement Java : le célèbre fournisseur de solutions de virtualisation VMWare serait en pourparlers pour le rachat de SpringSource, le non moins célèbre éditeur à l'origine du framework Spring (entre autres). L'opération, qui se monterait à près de 420 M$ au total, aurait d'ores et déjà reçu une approbation de principe des actionnaires de SpringSource.

Les deux sociétés étaient déjà partenaires, et les produits VMWare étaient déjà très largement supportés par le SpringSource Tools Suite (STS), l'environnement de développement maison basé sur Eclipse. Cette relation privilégiée avait de plus été fortement mise en avant par Adrian Colyer lors de la conférence SpringOne qui s'est tenue fin avril.

En mettant la main sur SpringSource, VMWare fait également main basse sur différentes technologies et compétences développées ou précédemment rachetées par SpringSource, et peut donc proposer une offre "all-inclusive" comprenant la plateforme matérielle (virtualisée), les outils de développement (STS, Spring framework), les middlewares (Spring Intégration, Spring Batch...), les serveurs d'application (Tomcat, tcServer, dmServer...) et une des meilleures solution de monitoring du marché (Hyperic).
Je pense que nous entendrons très bientôt parler de composition de plateforme à la demande (grâce à la "long-needle injection" ), et de cloud-computing virtualisé mettant en oeuvre les technologies de ces deux sociétés.

Reste maintenant à savoir l'influence qu'aura VMWare sur le portfolio et la politique de licence de SpringSource - le malaise du récent rachat de Sun par Oracle n'est en effet toujours pas dissipé, et l'image de chevalier blanc de SpringSource avait déjà été écornée par le mini-scandale des licences début 2009.
Aujourd'hui, Rod Johnson tient à rassurer la communauté Spring, et met en avant les formidables possibilités qui s'offriront prochainement aux développeurs et aux entreprises : 2010 sera "cloud" ou ne sera pas.

Interfacer Spring et le Service Provider API

Je vous ai déjà présenté le Service Provider API de Java 6+, qui permet de découvrir dynamiquement au runtime les implémentations disponibles d'une interface donnée.

Nous avions également vu qu'il était possible de parvenir à un résultat similaire dans un environnement Spring, grâce à l'import dynamique de ses fichiers de configuration et à un BeanPostProcessor. Toutefois, cela demandait davantage de travail et ne permettait de découvrir que sur des classes expressément déclarées comme beans Spring.

Dans cet article, nous verrons comment interfacer ces deux technologies, de manière à pouvoir injecter dans un contexte Spring des implémentations non-Spring détectés par le Service Provider API.

Lire la suite...

SpringOne, DayTwo - Keynote d'Adrian Colyer

La deuxième journée de la conférence SpringOne'09 s'est ouverte sur la Keynote d'Adrian Colyer.

Faisant preuve de beaucoup d'humour (sauce Monty Python) et accompagné d'une marionnette de canard (qui semble être un personnage récurrent de ses shows), il a rappelé le positionnement stratégique de SpringSource en entreprise : fournir les outils permettant de diminuer drastiquement le "time-to-live" (ou "time-to-value"), c'est-à-dire le temps entre l'identification d'un besoin métier et la mise en production du produit y répondant.

Reconnaissant que la productivité d'un département informatique dans son ensemble est directement dépendante de celle ses différentes équipes, SpringSource a élaboré une stratégie globale couvrant l'ensemble de la chaîne de production, du développement à l'exploitation. Si les développeurs en ont été historiquement les premiers bénéficiaires (Spring framework, Groovy, Spring IDE, TC server...), c'est maintenant au tour des équipes d'infrastructure et d'exploitation de se voir proposer disposer des outils puissants et des solutions innovantes.

Lire la suite...

SpringOne : Questions pour des champions

Vu les pointures qu'on croise à SpringOne, j'aurais été fou de me priver de poser des questions. Des questions naïves de préférence, lancées un peu au hasard, mais qui peuvent fournir des réponses intéressantes, voire un scoop ou deux.

Lire la suite...

SpringOne, DayOne - Keynote de Rod Johnson

SpringOne, premier jour.

Malgré un ciel bas et lourd (avec un soupçon de pluie) pesant comme un couvercle sur l'esprit gémissant en proie aux longs ennuis des passagers du Thalys (2h de retard, merci bien), j'ai tout de même rejoint Amsterdam à temps pour assister à la fameuse Keynote de Rod Johnson, qui ouvrait la conférence.

Au programme, son analyse de l'actualité et sa vision du futur de Java, puis un tour d'horizon du portfolio SpringSource, et même quelques annonces exclusives. Suivez le guide !

Lire la suite...

Spring 3.0 M2 disponible

Jürgen Höller vient d'annoncer la disponibilité de Spring 3.0 M2 !

Pour faire court :

  • La réécriture du framework pour tirer parti de la JLS 3 se poursuit : génériques, varargs, etc.,
  • Le module de mapping Objet/XML a été déplacé de Spring Webservices vers Spring Core, car il s'agit d'une problématique transverse, applicable à plusieurs modules comme Spring MVC (qui s'enrichit au passage d'une MarshallingView) et Spring Remoting (JMS).
  • Spring Scheduling est en cours de réécriture pour prendre en charge les API java.util.concurrent. L'effort se poursuivra sur la M3 avec l'ajout d'un namespace dédié.
  • Spring MVC gère désormais les Portlets 2.0 (JSR 286)
  • Spring ORM commence à intégrer JPA 2.0
Lire la suite...

- page 1 de 3