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:toolsplay 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;toolsplay;.

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;
  • Ajoutons au dessus des attributs title, description, yearOfPublication l'annotation @Required, indiquant le caract??re "indispensable" de la pr??sence de valeur pour ces attributs.
  • Ce qui nous donne a peu de chose pr??s la classe suivante:

    /**
    ??* Projet myplayapp
    ??* Entit?? Game
    ??*/
    package models;

    import javax.persistence.Entity;

    import play.data.validation.Required;
    import play.db.jpa.Model;

    /**
    ??*??Game Classe mod??lisant un jeu vid??o de la biblioth??que
    ??* @author frederic
    ??*??
    ??*/
    @Entity
    public class Game extends Model {

    @Required

    public String title;

    @Required

    public String platform;

    @Required

    public String description;

    public Boolean publish;

    public String testContent;

    public String developerStudio;

    public String editor;

    @Required

    public Integer yearOfPublication;

    public Integer note;

    public String cover;


    public Game(String title, String description, Boolean publish,

    String testContent, String developerStudio, String editor,

    Integer yearOfPublication, Integer note, String cover) {

    this.title=title;

    this.description=description;

    this.publish = publish;

    this.testContent=testContent;

    this.developerStudio=developerStudio;

    this.editor=editor;

    this.yearOfPublication = yearOfPublication;

    this.note = note;

    this.cover = cover;


    }

    }
    Voil?? une premi??re ??tape de faite.

    Mais avant de pouvoir tester cette chose, codons justement un test unitaire de la classe de persistance et de sa DAO, g??r?? par le framework.

    Cr??ons donc une classe de test dans le r??pertoire de source test et nommons le EntitiesTest:
    Notre petite classe est destin??e ?? tester la persistance de nos entit??e:

    public class EntitiesTest extends UnitTest {

    ????@Test
    ????public void testGame(){
    ???? ??Game game = new Game("MyGame",??
    ???? ?? ?? ?? ?? ?? "X360",??
    ???? ?? ?? ?? ?? ?? "My Description game",??
    ???? ?? ?? ?? ?? ?? true,
    ???? ?? ?? ?? ?? ?? "Test of the game",
    ???? ?? ?? ?? ?? ?? "My Studio",??
    ???? ?? ?? ?? ?? ?? "My Editor",
    ???? ?? ?? ?? ?? ?? 2010,
    ???? ?? ?? ?? ?? ?? 8,
    ???? ?? ?? ?? ?? ?? "public/images/x360/my_game/cover/mygame-cover.jpg");
    ???? ??game.save();

    ???? ??Long id = game.getId();
    ???? ??assertNotNull(id);
    ????}
    }

    Ok,maintenant, testons notre test 😉 ??et lan??ons dans la sessions de commandes pr??c??demment ouverte, la ligne suivante:

    play test

    nota: depuis Eclipse, via la bar d'ic??nes de debug, cliquez sur le bouton "Run Configurations…", et dans le groupe "Java applications", lancer "Test myplayapp".
    Et ouvrez votre navigateur (Firefox, Chrome, Safari, IE ?) sur l'url??http://localhost:9000/@tests !
    Vous pouvez alors lancer le ou les tests que vous avez cr????s.
    La page appraissant ?? l'??cran vous propose de lancer les tests souhait??s. choisissez EntitiesTest et cliquez sur "Start !".

    Capture-06-play_-_tests_runner

    figure 6 – Lancement des tests unitaires via l'interface Web de Play!

    Le test choisi d??roul??, le r??sultat de celui-ci apparait dans la m??me page:

    Capture-07-play_-_tests_runner

    figure 7 – R??sultat du test unitaire ex??cut??

    Vous pouvez aussi choisir de lancer l'int??gralit?? des tests unitaires propos??s nativement par Play!, ainsi que vos tests "custom".
    Pour cela rappelez la page des tests et cliquer sur le lien "select all" puis sur "Start !". Tous les tests natifs sont appel??s, y compris un test via S??l??nium v??rifiant le bon affichage de la page d'accueil de l'application.

    Capture-08-play_-_tests_runner

    figure 8 – Tous les tests ont ??t?? lanc??s et ex??cut??s avec succ??s

    Conclusion
    Nous voil?? avec les pr??mices d'une belle application Play! Nous avons d??couvert a travars ces premiers pas, la richesse technique et la compl??tude propos??es par ce fabuleux framework Java. Nous d??couvrirons au prochain ??pisode notre premi??re page bien ?? nous et la mis en place des modules CRUD et Security, natif eux aussi ?? Play! mais non activ??s par d??faut.

    Vous trouverez ci-joint, l'archive du code correspondant ?? cet article.

    Publicités