Comme indiqué dans le précédent article, le Play!framework est une avancée notable dans le paysage Java. C'est en effet un framework Agile de développement d'application web, proposant certains précepts en vogue aujourd'hui dans le paysage du web: a savoir, le pattern MVC, la persistance via JPA, des annotations à foison, le principe de règles de notations plutôt que configuration, et j'en passe, et des meilleures.  Bref, tout ce que d'autre framework basés sur d'autres langages proposent depuis quelques temps déjà.

Il faut bien avouer que c'était un atout qui manquait sévèrement à notre langage favori qu'est Java.  Mais c'est maintenant un retard comblé par Play!.

Première application

Ok, nous allons nous pencher sur la création de notre première application. Pour commencer, assurons nous que notre framework est bien installé.

Installation

Téléchargez l'archive contenant le framework et dézippez la dans le répertoire de votre choix sur votre machine; par exemple dans ~/tools/play si vous êtes sous Linux/Ubuntu oubien sur D:\tools\play sous Windows.

Ensuite, ajoutez ce nouveau chemin à votre chemin système. 
Sous Linux, éditer votre fichier ~/.bashrc, et ajouter en fin de fichier

export PATH=%PATH%:~/tools/play:.

sous Windows, éditer vos variables système (Propriété du poste de travail, onglet "Avancé", boutons "variables systèmes" et modifier l'entrée PATH en ajoutant à la fin

;D;\tools\play;.

et le tour est joué.

Création de l'application

fermez puis relancer votre session utilisateur pour être sur que la nouvelle valeur de PATH soit bien prise en compte.

enfin,ouvrez une console de commande (Windows) ou un terminal (Linux) et tapez :

mkdir ~/Projects/Java/play
cd ~/Projects/Java/play
play new myplayapp

La console indique alors :

frederic@nostromo6:~/Projects/Java/play$ play new myplayapp
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~
~ The new application will be created in /home/frederic/Projects/Java/play/myplayapp
~ What is the application name? [myplayapp] 
~
~ OK, the application is created.
~ Start it with : play run myplayapp
~ Have fun!
~

Editons dans l'arborescence du projet créé le fichier myplayapp/conf/application.conf

et remplaçons dans les lignes suivantes:

# Database configuration
# ~~~~~
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (HSQL in memory)
#   - fs  : for a simple file written database (HSQL file stored)
#db=mem
#

Remplaçons la ligne du db=mem par un db=fs et supprimons le #, ceci afin d'avoir une persistance temporaire dans une base de données sur le système de fichier, et non pas en mémoire, ce qui est un peu trop volatile à mon goût.

Ce qui donne:

# Database configuration
# ~~~~~
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (HSQL in memory)
#   - fs  : for a simple file written database (HSQL file stored)
db=fs
#

Vérifions que celle-ci est opérationnelle avec la commande :

play run

et accédons l'url http://localhost:9000/

Capture-00-your_application_is

figure 0 - Premier pas dans le monde de Play!

Voila, l'application est créée...  Trop dur !

Éditeur et/ou IDEs

Ok, maintenant, pour pouvoir travailler proprement, je vous propose d'utiliser Eclipse. Partons sur Galileo (Eclipse 3.5) pour commencer. Mais si vous avez un préférence pour Netbeans, pas de soucis.

1. Eclipse

la commande magique suivante permet de générer un projet Play! éditable dans Eclipse. Simplement, placez-vous dans le répertoire de votre projet nouvellement créé:

cd ~/Projects/Java/play/myplayapp
play eclipsify .

ce qui donne dans la console:

frederic@nostromo6:~/Projects/Java/play/myplayapp$ play eclipsify .
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~
~ OK, the application is ready for eclips
~ Use File/Import/General/Existing project to import /home/frederic/Projects/Java/play/myplayapp into eclipse
~
~ Use eclipsify again when you want to update eclipse configuration files.
~ However, it's often better to delete and re-import the project into your workspace since eclipse keeps dirty caches...
~

Maintenant, ouvrez votre Eclipse préféré dans une workspace de votre choix (ex: ~/workspaces/java/play/myplayapp).
Capture-01-workspace_launcher

figure 1 - Ouverture d'un nouveau workspace pour importer notre projet Play!

Puis, via le menu contextuel dans l'explorateur de projet (sidebar de gauche...) faite "Import > Import..." puis dans la fenêtre affichée, choisissez "Existing projects into Workspace". 
Capture-02-import

figure 2 - Import du projet play "eclipsifié" dans votre workspace
Parcourez le répertoire de votre projet et valider.
Capture-03-import_-_projet_det

figure 3 - Projet play détecté par Eclipse (3.5 ici) et prêt à être importé

Un click sur Finish, et voilà votre projet importé, et prêt a être éditer dans Eclipse
Capture-04-java_ee_-_myplayapp

figure 4 - Eclipse présentant votre projet Play! fraîchement importé
Et voilà !

Sous NetBeans, la proécédure est très similaire, la commande permettant de créer la définition du projet Netbeans étant la suivante:

cd ~/Projects/Java/play/myplayapp
play netbeanify .

Ce qui trace dans la console:

frederic@nostromo6:~/Projects/Java/play/myplayapp$ play netbeansify .
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~
~ OK, the application is ready for netbeans
~ Just open /home/frederic/Projects/Java/play/myplayapp as a netbeans project
~
~ Use netbeansify again when you want to update netbeans configuration files, then close and open you project again.
~

Je laisse les aficionados de NetBeans procéder à l'import du projet dans l'IDE de Sun (sic... Oracle), ne connaissant pas aujourd'hui moi-même la procédure.

Entités et autres contrôleurs

C'est une application de gestion de liste de jeux vidéo que nous allons créer, au fait !
Et donc, de quoi avons nous besoin pour modéliser notre bibliothèque de jeux vidéo ? Disons, une entité représentant un jeu, et une entité pour désigner la plateforme d'accueil de ce jeu. C'est un bon début.
Et si on souhaite en faire une vraie application internet, il nous faut, pour pouvoir la sécuriser, une entité représentant un utilisateur.
En plus de ces entité, nous bâtirons l'application sur 1 contrôleur principale, gérant la page d'accueil, et, à l'aide du module CRUD, autant de sous-contrôleurs que d'entités pour la partie administration.

Voilà la liste est faite, plus qu'à se lancer dans le développement de cette magnifique application.

Game

Un jeu est modélisé par un titre, une plateforme (que nous "entité-iserons" plus tard) une description, un éventuel test, une année de production, un studio de développement, un éditeur  (qui pourront devenir à leur tour des entités à part entière d'ici quelques temps), une note, et enfin une image représentant la pochette du jeu.

Précipitons nous sous notre IDE préféré, Eclipse pour ma part, et créons une première classe Game dans le package models. N'oubliez pas d'hériter de la classe Model (play.db.jpa.Model) afin de pouvoir faire persister notre jeu dans une base de données (nous aborderons cela au chapitre suivant). Utiliser l'assistant pour vous faciliter la tâche:

Capture-05-new_game_java_class

figure 5 - La classe Game héritant de play.db.jpa.Model

Et après un clic sur "finish", ajoutons les choses suivantes:

Tout d'abord, 
  • l'annotation @Entity indiquant à Java et à JPA que cette classe devra persister.
  • Ajoutons les attributs dont nous avons parlé précédemment, à savoir:
  • public String title;
  • public String platform;
  • public String description;
  • public Boolean publish;
  • public String test;
  • public String developerStudio;
  • public String editor;
  • public Integer yearOfPublication;
  • public Integer note;
  • public String cover;