J’ai testé pour vous: Spring ROO

21 Jan


Pour cela, il va falloir:

Le plus simple étant de télécharger la mouture d’Eclipse contenant le package SpringSource complet(Spring , Spring ROO, les serveurs etc…).

N’oubliez pas d’ajouter dans le path le chemin vers le répertoire bin de l’installation de Spring ROO, pour l’utiliser en ligne de commande.

Pour faire mes tests, je vais fabrique une webapp permettant de gérer des projets avec une liste de tâches dans celui-ci, et des semaines de réalisation de ces tâches par des utilisateurs, remplissant pour chaque jour de la semaine des tâches sur n’importe quel projet. Évidemment, l’application sera très simpliste, Spring ROO ne pouvant pas deviner les règles de gestion à implémenter…Le projet s’appellera « weekTaskManager »:


Une bien belle application...


Création du projet sous Eclipse

Une fois un workspace créé et Eclipse démarré, il faut faire File > New > Other > Spring Source Tool Suite et Roo Project


Création de projet Spring ROO sous Eclipse


Là, donnez un nom puis un package racine puis faire « Finish ».

La console Roo qui va être utilisée pour lancer les commandes pour créer les classes et les champs est dans une vue (sinon, Window > Show View >Spring Tool Suite > Roo Shell):


la console ROO


C’est avec des lignes de commande que tout le socle du projet va être créé.

Pour tester, la base Hypersonic sera utilisée. Il sera possible de la changer ultérieurement. C’est la première commande à lancer dans la console Roo:

roo>persistence setup –provider HIBERNATE –database HYPERSONIC_IN_MEMORY


Le fichier de propriétés de connexion


Création du CRUD

  • création des tâches, qui vont simplement contenir une description:

roo>entity –class ~.domain.Task –testAutomatically

~.domain.Task roo> field string –fieldName description –notNull –sizeMin 10

  • création des utilisateurs, qui vont simplement avoir un nom:

~.domain.Task roo> entity –class ~.domain.AppliUser –testAutomatically

~.domain.AppliUser roo> field string –fieldName name –notNull –sizeMin 10

  • création des tâches, qui contiennent une référence vers un user, une tâche et une temps passé sur celle-ci à une date donnée:

~.domain.AppliUser roo> entity –class ~.domain.TaskDate –testAutomatically

~.domain.TaskDate roo> field reference –fieldName appliUser –type ~.domain.AppliUser

~.domain.TaskDate roo> field reference –fieldName task –type ~.domain.Task

~.domain.TaskDate roo> field number –fieldName elapsedTime –type java.lang.Float

~.domain.TaskDate roo> field date –fieldName realeaseDate –type java.util.Date

  • création des semaines qui vont être contenir une année, un numéro de semaine et une collection de dates:

~.domain.TaskDate roo> entity –class ~.domain.Week –testAutomatically

~.domain.Week roo> field number –fieldName weekNumber –notNull –sizeMin 1 –sizeMax 2 –type java.lang.Integer

~.domain.Week roo> field number –fieldName weekYear –notNull –sizeMin 2 –sizeMax 4 –type java.lang.Integer

~.domain.Week roo> field set –fieldName weekTaskDates –element ~.domain.TaskDate

  • pour finir, nos projets, qui vont avoir une description et une collection de tâches:

~.domain.Week roo> entity –class ~.domain.Project –testAutomatically

~.domain.Project roo> field string –fieldName description –notNull –sizeMin 10

~.domain.Project roo> field set –fieldName tasks –element ~.domain.Task

donc: « reference » pour un lien objet simple, avec « –type » pour le type d’objet et « set » pour une collection d’objets avec « –element ».

Il faut maintenant tester l’application:

~.domain.Project roo> perform tests

Si tout c’est bien passé, le test doit terminé par un « [INFO] BUILD SUCCESSFUL ». Chouette.

Création de l’interface WEB

Il est alors possible de rajouter la couche web (c’est là que c’est puissant). Simplement, en tapant la commande:

~.domain.Project roo> controller all –package ~.web

C’est fini!

Il suffit d’ajouter le projet à un serveur SpringSource(dans la vue server > SpringSource dm Server et faire clic droit et add/removes et ajouter le projet) puis le démarrer.

L’application est alors démarrée dans l’url http://localhost:8080/weekTaskManager/ et voilà!


Une webapp complète en une ligne de code...


L’internationalisation, la modification des css et autres, ce fait dans le répertoire WEB-INF.

Ajout de la sécurité

Pour cela, il faut utiliser la commande:

~.web roo> security setup

Pour que cela fonctionne et résoudre correctement les dépendances, j’ai du rejouer la commande:

~.web roo> perform eclipse

La sécurité permet de gérer les accès aux répertoires, l’accès aux views et ajouter une fenêtre de login (http://localhost:8080/weekTaskManager/login):


La fenêtre de login


Le déploiement sur un serveur

Pour créer un war, il faut jouer la commande:

~.web roo> perform package

Conclusion

Afin de réaliser un CRUD propre, rapide, joli, basé sur des outils solides (SPRING, HIBERNATE),  des tests automatisés, AJDT, une intégration à Eclipse très réussie etc… je pense que Spring ROO joue bien son rôle, d’autant plus que les commandes sont assez simples (et avec auto-complétion sous Eclipse) et puissantes (je ne peux pas tout présenter dans ce test, y faut que je dorme aussi…). Reste à savoir si retravailler le code est facile. A première vue, cela à l’air le cas, le projet étant organisé de façon carré et le code basé sur des standards. Il faut éviter de se tromper dans les commandes de création de champs et tout se passera bien one shoot!

Pour créer un socle de Webapp java super solide, je pense que c’est le top.

4 thoughts on “J’ai testé pour vous: Spring ROO

  1. Effectivement, ça semble pas mal !

    Par contre, ils pourraient faire un effort sur le plugin Eclipse et développer une GUI pour créer les objets et les champs.
    Car franchement, connaitre les commandes par coeur c’est pas très user-friendly alors que les générer serait hyper facile.

    Tu veux pas nous faire un plugin Eclipse là dessus adrien ?? 😉

    a+

  2. Hello,

    Spring ROO est intéressant pour du RAD mais nécessite un très grand travail en amont sur le modèle de données. La syntaxe étant assez complexe lors de la création des FK ou bien seulement, lors de la mise à jour du modèle.
    Le bootstrapping est un grand point de ROO.
    Pour ma part, nous somme passés sur MyEclipse For Spring qui est largement plus abouti d’une point de vue GUI et sur les possibilité de générer une webapp pour différent environnements (iphone, Google GWT ou Spring WebFlow). Bien évidemment, il y a toute la création du Bootstrapping, Scaffolding et CRUD de la Webapp. Un gros plus, vous pouvez créer vos propres templates de génération.
    Bémol toutefois, MyEclipse for Spring est payant (99€), mais très vite amortie pour une société.

    A+

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *