Redécouvrons le développement web en Java avec Play! – Partie #2 : Création et mise en ligne d’une application

26 avril 2013
Par 

play-logoCe billet est le deuxième de la série consacrée à Play ! Dans le premier, nous nous étions intéressés à la philosophie du framework, à ses différences avec Java EE et à ses concurrents. Précisons que  la lecture de ce premier post (plutôt verbeux et trop long :) ) n’est pas du tout un prérequis au présent tutoriel.

Dans ce tutoriel, nous allons apprendre à créer et à mettre en ligne une webapp. Dans un premier temps, nous allons mettre en place l’environnement de développement. Ensuite, nous allons créer un projet Play! que nous allons configurer. Enfin, nous allons déployer notre projet dans les nuages.

Dans le prochain post de la série, nous allons nous intéresser au développement d’une webapp mettant en œuvre trois problématiques récurrentes du web que sont l’accès aux données, la gestion de l’authentification/autorisation et la création de graphiques statistiques.

Ce tutoriel est valable pour une machine Linux et a été testé sur Ubuntu 12.10.  Cependant, il pourrait facilement être utilisé sous un environnement Windows moyennant quelques adaptations mineures.

Mise en place de l’environnement de développement

Pour ce tutoriel, je suis parti d’une machine où aucun outil n’est installé. J’ai adopté certains outils, par habitude, tel Eclipse et d’autres, par opportunisme, comme Git. Je vais donc essayer de justifier, pour chaque outil, la pertinence de mon choix.

Java

Pour Play! 2.1, c’est le JDK 6 qui est requis. Cependant, pourquoi se priver si c’est offert ? Je vous recommande donc d’installer la dernière version .

Nous allons d’abord installer la machine virtuelle Java (JRE).


sudo apt-get install openjdk-7-jre

Nous allons vérifier maintenant que la machine virtuelle est installée correctement

java -version

jre_installation_ok

Une fois que nous avons la confirmation comme ci-dessus que la JRE est installée correctement, nous allons installer le JDK.

sudo apt-get install openjdk-7-jdk (pour installer la JDK)

Pour finaliser l’installation du JDK, nous allons définir la variable d’environnement JAVA_HOME et l’intégrer au PATH. La variable JAVA_HOME est utilisée par plusieurs applications / frameworks.

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/
export PATH=$JAVA_HOME:$PATH

Comme pour le JRE, nous allons vérifier que notre installation est fonctionnelle.

javac -version

jdk_installation_ok

Eclipse

C’est l’IDE que j’utilise au quotidien. J’ai donc naturellement choisi cet IDE. Cependant, je pourrais a posteriori justifier mon choix par le fait qu’Eclipse est avec IntelliJ IDEA un des deux IDE à être supporté nativement par Play!. En effet, la commande “netbeansify” permettant de générer un projet Netbeans dans Play! 1 n’est plus supportée dans Play 2. Mais il est tout à fait possible moyennant un petit effort (Netbeans SBT plugin) de générer un projet Netbeans. Je ne l’ai pas expérimenté et donc je n’en parlerai pas ici.
Pour installer Eclipse, on peut télécharger la dernière version ici .

Aucun plugin supplémentaire n’est nécessaire. Dans mon cas, j’ai utilisé le même Eclipse que pour mes projets Java EE, la version “Eclipse IDE for Java EE Developers”.

Une fois Eclipse téléchargé (un fichier tar.gz), il faut le décompresser dans un dossier de votre choix.  Par exemple dans le dossier /home/votre_nom/devhome/apps/

SSH

Pour pousser nos sources vers le cloud de Heroku, il nous faudra utiliser SSH.

Pour installer SSH

sudo apt-get install openssh-client

et générer une clé SSH dans le dossier .SSH situé dans votre dossier /home/votre_nom

cd ~/.ssh
ssh-keygen -t rsa

Git

Git est un DCVS développé par Linus Torvalds et qui est utilisé pour le développement du noyau Linux. Git va nous être utile pour le déploiement sur Heroku. Je reviendrai sur ce point un peu plus loin.

Pour installer Git, il faut exécuter la commande

sudo apt-get install git

Ensuite, nous pouvons vérifier si tout s’est bien passé avec :

git_installation_ok

Il peut être pratique de définir son username, password et email par défaut pour ne pas avoir à les saisir à chaque fois.

git config --global user.name "Paterne Gaye-Guingnido"
git config --global user.email ggap.web@soat.com

PostgreSQL

PostgreSQL est un SGBD open source qu’on ne présente plus. Heroku propose une instance PostgreSQL gratuite. C’est ce qui me conduit a adopter ce SGBD pour mes développements Play! même si ce n’est pas obligatoire.

sudo apt-get install postgresql

Nous allons redémarrer le serveur pour vérifier que l’installation s’est bien déroulée.

postgresql_installation_ok

Heroku

Heroku est une plateforme cloud de type PaaS.  À l’usage, j’ai été impressionné par sa simplicité et son efficacité, en quelques minutes mon application était en ligne.

Ce qui est bluffant chez Heroku, c’est la facilité d’utilisation. Hormis la phase d’initialisation, tout se fait à l’aide d’un push Git.

Pour utiliser Heroku, il faut:

  • Créer un compte

Pour cela, il faut aller sur le site http://www.heroku.com/

  • Importer sa clé SSH

Une fois le compte créé, il faut se connecter a Heroku et éditer notre compte à l’adresse https://dashboard.heroku.com/account

  • Installer Heroku Toolbelt

C’est le client qui va nous permettre de déployer nos projets vers Heroku.

wget -qO- <a href="https://toolbelt.heroku.com/install-ubuntu.sh">https://toolbelt.heroku.com/install-ubuntu.sh</a> | sh

Nous pouvons vérifier que Toolbelt est fonctionnel.

heroku_toolbelt_installation_ok

Maintenant, nous pouvons essayer de nous connecter à Heroku depuis notre terminal.

heroku login

Il nous sera demandé nos identifiants Heroku : email + mot de passe.

heroku_login_ok

Play!

Pour installer Play!, il faut d’abord télécharger le zip de la dernière version sur http://playframework.com/. Ensuite, il faut décompresser l’archive dans un dossier où nous avons les droits d’écriture, par exemple /home/votre_user_name/devhome/apps/. Ensuite, il faut intégrer le dossier d’installation de Play! dans la variable PATH.

export PLAY_HOME=/home/votre_user_name/devhome/apps/play-2.1.1
export PATH=$PLAY_HOME:$PATH

Pour nous assurer que notre installation est correcte, nous allons exécuter :

play

play_installation_ok

Création de l’application

Création depuis la console Play!

À partir d’un terminal, il faut se positionner dans le dossier où on souhaite créer le projet. Avec la commande ci-dessous, nous allons créer un projet appelé “nanbiwe” .

play new nanbiwe

Le framework nous demande de préciser le nom de l’application. Comme nous l’avons déjà précisé dans la commande, nous pouvons simplement valider pour conserver ce nom. Ensuite, il nous est demandé d’indiquer  le type de projet : 1 pour Scala et 2 pour Java.

play_creation_webapp_ok

Pour préparer la suite, nous allons nous positionner dans le dossier nanbiwe nouvellement créé et saisir la commande play. Ceci va rendre accessible les commandes play.

play_dans_dossier_projet_ok

Exécution de la webapp

Nous pouvons d’ores et déjà exécuter notre application. Pour cela :

run

Play! utilise par défaut le port 9000 et l’application est donc disponible a l’adresse localhost:9000 .

webapp_execution

La page d’accueil de l’application générée intègre un tutoriel qui est un bon point d’entrée dans la documentation du framework.

Il faut noter que même si 9000 est le port par défaut, on peut cependant démarrer Play! sur un port autre que le 9000. Par exemple, pour démarrer Play! sur le port 1702

play run 1702

Rendre le projet Eclipse-compatible

Par défaut, le projet créé n’est pas reconnu par l’IDE. Pour régler ce problème, Play! propose une commande  ”eclipse”, anciennement “eclipsify” dans Play! 1.0. Cette commande va générer les fichiers .classpath et .project nécessaires à l’IDE Eclipse pour reconnaître notre projet.

En pratique, il serait préférable de rajouter l’option “with-source=true” afin d’avoir accès aux sources des binaires depuis Eclipse.

eclipse with-source=true

Déploiement de l’application sur Heroku

À partir d’ici, nous allons quitter la console Play! grâce à un CTRL+D.

Configuration du projet

Il faut créer un fichier nommé “Procfile” dans le dossier /conf. Voici ce que pourrait être le contenu de ce fichier.

web: target/start -Dhttp.port=$PORT -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=$DATABASE_URL

Création d’une “app heroku”

Pour initialiser  le projet au niveau de Heroku, il faut exécuter

heroku create -s cedar

heroku_create_ok

Quand on exécute la commande ci-dessus, Heroku va générer un nom par défaut pour votre application. Au final, l’URL de notre webapp sera de la forme :  ”http://<nom_genere>.herokuapp.com/”.

On peut cependant spécifier un nom. Dans la commande ci-dessous, “nanbiwe-heroku” est le nom de notre application au niveau de Heroku. Cela signifie que, en pratique, l’URL générée pour notre application sera http://nanbiwe-heroku.herokuapp.com/. Je ne recommanderais pas cette façon de faire car on n’est pas certain de l’unicité du nom.

heroku create nanbiwe-on-heroku -s cedar

Commiter nos modifications

L’objectif ici n’est pas de faire un tutoriel sur Git. Je vais me contenter d’expliquer le minimum que nous avons besoin de savoir pour déployer notre application.

Le mot “commit” peut être trompeur pour quelqu’un qui est habitué à SVN et pour qui “commiter” signifie envoyer vers le serveur. Quand on utilise Git, “commiter”signifie sauvegarder sur son repository local. Ce qui signifie que je n’ai pas besoin d’un accès serveur pour commiter. Ensuite, quand je suis prêt,  je peux pousser (git push <repository> <branche>) des fichiers de mon repository local vers un repository distant.

Avant d’effectuer nos “commit”, nous allons créer un fichier nommé “.gitignore” qui va indiquer à Git quels fichiers ne doivent jamais être commités. Voici ce que pourrait être le contenu de ce fichier qui sera placé dans le dossier nanbiwe.


logs

project/project

project/target

target

/.classpath

/.project

/.settings

Maintenant que nous avons exclu les fichiers à ne pas envoyer au serveur, nous pouvons commiter nos modifications.

git add .
git commit -m "initial commit"

Ensuite, nous allons commiter nos modifications.

Déploiement sur Heroku

A partir du dossier nanbiwe, il faut exécuter :

git push heroku master

heroku_push_master

Quelques minutes plus tard, on a le message de succès et on peut accéder à la page d’accueil de son site.

heroku_push_master_end

L’URL de notre application nous est donnée : http://nanbiwe-on-heroku.herokuapp.com/

Voilà ! Vous venez de mettre en ligne votre première application Play!

Documentation

Le site officiel du framework

Le site officiel de Heroku

4 réponses à Redécouvrons le développement web en Java avec Play! – Partie #2 : Création et mise en ligne d’une application

  1. Jon Doe dit :

    Bonjour,

    J’aurais voulu savoir pour Play v2.1 quel plugin on pourrait utiliser pour l’authentification mais avec une installation facile (et qui gére aussi la confirmation par mail).
    PS: Je suis débutant en Play

  2. Paterne Gaye-Guingnido dit :

    Il existe trois modules pour la gestion de l’authentification / authorisation :
    play-authenticate qui gère uniquement l’authentification, securesocial : qui gère à la fois l’authentification et l’authorisation, enfin deadbolt qui ne gère que l’authorisation.

    Je conseillerais securesocial qui offre plus de fonctionnalités et est assez paramétrable.

  3. HOUSSEM dit :

    Bonjour,
    Je demande ou est ce qu’on peut trouver des tutos plus avancer . Merci en avance .

  4. fred dit :

    Bonjour,

    Je joue un peu avec Play! mais j’avoue avoir beaucoup de difficultés à comprendre le fonctionnement en asynchrone avec l’utilisation de Promise et Future.
    Si jamais vous avez une explication claire de la mise en oeuvre, je serais tres interessé.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>