JSF dans le Cloud en 30 minutes

Cet article vous propose, en environ 30 minutes, de réaliser et déployer dans le cloud une application JSF2/Spring Webflow/Spring/JPA.

Présentation de l’application

Nous allons utiliser un générateur de code (www.springfuse.com) pour réaliser notre application depuis un schéma de base de données.

Vous pouvez bien entendu utiliser votre propre schéma de base de données, mais pour l’exemple nous nous baserons sur le schéma de l’application Tudu Lists, qui est l’application d’exemple du livre “Spring par la pratique”.

L’application générée va utiliser les dernière technologies disponibles actuellement:

  • JSF 2 avec PrimeFaces, qui est aujourd’hui le meilleur jeu de composants JSF à notre avis
  • Spring Web Flow pour gérer la navigation entre les pages
  • Spring Security pour gérer la sécurité
  • Spring pour gérer la configuration de l’application, les transactions, la couche métier…
  • JPA avec Hibernate pour gérer la couche de persistence

Cette application sera déployée dans le “Cloud”, en occurrence sur la plateforme CloudBees. L’application fonctionnant sur un socle Tomcat “standard”, elle pourrait être déployée sur d’autres Clouds sans modification, par exemple sur Jelastic. Etre indépendant du vendeur de Cloud est particulièrement important pour la pérennité de votre application, ainsi que pour la bonne maîtrise de son coût.

Création de l’application dans CloudBees

Inscrivez-vous sur CloudBees à cette adresse: https://grandcentral.cloudbees.com/account/signup

L’inscription est gratuite, et vous n’aurez pas à donner de numéro de carte bleue (comme c’est le cas sur d’autres plateformes, par exemple Heroku).

  1. Loggez-vous sur https://grandcentral.cloudbees.com/
  2. Ajoutez les services “Applications” et “Database”. (Optionnel: ajoutez également le service “New Relic”, qui vous permettra de monitorer votre application)
  3. Créez une nouvelle application (dans cet exemple nommée “prime”)
  4. Créez une nouvelle base de données (ici aussi dénommée “prime”)

Création de la base de données

Utilisez votre outil préféré de connexion à MySQL (dans notre cas MySQL Workbench, disponible gratuitement ici: http://www.mysql.fr/downloads/workbench/ ) et connectez-vous à la base que vous venez de créer (tous les paramètres sont disponibles via votre compte CloudBees):

Une fois connecté, exécutez le script SQL de génération de votre base de données. Vous pouvez utiliser votre propre script, dans notre cas nous prendrons la dernière version du script de création de la base Tudu Lists:

https://github.com/jdubois/Tudu-Lists/blob/master/src/main/sql/create_schema_mysql.sql

(pour avoir le fichier directement, cliquez sur “raw” en haut à droite du fichier).

Exécutez ce script: votre base de données est prête!

Génération de l’application

Connectez vous sur http://www.springfuse.com/

Afin de générer votre application:

  • Dans la partie “Database”, choisissez “Reverse your own database” et renseignez les paramètres de la base MySQL que vous venez de créer.
  • Laissez les autres paramètres par défaut, en particulier celui vous proposant le type d’application à générer

Le site va ensuite vous proposer d’exécuter un commande Maven de ce type:

mvn -U archetype:generate -DarchetypeGroupId=com.springfuse.archetypes -DarchetypeArtifactId=quickstart -DarchetypeVersion=3.0.60 -DgroupId=fr.ippon.demo.prime -Dpackage=fr.ippon.demo.prime -DartifactId=prime -Dversion=1.0.0 -DfrontEnd=jsf2Primefaces -Demail= -DjdbcGroupId=mysql -DjdbcArtifactId=mysql-connector-java -DjdbcVersion=5.1.17 -DjdbcDriver=com.mysql.jdbc.Driver -DjdbcUser=jdubois-prime -DjdbcPassword=##### -DjdbcUrl=jdbc:mysql://ec2-174-129-9-255.compute-1.amazonaws.com/prime -DinteractiveMode=false -DarchetypeRepository=http://maven2.springfuse.com/
 cd prime

Une fois ces commandes exécutées, vous avez créé votre application. Il vous reste ensuite à faire la génération de votre code à partir de la base de données:

mvn -f springfuse.xml generate-sources

Félicitations, votre application est générée! Vous pouvez d’ailleurs la tester en local en tapant:

mvn jetty:run

Déploiement dans le Cloud

Dans le pom.xml de votre application, nous allons rajouter le plugin CloudBees.

Dans la section nommée “RESPOSITORIES”, ajoutez un nouveau plugin juste après celui nommé “Codehaus Snapshots” (ligne 774):

 <pluginRepository>
     <id>bees-plugins-snapshots</id>
     <url>http://repository-cloudbees.forge.cloudbees.com/public-snapshot/</url>
     <releases>
         <enabled>false</enabled>
     </releases>
     <snapshots>
         <enabled>true</enabled>
     </snapshots>
 </pluginRepository>

Puis ajoutez le plugin Cloudbees dans les plugins de “build”, tout à la fin du pom.xml (ligne 957):

 <plugin>
     <groupId>com.cloudbees</groupId>
     <artifactId>bees-maven-plugin</artifactId>
 </plugin>

Ensuite allez recherchez vos clefs d’accès à CloudBees à cette URL:
https://grandcentral.cloudbees.com/user/keys

Vous pouvez maintenant déployer votre application avec la commande suivante:

mvn bees:deploy -Dbees.appid=jdubois/prime -Dbees.apikey=##### -Dbees.secret=#####

(en mettant le bon id pour votre application, de type votrecompte/votreapplication et en remplaçant les ##### par vos clefs CloudBees).

Votre application est maintenant lancée, vous pouvez y accéder via l’URL (en mettant l’ID de votre application et votre id utilisateur):

http://votreappli.votreid.cloudbees.net/app/home

(Par exemple pour voir ma version : http://prime.jdubois.cloudbees.net/app/home)

Pour vous connecter, utilisez le login “admin” et le mot de passe “password”: SpringFuse s’est connecté à votre base de données et sécurise l’application avec les valeurs de la table “TUSER”, c’est pourquoi il ne faut pas prendre les valeurs par défaut.

Pour finir

L’application générée doit bien entendu être customisée avant d’être réellement utilisable, mais nous pouvons déjà voir que:

  • L’application est performante et plutôt peu coûteuse en mémoire (environ 50 mo de RAM utilisée)
  • L’interface graphique proposée par PrimeFaces, basée sur JQuery, est particulièrement agréable
  • Spring Web Flow vous propose un système de navigation particulièrement efficace: gestion du bouton “back”, des onglets du navigateur, etc…
  • Le fait d’être basé sur une stack standard et ouverte vous permet de migrer sans problème d’un fournisseur de “Cloud” à un autre
Maintenant que votre application fonctionne, n’hésitez pas à la modifier et à redéployer: CloudBees n’upload qu’un “diff” de vos changements, ce qui faut que déployer une nouvelle version est particulièrement rapide. De plus, en cas de problème, vous pouvez revenir sur une ancienne version en un clic via l’interface graphique.
TwitterFacebookGoogle+LinkedIn
  • http://twitter.com/SachaLabourey Sacha Labourey

    JSF and Spring in 30 minutes with #CloudBees, very nice article from Ippon Technologies and @juliendubois:twitter 

  • http://www.next-presso.fr Antoine Sabot-Durand

    Merci Julien, super intéressant ton tutoriel. Juste une petite remarque de “puriste” Java EE : Primefaces n’est pas une implémentation JSF 2 mais une bibliothèque de composants. Les Implémentations de JSF sont Mojarra et MyFaces… 

  • Azeddine Dakhyr

    Merci Julien, c’est très intéressant, je n’arrive pas a voir ton exemple avec admin/password.
    Merci de bous communiquer le bon password afin de voir comment ça a l’air

    • http://twitter.com/juliendubois Julien Dubois

      Azeddine, je ne vais pas te communiquer le login/mot de passe de mon application… Il faut suivre le blog pour mettre en place sa propre application.

  • Tanjona Rafidison

    et pour ceux qui utilise SBT le plugin est la : https://github.com/timperrett/sbt-cloudbees-plugin

  • hadrien

    ton login/password (user/password) ne marche pas !

    • http://twitter.com/juliendubois Julien Dubois

      Il te faut suivre le tutoriel en entier, et cela marchera. Bien entendu, comme le demande plus bas Azeddine, je ne vais pas donner le login/mot de passe d’admin de mon application! Sinon le premier venu peut voir mes données, tout effacer ou écrire n’importe quoi. De toute manière le but de ce post est de mettre en place sa propre application, sinon il s’agit juste d’une application SpringFuse normale.

  • http://twitter.com/juliendubois Julien Dubois

    Pour tous ceux qui me demandent mon login/mot de passe: il est bien évident que je ne vais pas vous donner mon login/mot de passe d’admin sur mon propre site!!!
    Si vous voulez voir le résultat, il faut suivre les instructions du blog, et dans 30 minutes vous devriez avoir avoir propre application “dans le cloud”, sur laquelle vous pourrez faire ce que vous voulez, y compris changer le mot de passe de prod (ce que je conseille).
    C’est d’ailleurs là tout le but de ce post: que vous ayez votre propre serveur “dans le cloud” pour pouvoir ce que vous voulez avec.

  • http://twitter.com/skyhan Gökhan Ozar

    Bonjour, 
    Très reconnaissant d’avoir lu ce didacticiel et de faire connaissance de Cloudbees aussi de IPPON, cependant mes trois tentatives respectives (1 sur un iMac, 1 sur un Windows PC et 1 sur un MacBook Pro) de suivi de ce tutoriel sommes finies par échec. J’ai même contacté Cloudbees support leur expliquant ce que j’ai fait et qui s’est passé par la suite. Je soupçonne qu’il s’agit d’un changement de configuration du coté de Clıudbees, enfin le “Maven build”  ne fonctionne pas. 
    Merci de tout façon.

    • http://twitter.com/juliendubois Julien Dubois

      Bonjour Gökhan,
      Comme tu n’indiquais pas ce qui ne fonctionnait pas, j’ai tout refait, et … ça marche :-)
      Dis-moi précisément ce que tu as comme échec, ou donne-moi l’URL du bug que tu as soumis à Cloudbees, et je t’aiderai.
      Julien