mercredi 6 mai 2009

Introduction à Spring ROO

Spring ROO, le nouveau framework de chez SpringSource, a été officiellement annoncé durant SpringOne 2009.

ROO est une sorte de Ruby On Rails pour Java. Ceux qui n'ont pas voulu essayer Grails à cause de l'obligation d'apprendre un nouveau langage (Groovy) vont donc être ravis!

Cette solution s'appuie comme d'habitude chez Spring sur des technos open source, à savoir Hibernate, Spring IOC et Spring MVC. Le framework permet de créer des entités JPA en ligne de commande (ou à la main si on préfère les coder directement) et de générer les CRUD à partir de ces entités. Vous aurez donc directement vos pages Web et vos services pour lister et modifier vos objets métiers.

Tout comme ses cousins Grails et Ruby on Rails, ROO s'appuie sur le paradigme "convention over configuraiton", ce qui a pour effet un gain de temps immédiat dans la création de votre application.

Nous allons voir tout de suite comment générer une mini application avec ROO.

La version alpha 2 de Spring ROO peut être téléchargée ici.

Dans la suite de cet exemple Maven 2 devra être installé sur votre poste.
Nous allons d'abord créer une variable d'environnement ROO_HOME sur notre machine de développement et dézipper l'ensemble de la distribution téléchargée dans ce répertoire.

Ensuite nous laçons la commande suivante pour installer dans le repository local certaines librairies dont on aura besoin (tout n'est pas encore disponible dans les répo Maven) :

mvn install:install-file -DgroupId=org.springframework.roo
-DartifactId=roo-annotations -Dversion=1.0.0.A2 -Dpackaging=jar
-Dfile=%ROO_HOME%/dist/roo-annotations-1.0.0.A2.jar
Après avoir ajouté le répertoire ROO_HOME/bin au PATH, on peut lancer le shell ROO en tapant la commande 'roo' dans une console depuis le répertoire où l'on veut créer le nouveau projet.

Une fois dans le shell ROO, la commande 'hint' permet d'avoir une petite aide.
Cette commande permet de générer le squelette de notre projet WEB, configuré avec Maven :

create project -topLevelPackage fr.coffeebean.films











La commande suivante permet d'installer une base de donnée embarquée dans le projet Java :


install jpa -database HYPERSONIC_IN_MEMORY -provider HIBERNATE


Nous allons ensuite créer notre entité (ici il n'y en a qu'une mais on pourrait bien sûr en créer plusieurs) :



new persistent class jpa -name ~model.film
add field string -fieldName titre
add field date jpa -fieldName dateSortie -type java.util.Date
add field string -fieldName realisateur


puis le contrôleur de notre application :

new controller automatic -name ~.control.FilmController

Le symbole ~ signifie qu'on se place dans le package topLevelPackage définit dans la première commande.

Et voilà on a créé une petite application de gestion de films!

Vous pouvez bien sûr ouvrir le code source généré pour voir comment l'application est construite, et pourquoi pas apprendre au passage quelques techniques de développement Spring/AspectJ/Hibernate!

Il ne reste plus qu'à sortir du shell ROO par la commande 'exit' et lancer la commande 'mvn install' pour obtenir un war de notre application.

L'application générée se présente comme ça :

  • Une page d'accueil











  • Un écran pour ajouter des films (observez au passage le joli composant javascript de gestion des dates!)











  • Un écran pour lister les films existants










Évidemment, il est possible de faire des choses plus complexes, par exemple en utilisant la composition d'entités, une entité pouvant contenir une ou plusieurs autres entités.
Il suffit pour cela de spécifier un type créé auparavant dans la console au moment où l'on crée son entité, au lieu de spécifier un type prédéfini.

Voilà, j'espère que cette petite introduction vous aura donné envie de vous amuser un peu avec Spring ROO et de découvrir ses concepts plus en profondeur!