SpringFuse, un générateur intéressant ?

Pour mon premier article, j’ai décidé de vous présenter SpringFuse. Pourquoi ? En fait, je suis récemment rendu à une conférence sur le générateur de code SpringFuse et je me suis dit :

« Pourquoi ne pas faire découvrir à ceux n’ayant pas eu la chance d’assister à cette conférence ce qu’est cet outil ?».

Je tiens à souligner que cet article est avant tout un article « découverte », je ne rentrerai donc pas aujourd’hui dans les détails. Cependant, je pense creuser un peu plus durant les mois à venir. Je posterai donc très probablement d’autres articles sur cet outil.

Mais alors, qu’est-ce que c’est ?

SpringFuse est un générateur de code Java 1.6 (1.7 dans les prochaines releases). Il permet, entre autre, de générer du code Java représentant votre modèle de données ainsi que vos DAO (Data Access Object) et vos services. Il peut aussi générer des tests unitaires.

Mais sur quoi se base-t-il ?

SpringFuse s’appuie sur la base de données de votre application. Pour générer au mieux le code de votre application, il va utiliser plusieurs technologies du marché actuel ainsi que sur Celerio développé par l’éditeur Jaxio. Parmi les différentes technologies utilisées, voici une liste non exhaustive des plus connues.

  • Spring, framework pour la construction d’applications Java,
  • JPA 2, utilisé pour tout ce qui est persistance,
  • Spring Security, qui est un module de Spring pour la gestion de la sécurité,
  • Maven 2, pour la gestion de votre projet Java.

Il est pour le moment possible de générer 3 types de projets :

  • On peut générer un projet utilisant Spring Web Flow (utilisé pour la gestion de flux, notamment pour tout ce qui est formulaire) et JSF pour la vue,
  • On peut également générer un projet utilisant Spring MVC et JSP,
  • Enfin, si vous voulez utiliser une autre technologie pour gérer la vue, il est possible de générer seulement le back-end de votre projet.

Pourquoi l’utiliser ?

Pour le moment, je n’ai utilisé aucun autre générateur de code. Par conséquent, il est pour moi encore très difficile de conseiller celui-ci plutôt qu’un autre. Cependant, voici quelques points me paraissant intéressant :

  • Le code produit est relativement propre et compréhensible,
  • Les développeurs de SpringFuse s’efforcent d’utiliser les meilleures technologies du moment,
  • Il est grandement configurable,
  • Il est facile à utiliser,
  • Il a un taux de mise à jour important, apportant sans cesse de nouvelles améliorations (changel-log.html).

On peut utiliser cet outil pour une application bancaire par exemple. Via l’intégration de Spring Security, le développeur a la base de la sécurité de l’application, il faut bien entendu ensuite renforcer celle-ci mais les fondations sont là. De plus, les tests unitaires de l’application sont déjà fournis. Par conséquent, le développeur peut plus facilement gérer la non régression de celle ci.

Il peut être aussi utilisé pour faire des prototypes. En effet, ici, le développement de la partie « basique », c’est à dire ce que génère SpringFuse, n’est pas la première préoccupation des développeurs. On peut donc partiellement exclure cette partie que l’on peut qualifier de répétitive grâce à ce générateur.

Enfin, un dernier petit exemple. Si vous êtes tous simplement débutant dans les technologies JEE, vous pouvez utiliser ce générateur afin d’avoir des exemples concrets par rapport à votre projet personnel plutôt qu’un exemple sur le net qui peut être insuffisant.

Ajoutons à cela la problématique de l’entreprise : Le temps. On vit dans un monde où le temps est important, et ici l’expression « le temps, c’est de l’argent » prend tout son sens.
Cela peut par exemple être une aide au développement pour la migration d’anciennes applications. Ce genre de projet est souvent coûteux pour l’entreprise et cela explique (dans certains cas) que certains projets n’ont pas été migrés depuis 10, 20 ou 30 ans car trop complexe et/ou trop coûteux. Avec ce genre d’outil, le coût de développement peut être beaucoup moins important même si cet outil ne suffit certainement pas pour certaines applications très complexes. Cependant, vous aurez au final la “tuyauterie” de votre application, une base solide. A vous ensuite de personnaliser le code pour peaufiner les règles métiers, en ajouter d’autres, etc. et tester votre code via les tests unitaires fournis. SpringFuse intègrera bientôt Sélénium 2 permettant d’effectuer des tests fonctionnels pour votre application.

Seul petit bémol, le serveur ne génère qu’une seule application n’utilisant pas le mode multi-projet de Maven. C’est à vous de découper.

Je suis intéressé, de quoi ai-je besoin ?

Pour pouvoir utiliser au mieux SpringFuse, il est impératif d’avoir trois choses :

Et c’est tout ! (enfin je vous conseille Eclipse pour visualiser le code généré)

Le fonctionnement

Pour pouvoir générer un projet, il faut passer avant tout par une phase de configuration. Il existe une phase de configuration simple et une phase de configuration avancée. Je ne vous parlerai que de la phase simple et reviendrai dans un autre article sur la configuration avancée passant par différent fichiers XML.

Via un formulaire où l’on va renseigner diverses informations dont :

  • Le nom de notre projet,
  • Le moyen d’accès à notre base de données,
  • Le type de projet que l’on va générer

    Screenshot du formulaire SpringFuse

    Formulaire pour la génération du code disponible sur http://www.springfuse.com/

Après renseignement de tout ceci, une commande Maven est proposée afin de générer et télécharger le nouveau projet.

1
mvn -U archetype:generate -DarchetypeGroupId=com.springfuse.archetypes -DarchetypeArtifactId=quickstart-embedded-db-with-configuration -DarchetypeVersion=3.0.68 -DgroupId=com.excilys.lab -Dpackage=com.excilys.lab -DartifactId=excilysLab -Dversion=1.0.0 -DfrontEnd=springMvc -Demail=toto@tata.com -DinteractiveMode=false -DarchetypeRepository=http://maven2.springfuse.com/

On peut remarquer que les informations insérées dans le formulaire sont présentes dans la commande et seront envoyées au serveur.
Lorsque celle-ci est exécutée dans votre terminal préféré, le serveur de SpringFuse va recevoir les informations (les métadonnées) de votre base de données et va générer le code correspondant au mieux à votre schéma de données par introspection (il existe également un mode démo pour ceux qui seraient seulement curieux et qui ne voudraient pas envoyer les métadonnées de leurs bases). Le code est généré côté serveur, cela peut prendre plusieurs minutes car le serveur :

  • Analyse les métadonnées de la base que vous lui avez envoyée. Plus la base est complexe et plus cela prend du temps,
  • Génère le code de votre application,
  • Génère également les tests unitaires et les exécute ensuite afin de vous envoyer un code correct.

Une fois cette phase finie, le code généré est téléchargé et sauvegardé sur votre machine.

Schéma de génération du code par SpringFuse

Processus de génération du code d’un projet

Il est alors possible de travailler à partir du code généré. Il est très facile de l’importer dans Eclipse en utilisant l’option « importer un projet Maven déjà existant » avec le plugin M2eclipse de sonatype. Je vous laisse le soin de faire un test via la démo pour vous faire votre propre idée.

Le mot de la fin

Je pense que SpringFuse n’est certainement pas la réponse à tous les problèmes d’intégration et de traitement de données mais la génération de code peut apporter une grande aide. Le code étant généré de façon à ce que votre application puisse directement se lancer.
Les outils en la matière sont nombreux, il en existe certains transformant du code d’un langage en un autre, d’autres comme celui que je viens de présenter. Leurs applications sont nombreuses et permettent souvent de gagner du temps.
Il existe des générateurs de code dans beaucoup d’autres langages (Java, .Net, PHP, …), le but étant toujours de faciliter le développement de nouvelles applications.
Voilà pour cette petite présentation de SpringFuse. Je vais tenter d’approfondir l’utilisation de cet outil et essayerai de faire d’autres articles dans les prochains mois.

VN:R_U [1.9.22_1171]
Rating: 0 (from 0 votes)
Share
Ce contenu a été publié dans Outils, avec comme mot(s)-clef(s) , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

3 réponses à SpringFuse, un générateur intéressant ?

  1. Intéressant, mais si je comprends bien c’est plus destiné à la migration de projets existants qu’à la création d’un projet from scratch ? Tu parles d’analyser une base de données existante, mais si on part de zéro, y a-t-il moyen de décrire soi-même son modèle de données pour générer le code ?

    Je suis très curieux, mais sur mon projet actuel j’ai eu à développer (refaire un projet PHP en Java en fait) un générateur de code qui à partir d’un modèle décrit dans un fichier XML peut générer tout et n’importe quoi : POJO, DAO, scripts SQL etc. J’attends avec intérêt la suite de tes articles pour voir si SpringFuse aurait pu faire la même chose ;)

    VN:R_U [1.9.22_1171]
    Rating: 0 (from 0 votes)
    • Julien Pladeau dit :

      Disons que oui, effectivement, ce générateur peut être vu comme un générateur pour la migration de projet existant. Cependant, je pense qu’il est possible, via une bonne analyse en amont, de faire un projet from scratch.

      En gros il te suffirait de faire ton schéma entité-association. Après, tu crées ta base de données et ensuite tu génères le code. Je compte en tout cas procéder comme ça pour un projet perso :).

      VN:R_U [1.9.22_1171]
      Rating: 0 (from 0 votes)
  2. Sur le papier, même si la stack générée semble un peu plus up-to-date, ça ressemble furieusement à AppFuse, quand même…
    L’idée de disposer rapidement d’un embryon de départ bien propre sur une stack classique (par opposition à du Grails ou du Play!) est séduisante. Mais de ce que je crois comprendre, la version online ne permet de travailler qu’à partir d’une base de données visible sur internet, sinon, ça devient payant, et là, souvent, ça coince…

    VN:R_U [1.9.22_1171]
    Rating: 0 (from 0 votes)

Laisser un commentaire