Le framework Vaadin

Suite à une question posée lors de la présentation de Didier Girard sur les technos Google à la dernière soirée du MarsJUG, voici une présentation et un retour sur le framework Vaadin que j'ai récemment découvert (http://vaadin.com).

Vaadin, c'est quoi ?

Vaadin un framework permettant de construire des applications web riche (RIA). Vaadin fournit un ensemble de composants graphiques et une API plutôt riche. Pour cela Vaadin s'appuie sur GWT 1.6 pour le rendu (ils sont en train migrer à GWT 2.0).

Vaadin un framework qui a déjà quelques années d'ancienneté. À la base il s'agissait du framework propriétaire IT Mill Toolkit. En Decembre 2007 ils sont passés en Open source, en 2009 ils ont changé le nom.

Le projet devrait gagner rapidement en visibilité, car la prochaine version de Liferay (6.0) devrait l'inclure en standard. C'est d'ailleurs en suivant l'actualité de Liferay que j'ai découvert Vaadin.

Le développement est très actif. Ils sortent généralement une version majeur tous les 4 mois et des bug release toutes les 2/3 semaines. Par exemple, la version 6.2.0 est sortie le 18 décembre et depuis ils en sont à la version 6.2.3.

Niveau documentation, le projet met à disposition un tutoriel, des exemples de ce qui est réalisable, un livre, un wiki et un forum. A mon avis il manque encore beaucoup de contenu et d'exemples, mais cela devrait s'étoffer avec le temps.

Le framework est téléchargeable depuis le site internet de Vaadin. Ils fournissent également des artifacts Maven directement disponibles dans le repository central Maven.

Et ça marche ?

Comme je devais développer une interface d'administration et de gestion, j'ai décidé pour rendre le développement un peu plus fun en utilisant Vaadin. Après plusieurs semaines de développement (pas très intensives ;)), voici un premier retour d'expérience.

À titre d'exemple, voici ce que j'ai pu réaliser :

 

Intégration avec Spring et Hibernate

L'intégration avec ces 2 autres frameworks se fait sans trop de problèmes. Vaadin maintien un projet exemple Spring/JPA à partir duquel je me suis basé (http://vaadin.com/wiki/-/wiki/Main/Spring%20Integration). L'exemple fournit une servlet faisant le lien entre Spring et Vaadin. Le reste étant de la configuration de Spring.

Dans mon cas l'intégration avec Hibernate a été relativement simple puisque c'est de la configuration Spring. Cependant, on retombe toujours sur le problème des LazyLoadingExceptions. La technique pour résoudre le problème est la même que celle utilisée avec les autres framework, on utilise le filtre OpenSessionInView de Spring.

Le framework propose, en incubation, un composant fortement couplé à Hibernate permettant d'avoir des tableaux à chargement dynamique. Je n'ai pas testé ce composant.

Composants UI

Vaadin est quand même là pour développer des interfaces riches utilisables dans un navigateur. Tout le code étant exécuté côté serveur, on se retrouve à développer une application comme s'il s'agissait d'une application desktop. C'est le framework qui s'occupe des échanges clients/serveur en Ajax.

Par contre comparé à d'autres framework comme ExtJS ou Flex, il manque encore pas mal de composants. Par exemple un TreeTable. Mais la base est là pour commencer à développer une interface riche. Toujours comparé à ces mêmes frameworks, on n'a pas besoin d'apprendre un nouveau langage et de gérer les échanges entre le serveur et le client. Ce qui est quand même un gros plus.

Vaadin propose un plug-in Eclipse permettant de construire visuellement des interfaces. Malheureusement, je n'ai pas réussi à le faire fonctionner correctement. De toute façon une fois qu'on commence à connaitre l'API, on n'en a plus vraiment besoin.

Databinding

Une des forces de Vaadin réside dans l'API de Databinding. Le framework est capable de construire automatiquement un formulaire en fonction d'un Bean qui lui est passé en paramètre. Dans les faits c'est un peu plus compliqué que ça à gérer. Mais une fois les quelques classes de bases permettant de faire la glue de façon générique, ça fonctionne parfaitement.

Âpres on est capable, par exemple, de construire simplement des vues Master/Details en seulement quelques lignes de codes.

Les autres fonctionnalités

Le framework propose plusieurs autres fonctionnalités que je n'ai pas encore eu le temps de vraiment tester.

Il est possible de transformer simplement une application Vaadin en portlet et de l'intégrer dans Liferay.

Le framework permet également de créer de nouveaux composants réutilisables. C'est possible de deux façons différentes :

  • soit on assemble des composants prédéfinis (comme j'ai pu le faire pour les vues marster/details)
  • soit on crée un composant à partir de GWT

Vaadin fournit aussi la possibilité de créer des thèmes (qu'on peut même changer à la volée) pour modifier l'aspect complet de l'interface. Je n'ai pas encore essayé, mais ça ne devrait pas être très complexe vu que c'est des CSS.

Conclusion

Vaadin est un framework encore un peu jeune, mais il permet de développer de puissantes interfaces riches en très peu de temps.

Je pense que son intégration dans Liferay va lui apporter une meilleure visibilité et une adoption rapide de la part de développeur. Certains des composants ou fonctionnalités manquants doivent apparaitre dans la prochaine version majeur (prévue pour fin mars).

Et vous avez-vous déjà utilisé ce framework ? qu'en pensez-vous ?