Spring n’est plus à présenter, c’est un puissant framework qui a fait ses preuves depuis 2002, faisant de lui un environnement très pointu et parfois complexe à paramétrer, heureusement pour les débutants, Spring Roo intervient pour faciliter la tâche.
Présentation
Spring Roo est avant tout un outil de développement rapide en ligne de commande qui permet de faire gagner un temps précieux aux développeurs d’applications basées sur Spring.
Il vous aide à gérer l’infrastructure et le paramétrage de l’application développée, mieux encore, Roo est un outil intelligent et qui vous guidera pas-à-pas dans la conception de votre application en utilisant les deux commandes magiques « help » et « hint »
Il autorise également l’utilisation de la touche « tab » qui aura pour effet de compléter automatiquement vos commandes à la manière d’un shell linux ainsi que la combinaison des touches « Ctrl+Space » bien connue des utilisateurs d’eclipse pour visionner les combinaisons possibles.
Spring Roo permet de rapidement créer un projet en utilisant les bonnes pratiques, un programmeur java retrouvera ses marques via l’utilisation des technologies les plus connues comme Spring Framework, SpringSecurity, Spring Web Flow, Maven, Java Server Pages (JSP), Java Persistence API (JPA), AspectJ.
L’appel aux différentes commandes de Roo fait de votre projet, un projet incrémental, vous pouvez à tout moment ajouter ou enlever des technologies.
Installation de Spring Roo
L’installation et l’utilisation de Spring Roo peut se faire de deux manières:
-Soit en installant l’outil seul via ses sources, attention que cela nécessite l’installation de Maven.
-Soit en utilisant une version d’eclipse dédiée à Spring munie du plug-in Roo par défaut et qui se nomme Spring Tool Suite. L’installation de Spring tool suite étant plus simple, nous privilégierons cette méthode.
Utilisation de l’outil
Je ferais une démo en créant une rapide application, pleins d’exemples sont disponibles ici
Une fois décompressé, vous pouvez lancer l’exécutable nommé STS.
Créez un workspace
Créez un nouveau projet
Définissez les paramètres du projet (top level package)
Opération réussie
La structure de votre projet est créée automatiquement
On remarque tout de suite que c’est un projet maven avec la présence d’un fichier pom.xml.
L’environnement en ligne de commande s’ouvre
Lancez la commande « hint »
Roo va ensuite vous guider pour construire votre projet, vous ne serez jamais en panne d’inspiration lors du lancement des différentes commandes.
La première étape consiste à ajouter une API de persistance, pour rappel, JPA est une couche supplémentaire au-dessus de JDBC qui va permettre de manipuler les données sous forme d’objets.
Entrez « jpa setup » et utilisez « ctrl + espace » pour visionner les différentes combinaisons possibles. Remarquez qu’il est possible d’afficher les commandes déjà entrées avec les flèches haut et bas.
Construisez la commande suivante et pressez « enter »
roo> jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
Vous venez d’ajouter les fonctionnalités d’hibernate ainsi qu’une base de données gérée en mémoire (utilisée uniquement à titre de test), Spring Roo ajoute automatiquement toutes les dépendances JAR nécessaires à l’exécution de l’application.
Il y a plusieurs fournisseurs JPA pour mapper les objets relationnels
Différents types de base de données sont aussi supportés, n’oubliez pas que si vous utilisez une base de données non libre comme oracle, il vous faudra installer le driver manuellement dans votre référentiel maven local :
shell> mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.2 -Dpackaging=jar -Dfile=/chemin_vers_le_fichier_jar
L’étape suivante consiste à créer des entités, l’idée de cette démo est de créer une interface qui va gérer des tiers, lancez la commande :
roo> entity jpa --class ~.domain.Customer
Le tilde (~) représente la racine de votre package précédemment créé, Spring Roo se positionne automatiquement sur la dernière entité créée.
Vous venez donc de créer une entité « Customer » vide qui va vous permettre par la suite de manipuler les données de la table s’y rapportant. L’objet Customer.java va en fait contenir toutes les méthodes CRUD nécessaires à la gestion des données clientes.
Notez au passage la génération de fichiers AspectJ (.aj), ces fichiers sont en fait toute la puissance de Spring Roo, en effet, ce sont eux qui sont garants de la maintenance et l’évolution de votre application, ils sont dynamiques, il ne faut donc pas les éditer directement.
AspectJ est connu pour faire du développement « orienté aspect » en définissant des points d’entrée dans vos programmes, ici, il agit avec la fonctionnalité de déclaration de type (ITD). Vous allez coder les membres (méthodes, champs, etc…) et prendre le contrôle sur le cycle de vie des fichiers java sans vous souciez de leur contenu mais vous pouvez à tout moment les éditer manuellement.
Créez ensuite les champs de cette nouvelle entité « Customer » (mappé avec la table des clients)
Créons ensuite les champs firstname (caractère), name (caractère), age (entier), street (caractère), postal (caractère) et city (caractère).
Voici les commandes utilisées:
roo> field string --fieldName firstname roo> field string --fieldName name roo> field number --fieldName age --type int roo> field string --fieldName street roo> field string --fieldName postal roo> field string --fieldName city
Le résultat dans la console donne l’évolution de nos fichiers dans le workspace
On remarque que l’entité Customer se voit enrichir de nouvelles variables d’instance
Validation
Après avoir créé ces six champs, on peut se demander « quid de la validation ? », les champs étant de type string, il est possible d’encoder tout et n’importe quoi.
Spring Roo va plus loin en proposant une validation javabean issu de la JSR303 du Spring Framework via des annotations vous allez limiter les erreurs de saisies en forçant une plage à l’utilisateur.
Il sera possible de saisir une adresse mail unique, de mettre une plage de 0 à 120 pour l’âge, de forcer l’encodage d’une date dans la passé pour une date de naissance, etc…
Ajoutons le champ « email » avec la commande suivante :
roo > field string --class ~.domain.Customer --fieldName email –unique
Nous allons aussi modifier le champ « age », il suffit de supprimer la variable d’instance dans le fichier Customer.java et de relancer la commande :
roo> field number --fieldName age --type int --min 0 --max 120
Pour info, quelques options supplémentaires pour la création des champs, pour connaitre la liste complète lors de la saisie, tapez « — » puis Ctrl-Space
Option | Définition | Type |
–min | Valeur minimum | Numérique |
–max | Valeur maximum | Numérique |
–past | Doit être dans le passé | Date |
–future | Doit être dans le futur | Date |
–notNull | Ajoute une contrainte d’unicité | Tous |
–nullRequired | Doit être null | Tous |
–sizeMax | Taille maximum | Caractère |
–sizeMin | Taille minimum | Caractère |
–regEx | Expression régulière de validation | Caractère |
Montez l’échafaudage
L’étape suivante est d’exposer vos entités à un contrôleur web, c’est la technique de l’échafaudage introduite par ruby on rail (ou scaffolding en anglais).
Lancez la commande
roo> web mvc setup
Toute une série de fichiers sont ensuite générés pour créer la couche web de votre application, la génération utilise des technologies comme Apache Tiles, Spring JavaScript.
Finalisez en lançant la commande ci-dessous pour finaliser le paramétrage, le nom du package étant celui que vous avez défini au début de cette démo.
roo> web mvc all --package org.easybi.domain
Lancement de l’application
Retournez ensuite dans le répertoire de votre workspace, positionnez-vous dans le répertoire du projet demo pour retrouver le fichier pom.xml et lancez l’ultime commande:
shell> mvn tomcat:run
Lancez ensuite un navigateur web et entrez l’adresse http://localhost:8080/demo
Votre nouvelle application s’affiche
Il est maintenant possible de manipuler des clients, vous pouvez en créer via le menu « create new customer »
Vous pouvez ensuite les lister/modifier/supprimer avec le menu « List all customers »
Conclusion
Un outil intuitif pour développer rapidement des applications Java EE, si vous êtes débutant, il vous permettra de comprendre et d’étudier le fonctionnement de Spring, pour les plus expérimentés, il est évident que Spring Roo permettra uniquement de construire les bases d’un projet afin d’augmenter leur productivité pour ensuite reprendre la main et affiner les fonctionnalités.
Toutes les possibilités ne sont pas montrées dans cet article tellement celles-ci sont nombreuses voir même infinies, il est aussi possible de créer des add-on. Je vous invite à lire la documentation qui s’avère être très complète.
Attention de bien utiliser la version 1.2.5 de la documentation dont je me suis basé pour écrire cet article car certaines commandes notamment pour créer un contrôleur MVC sont notées comme « deprecated ».