JHipster, le générateur Yeoman pour les projets Spring Boot/Angular, a présenté sa version 2.0 début janvier qui propose des changements notables :
- Le code AngularJS a été modularisé, ce qui rend l'utilisation de JHipster plus simple sur les gros projets.
- Liquibase permet à présent de gérer des "diffs" entre le mapping JPA et la base de données, ce qui simplifie les mises à jour du schéma.
JHipster est un projet Open Source qui simplifie la création de projets basés sur un client AngularJS et une API gérée par Spring Boot. Créé par Julien Dubois, expert Java et auteur français, JHipster s'appuie sur Yeoman pour créer le projet et pour générer le code.
JHipster propose à l'utilisateur différents choix lors de la création initiale du projet. Sa stack technique est vaste, basée sur des frameworks fondamentaux et un certain nombre d'options.
Les frameworks fondamentaux et les outils :
- Spring Boot
- Spring Security
- AngularJS
- Bootstrap
- Bower
- Metrics
Les options disponibles pour les projets :
- Java 7 ou Java 8
- Maven ou Gradle
- Mode d'authentification : par cookie ou par OAuth2
- Type de base de données : SQL ou NoSQL
- Cache : EhCache ou Hazelcast
- Support des WebSockets
- Grunt ou Gulp.js
Quoi de neuf dans JHipster v2.0 nous fournit quelques détails complémentaires :
- ui-router est le nouveau routeur AngularJS.
- L'anglais et le français sont installés par défaut pour le i18n. 11 langages supplémentaires sont supportés et simples à installer.
- L'ensemble des commandes qui proviennent du générateur Yeoman pour AngularJS fonctionne maintenant avec JHipster.
- Migration de Atmosphere vers Spring WebSockets.
- Ajout d'un reporter Spark pour Metrics.
- Les statistiques d'utilisation sont gérées avec Insight.
InfoQ a rencontré Julien Dubois pour discuter de cette nouvelle version et de JHipster en général (Interview réalisée en janvier).
InfoQ : Comment t'es venue l'idée de créer JHipster ?
Je travaillais pour un gros site d'e-commerce où les développeurs utilisaient Grunt et Ant, ce que je considère comme une idée élégante. A cette époque, je voulais explorer de nouvelles technologies, telles que AngularJS et Yeoman, et les associer avec Spring, qui était ma stack back-end favorite. Je n'avais pas d'autre prétention que de prendre du plaisir avec des technologies que j'aimais et de voir comment les associer.
InfoQ : Peux-tu nous faire un retour d'expérience sur Yeoman pour la génération de code ?
J'ai trouvé Yeoman excellent. L'outil est très simple à utiliser et à prendre en main. Je suis toujours surpris par la vitesse de développement qu'il me permet d'atteindre. Etant donné qu'il est simple à prendre en main, il nous permet d'avoir un grand nombre de contributeurs, qui nous ont énormément aidé à améliorer le projet.
InfoQ : Quel a été le composant le plus complexe à maintenir dans JHipster ?
Certains composants sont bien sûr plus complexes que d'autres, mais finalement, notre principale problématique est que nous avons un nombre important de combinaisons de composants. Une application qui utilise Maven, Java 7, de l'authentification statefull et PostgreSQL, est très différente d'une application qui utilise Gradle, Java 8, OAuth 2.0, MongoDB, des WebSockets, ... Je suis heureux de constater que notre base de code demeure relativement propre, et qu'elle est moins complexe à maintenir qu'elle pourrait paraître. Mais lorsque je veux tester toutes les combinaisons, cela prend un temps fou.
InfoQ : La version 2.0 permet de recueillir des statistiques (après approbation) sur les choix de l'utilisateur. Quelles sont les tendances que vous observez dans la création de nouvelles applications à l'aide de JHipster ?
Je me permets d'ajouter que ces statistiques sont bien évidemment totalement anonymisées.
Ces statistiques sont très importantes pour nous. Elles nous permettent de savoir ce qui est utilisé et populaire, afin que nous concentrions nos efforts sur les bons composants et que nous abandonnions les autres.
Dans le mesure où ces statistiques ne sont disponibles que depuis la v2.0, nous disposons uniquement d'une semaine de données (à l'heure de l'interview) provenant de développeurs qui sont à la pointe et qui ont autorisé l'envoi des statistiques. Voici nos résultats les plus intéressants, basés sur 1 200 projets générés :
- Nos utilisateurs sont basés partout dans le monde, les cinq pays les plus représentés sont les États-Unis, la France, la Suède, la Chine et le Royaume-Uni.
- 72% de nos utilisateurs utilisent Java 8, contre 28% pour Java 7 - il sera intéressant de suivre cette évolution dans le futur.
- 58% des utilisateurs utilisent la base en mémoire H2 pour développer - ce que je trouve élevé, vu qu'ils ne bénéficient pas ainsi de notre cible Maven "liquibase:diff".
- Seulement 8% utilisent MongoDB.
- Le cloud le plus populaire est Heroku, suivi de CLoud Foundry et personne n'utilise OpenShift.
- 75% des utilisateurs utilisent la version standard de Spring Secruity basée sur les sessions HTTP.
- Moins de 2% des utilisateurs travaillent avec Compass, qui est donc un bon candidat pour la dépréciation.
InfoQ : Que pensez-vous de l'absence de compatibilité ascendante de Angular 2.0 ?
Je pense que l'annonce qui a été faite par l'équipe AngularJS n'a pas été très habile. D'un autre côté, je comprends qu'ils aient besoin d'avancer, ce qui implique de casser des choses. Je pense que les développements logiciels actuels ne sont pas conçus pour durer 10 ans, donc ça ne me perturbe pas plus que ça.
InfoQ : Est-ce que JHipster migrera pour supporter Angular 2.0 ?
Supporter AngularJS 2.0 devrait être assez simple, c'est un peu comme notre version actuelle qui supporte à la fois Java 7 et Java 8. Au fond, il s'agit simplement de conditions dans notre code dédié à la partie front-end, je ne suis pas du tout inquiet à ce sujet.
J'attends simplement qu'ils proposent une version suffisamment stable, probablement lorsque les bétas arriveront.
InfoQ : Peut-on utiliser Scala ou Groovy (à la place de Java) dans un projet JHipster ?
Non, nous ne générons pas de code Scala ou Groovy. Bien évidemment, Groovy devrait s'intégrer assez bien dans la mesure où nous utilisons Spring Boot, mais je n'ai pas eu l'occasion d'essayer.
InfoQ : La documentation de JHipster indique que vous supportez Cloud Foundry, Heroku et Open Shift. Avec lequel de ces fournisseurs de cloud a-t-il été le plus simple de travailler ?
Cloud Foundry, sans hésitation. D'une part, leur health manager et leurs agents s’intègrent parfaitement avec nos applications. Je les trouve beaucoup plus avancés que ceux de leurs concurrents. La configuration, basée sur un simple fichier YAML, est elle aussi très simple - jetez un coup d'oeil à mes générateurs de code, la différence est frappante. Enfin, le support de Spring Cloud est très bon : il permet de configurer automatiquement la base de données, vous offre un profil Spring spécifique ... Lorsque l'on sait comment ça marche, c'est en fait très simple et bien fait, ça vous permet d'économiser beaucoup de temps et ça a l'air globalement plus abouti.
InfoQ : Quelle est la fonctionnalité de JHipster que tu préfères ?
J'adore l'entity sub-generator qui permet de générer une interface CRUD complète de la base de données au code AngularJS. Cette fonctionnalité est très puissante, elle génère le code boilerplate pour vous, en se basant sur vos options, et produit un code modulaire et simple à modifier.
Il s'agit probablement de notre killer feature, dans la mesure où, si vous l'utilisez correctement, vous pouvez générer l'essentiel de votre code orienté données en quelques minutes.
InfoQ : Un conseil pour les futurs utilisateurs de JHipster ?
Le meilleur point d'entrée est notre site web : http://jhipster.github.io/, où vous trouverez beaucoup de documentation. Dès que vous aurez généré votre premier projet, vous pourrez rentrer dans le code, et bien sûr en apprendre plus sur Spring Boot et AngularJS, qui sont nos principaux frameworks.