lundi 21 juillet 2014

Survol de la fonderie à application : Forge2 de JBoss

Pourquoi Forge2


     Pour la petite histoire je ne suis pas un grand fan du code généré. Les théories et outils autour des DSL (Domain Specific Language), DDD (Domain Driven Design) bien qu'intéressant ont peu croisés ma route de manière directe lors de mes projets. Par contre j'ai bien croisé quelques outils UML liés à du code généré mais je m'en suis très rapidement écarté (trop lourd à faire tourner, peu maintenable, difficulté à faire évoluer sur des problématiques orthogonales).

J'en garde tout de même deux en tête  :
     Donc sans grande conviction j'ai assisté à une présentation du produit Forge2 de JBoss. Au final après la présentation, je suis passé de "sans conviction" à "A tester, pourrait bien répondre à quelques use cases".

Pourquoi à tester ? 


  • Forge2 reste un outil et ne se veut pas la solution à tous les problèmes : il génère du code et des structures projets
  • Forge2 est ouvert et extensible par addOn. Il peut donc ainsi bénéficier des apports d'une communauté de développeurs et c'est bien souvent éléments clé.
  • Forge2 est scriptable (fichier .fsh) et il ouvre une API permettant d'interagir avec le moteur via du code Java.
  • Forge2 reste basé sur les standards JEE, Maven (pas de configuration propriétaire, pas de systèmes runtime en surcouche, ...)

Pour quelles utilisations


     Java est au delà un langage orienté objet un langage orienté Framework, comme le notait Neal Ford dans son article :
"in the Java world that I've started saying that we should stop referring to Java programming as an object-oriented language and should call it a framework-oriented language".

     L'écosystème Java foisonne de Frameworks pour divers besoins, dont certains finissent par être intégrés dans les specs (JSR) et deviennent des standards. Bien que rendant l'écosystème très riche (voir le nombre de frameworks forkés dans d'autre langages) il reste que le ticket d'entré pour se ballader au sein de cette galaxie d'API, normes, ... est parfois un peu chère.

     Un exemple concret de cette difficulté : commencer un projet Web from scratch avec du JPA, du REST, ... peut s'avérer compliqué si l'on ne maîtrise pas bien toutes ces spécifications (où si l'on ne s'est pas mis à jour récemment).

     Ainsi un use case que l'on rencontre régulièrement : initialiser un projet

Quelques manières de faire :
  • Tâtonner en jonglant avec plusieurs tutoriaux (pas toujours à jour). Ceci peut être long.
  • Reprendre une ossature de projet faisant sensiblement la même choses pour avoir les charnières qui vont bien. On trouve pas toujours le pattern idéal.
  • Utiliser les wizards à disposition. Pas toujours la solution la plus heureuse en raison de l'interprétation/implémentation du context assez spécifique au wizard.
  • Enfin une de mes préférées : utiliser un maven archetype (http://maven.apache.org/guides/introduction/introduction-to-archetypes.html)
Forge2 peut être vue comme une alternative aux solutions précédemment citées.

     Rapidement d'autre use cases pouvant être rempli en utilisant Forge2 :
  • Réalisation d'un poc
  • Toute application CRUD simple
  • Reprise d'une base de données existante pour voir ce qu'elle a dans le ventre
  • Définir des templates de projet via les scripts fsh permettant d'encore accélérer le démarrage d'un projet et d'avoir des structures un peu normées.

Premiers pas avec Forge2


Récupérer un Eclipse Luna (4.4)
https://www.eclipse.org/downloads/

Récupérer un jdk8 (8u5 last release)
http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteId=otnjp

Installer les plugin Eclipse (update site) qui vont bien
JBoss Tools Usage Reporting plugin : http://download.jboss.org/jbosstools/updates/development/luna/
La dernière version de Forge2 (pour aller avec Luna et jdk8) : http://download.jboss.org/jbosstools/builds/staging/jbosstools-forge_master/all/repo/

Si l'on ne souhaite pas rester dans Eclipse, on peut aussi récupérer le Zip Forge2 et l'utiliser en dehors de tout EDI.

Premier projet avec Forge2 et Eclipse


  • Ouvrir la view console Forge (disponible grâce au plugin)
  •  Start de la console
  • A partir de là on peut utiliser les lignes de commande (TAB pour avoir les commandes disponibles et arguments nécessaires). 
  • Un premier projet commencera par exemple par "[LunaWorkspace]$ project-new --named ForgeDemo --topLevelPackage org.test.forge.demo --type war"

Quelques liens de référence


La présentation à laquelle j'ai assisté (présenté par Antonio Goncalves)
"30 minutes pour développer une appli Java EE ?"
http://www.parleys.com/play/535e1643e4b03397a8eee8ce/chapter0/about

Le site Forge : http://forge.jboss.org/
Le gitHub : https://github.com/forge

posts et tutos sur le sujet

Les sujets pour aller plus loin



Ma conclusion


     Assez intéressé pour avancer sur le sujet au travers les use cases décrit plus haut si ils se présentent mais quand même un peu de pratique nécessaire pour bien connaitre les lignes de commandes et les possibilités de l'outil.

     Encore un petit manque de documentation sur le web et pas toujours facile de voir si le tuto concerne Forge ou Forge2. J'ai essayé d'approfondir sur Furnace, mais je pense qu'il va falloir mettre les mains dans le code pour bien comprendre le container, les API et le fonctionnement des addOn.

     Pas pour toute les utilisations, je ne me vois pas définir tous mes attributs un à un avec l'outil pour tout le code de mon projet (en même temps c'est là que le scripting intervient).

     Pas l'impression que je puisse adresser du refactoring ou prendre facilement la main sur un projet existant, l'expérience me le dira.

Aucun commentaire:

Enregistrer un commentaire