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):

bees-plugins-snapshots http://repository-cloudbees.forge.cloudbees.com/public-snapshot/ false true

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

com.cloudbees bees-maven-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.