Blog

Une journée de dev avec le framework PLAY!

On entend souvent dire, de la bouche des développeurs eux-même, que Java EE c’est très puissant mais trop compliqué.

Avec Java, « on développe bien plus lentement qu’avec PHP ou .Net » ou encore « Java, c’est bien, mais pour les très gros projets ».

On rappellera tout de même que Java EE est une formidable plateforme d’intégration et que -contrairement à ses concurrents- elle se veut ouverte à différents acteurs logiciels (en clair, mon application Java web peut -sans avoir à en modifier le code- tourner sur un serveur Tomcat ou IBM ou JBoss, ou Oracle, … ou Oracle … ou Oracle aussi).

Ceci étant dit, il faut bien avouer que même si les outils ont fait d’énormes progrès, le reproche sur la complexité n’est pas faux : il faut souvent plus d’une journée d’installation et de configuration à un développeur averti avant de commencer à écrire et à tester ses premières ligne de code en java !


Lorsque nous avons entendu parler de play!, un framework java qui promet de tout simplifier et de nous laisser coder en Java, nous avons voulu voir de plus près.
Le défi pour moi qui ne connait pas play! : installer un environnement complet de développement et de test, coder une petite application web (celle que nous dérivons généralement dans nos tp de formation) avec des écrans, de la persistance, etc … et écrire le présent article. Temps imparti : une journée.

Le site, la documentation, le tutorial sont clairs. On commence avec l’installation : une archive binaire à télécharger et à extraire sur le disque et … c’est tout ! Ça commence plutôt pas mal.
Après cette étape, on a un eclipse ouvert, la console play! et le serveur lancés. Quelques dizaines de minutes après avoir commencé, on code effectivement du java !

Je découvre assez vite les avantages du framework qui font sa productivité :

  1. Corriger le bug et recharger dans la page :
    Tout comme avec les langages de script, play! permet de « sauter » les étapes de compilation du projet. Il suffit de modifier le code, puis de recharger le navigateur et les modifications sont prises en compte. Pour y arriver play! utilise une technique de compilation à chaud. Les erreurs de compilation sont affichées dans le navigateur web. Un rapport détaillé sur l’erreur est affiché dans la console de play!.

  2. Architecture MVC simplifiée sans état :
    Play! s’appuie sur une architecture MVC sans état. La séparation du modèle, du contrôleur et de la vue facilite grandement le développement, ça on le savait déjà. Mais ici, en plus, les variables sont passées d’un module à un autre de façon très intuitive.

  3. Moteur de template :
    Play! dispose d’un moteur de template très puissant basé sur Groovy. Avantage ou inconvénient ? : pour profiter pleinement de toute les potentialités offertes par ce moteur, la connaissance de la syntaxe Groovy est nécessaire. Ce point peut être gênant dans la prise en main du framework.

  4. Persistance :
    Play! utilise la couche de persistance JPA. Les annotations JPA sont utilisables dans les entités gérées par Play! . Le grand apport de Play! est le fait qu’il n’est pas nécessaire de configurer JPA. La seule chose à faire est d’indiquer la source de données dans le fichier de configuration de l’application, comme dans l’exemple ci-dessous :


  5. Test Driven Development (TDD) :
    Avec play!, il est possible de développer avec le concept du développement orienté tests. Avec la possibilité de tester directement dans le navigateur en utilisant la technologie Selenium.

En première approche, play! me semble très adapté pour le développement de petits projets au même titre que des plateformes comme PHP. Je crois aussi que c’est une très bonne idée pour tout débutant Java EE de commencer avec play! : il ne sera pas rebuté par la tuyauterie habituelle et il mettra -mine de rien- le doigt dans le développement web avec java.

Un exemple d’application : la Cave à Vin

Dans cette partie nous allons développer une application appelée Cave à Vin qui permet la gestion des bouteilles de vin d’une cave. Les actions sur le site se limitent à lister les bouteilles de la cave, modifier ou supprimer une bouteille, en rajouter de nouvelles.

Pour ce développement, le temps de prendre en main play! a été très rapide. En 2h j’avais tout installé, lu et fait tourner le tutorial Hello World.
On peut ensuite s’atteler à développer sa propre application.

On trouve dans notre application

  • un modèle :
    il contient les données c’est à dire les informations concernant les bouteilles dans notre exemple.

    Notons qu’à partir de ce modèle, la structure des tables de la base de donnée sont automatiquement générées par play!.

  • d’un contrôleur principal :
    sous forme d’une classe java Application qui contient les différentes fonctions de l’application :

    • - Index() pour afficher la page d’accueil ;

    • - List() pour lister les bouteilles



    • - Save() pour ajouter ou supprimer des bouteilles

    • - Form() pour la création ou modification des informations concernant une bouteilles.

  • de vues :
    les vues sont les rendus HTML de l’application. Un fichier par vue. Dans notre cas, trois fichiers :

    • - Index.html pour la page d’accueil ;

    • - List.html pour l’affichage des bouteilles de la cave


    • - Form.html pour générer la vue correspondant au le formulaire d’ajout ou de modification de bouteille



Un exemple de consistance du code : le code (ou template) de la vue commence par #{form @save()} et fini par #{/form}. Ceci permet de faire le lien avec la méthode save() du contrôleur principal, la classe Application dont on a déjà parlé.

La page d’accueil pointe sur la page d’affichage de la liste des bouteilles :

La page d’affichage permet d’ajouter directement une bouteille au niveau de la dernière ligne du tableau :

Le bouton + en bas à droite de la page permet d’enregistrer l’ajout.

La flèche à droite permet la modification ou la suppression de bouteille.

Un clic sur le bouton + en bas à droite nous emmène sur le formulaire de création de bouteille (le même que celui utilisé pour la modification mais avec des champs de saisie initialement vides).

Comme on peut le voir sur ces copies d’écran, il a été assez facile de modifier le code HTML afin d ‘obtenir un rendu spécifique (couleurs, images, styles).
Enfin, cela ne se voit pas mais cette petite application dispose également de la persistance en base de données.

En conclusion

La prise en main de play! est agréable et très rapide. Le développement de la partie métier et de sa persistance en base est grandement facilité par le framework. Le MVC est simple à utiliser et renforce la maintenabilité du code.
Un apport appréciable est le fait de modifier et de voir le résultat juste après un rechargement de la page web, pas besoin de compiler ni de déployer manuellement. Cette méthode est très similaire au développement web avec les langages de script comme PHP.
Seule petite ombre au tableau, pour utiliser play! de façon optimale il faut connaître Groovy pour coder les templates.

liens et références

http://www.playframework.org/ Play! framework home
http://seleniumhq.org/ Selenium HQ : Web Application Testing System

admin

Written by

The author didnt add any Information to his profile yet

  • Guillaune CARRE

    Avec Seam aussi ca prend 2h de faire une application CRUD avec 1 entite, pourtant la productivite n’a rien a voir avec Play!…

    Ce serait bien d’arreter de vanter la productivite des frameworks en se basant sur un exemple CRUD…

    Néanmoins merci pour l’article, vivement l’article « 3 mois de dev avec le framework play » ;-)

  • Bonjour Guillaume,
    Merci pour ton commentaire !

    Oui, c’est une bonne remarque, tout n’est pas CRUD. Mais comme le dit l’article, il s’agit de tester un framework sur une journée de dev, ni plus ni moins. Ce n’est donc pas un retour d’expérience projet.

    Ceci étant, une application de gestion reste essentiellement du CRUD quand on regarde bien. Le problème, c’est la déclinaison technique multiple du CRUD (par exemple : des ergonomies différentes, un contexte distribué ou pas, le transactionnel, les batch, etc. etc.). Or un framework amène -en général- un point de vue unique.
    Bon, il suffit de le savoir et d’utiliser le framework adapté au contexte cible donné. Si la cible est trop éloignée, ne pas l’utiliser !
    Play! s’inscrit plutôt dans une restriction que sont les applis web type LAMP …
    Et on fait déjà pas mal de choses dans ce contexte là !

    A+

  • Gl

    Un article sans interet qui n apporte rien de plus aux nombreux articles qui presente deja play.

    Perso, pour le debutant je ne pense pas que Play soit l ideal, car les bonnes pratique enseigner en entreprise ne sont pas mis avant avec play (REX d un debutant)

  • Alors que ce commentaire est non seulement très intéressant, mais il apporte beaucoup de choses et fait la preuve que la grammaire est enseignée en entreprise !
    Ah j’aime ce genre d’échange fructueux !

  • Nabil Adouani

    @GI: Peux tu nous dire quelles sont les bonnes pratiques enseignÉES en entreprises qui ne sont pas mises en avant dans play? Je suis curieux de les connaitre ;)

  • Mouais, admettons.

    Je vais essayer de répondre à la critique de Gl

    1/ Un article de plus qui n’apporte rien ?
    Peut être. Cela ouvre alors des réflexions philosophiques sans fins sur l’intérêt des blogs, des post facebook ou google+ ou encore du micro-blogging twitter. Quel volume là dedans à de l’intérêt ?

    De temps en temps, il peut y avoir une information intéressante mais la plupart du temps, les personnes ou les entreprises ne font que communiquer sur ce qu’elles font, vers une sphère plus ou moins importante de ceux qui s’intéressent à elles. Cet article (et ce blog) ne font pas exception. On raconte juste les trucs qu’on fait et que l’on a trouvé intéressants … et qui peuvent éventuellement intéresser d’autres gens (ils ne sont pas obligés de nous lire d’ailleurs).

    je viens de regarder sur google, il n’y a pas tant d’articles que ça sur play!
    j’en profite pour donner quelques liens que j’ai trouvé intéressants :
    http://blog.octo.com/play-framework/
    http://www.touilleur-express.fr/2011/06/06/scala-et-play-framework/
    http://thecodersbreakfast.net/index.php?post/2010/10/18/Play-Framework-%3A-symphonie-technologique-ou-solo-de-pipeau
    le dernier est assez critique

    Notre article ne s’inscrit pas là dedans : l’objet était de voir si on pouvait faire une petite appli en une journée de dev. Point barre.

    2/ Sur le framework play! en lui même
    Eh bien il n’a pas que des amis à priori ! Il y a pléthores de frameworks java ou autres. Moi ce que je remarque, c’est que celui-ci est issu d’une petite société française, Zenexity (http://www.zenexity.com). Et ça déjà, dans une communauté essentiellement anglo-saxonne et dominée par des mastodontes commerciaux, ça vaut le coup d’un petit coup de com.
    Il y a surement de meilleurs framework, mieux fichus, plus puissants, etc. etc.
    Moi je remarque une chose avec play!, c’est la facilité de démarrage : un binaire unique à télécharger, très facile à installer ; une documentation bien fichue ; un tutorial clair et agréable. Il y a pas mal d’enseignements à tirer -ne serait-ce que sur ce point- pour tous ceux qui écrivent des framework et autres solutions logicielles afin de les rendre accessibles et de les voir se diffuser.
    Là dessus, play! est au niveau de ce que fait google avec Google App Engine ou GWT : quelques étapes simples accessibles au plus grand nombre, un tutorial cours, simple (et à jour) … en quelques minutes on est à pied d’œuvre.

    Citez moi des exemples de produits java similaires ! Où il ne faut pas télécharger n « bidules » ; connaître un nombre importants d’outils ou de technos en pré-requis ; où le tuto est clair et à jour (c’est à dire qu’on peut le dérouler sans problème, sans avoir une étape qui « plante », soit parce qu’il manquait une information (que l’on trouvera après quelques temps de recherche évidemment), soit parce qu’un pré-requis est implicite alors que techniquement pas évident.

    Cela ouvre un autre débat : finalement, est-ce que ce qu’on reproche à play!, ce n’est pas cette simplicité ? pour les soit-disant experts de java, c’est tellement mieux que ce soit « compliqué », non ? ça leur permet de croire qu’ils ont une réelle expertise dans quelque chose : savoir configurer le bidule avec le machin.
    Ces gens là ne m’intéressent pas. Au moins, avec des produits comme play!, on peut avoir des développeurs qui entrent facilement dans java et rien que pour ça, bravo. Ils pourront d’autant plus facilement se concentrer sur de la bonne conception objet. Et cette expertise là, malheureusement, elle est assez rare. N’est-ce pas Gl ?

  • Smandou

    Lu’

    Pour ce qui est des templates, il n’est pas nécessaire de connaître Groovy. Je ne connais pas Groovy et je m’en sors très bien (il n’y a pas grand chose à retenir pour faire 90% du boulot : 4 types de tags, une dizaine de mot clefs). Si tu as besoin d’utiliser beaucoup de Groovy dans tes vues c’est que tu y mets beaucoup de logique, les puristes te diraient que ce n’est pas le but des vues. Personnellement, je dirais que ce n’est pas une bonne pratique mais qu’au moins tu n’es pas bloqué, si tu en as besoin tu peux avoir plus d’intelligence dans tes vues. L’essentiel est là : http://www.playframework.org/documentation/1.2.2/cheatsheet/templates

    De plus, il existe d’autres moteurs disponibles dans le module repo de Play! (Mustache, Japid, Scalate), et il y a même dans la branche master de Github du module Scala un moteur en Scala (simplifié, compréhensible même sans connaître les fioritures du langage).

    Pour alimenter le(s) trolls : Si les entreprises françaises étaient des modèles dans l’apprentissage des bonnes pratiques, et le choix des bonnes technos, on verrait peut-être plus de succès visibles sur le web français (produits, services, whatever…).

  • Tiens, ça m’intéresse cette histoire de template Groovy !
    Etant à la base un anti-template, je suis réceptif à ce que tu dis Smandou, un langage de template qui est facilement accessible, c’est un énorme plus pour l’intégration ! Je me souviens de galères pas possibles sur une simple appli CRUD avec du JSF, et j’ai l’impression qu’on en est très très loin !

    Merci pour ton retour !

  • Smandou

    En passant, je n’ai jamais fait de Java EE, j’ai commencé avec Play! et avec principalement un background de Front Dev et Php, puis quelques expériences sur Django. Et c’est en effet la facilité de prise en main qui a permit cela. Maintenant je me met à Scala, grâce à Play! je peux m’immerger dans le langage en faisant abstraction de l’environnement que je connais déjà.

  • Smandou

    @Alain Boudard :

    Personnellement j’utilise celui par défaut dans Play! (en Groovy) car je le trouve particulièrement lisible. Mais je fais du HTML/CSS depuis toujours, cela n’a donc pas été un gros problème pour moi de m’y mettre. Je pense que le nouveau moteur de template en Scala pourrait éventuellement révéler dans le futur une toute nouvelle approche des templates, et je parie beaucoup dessus.

    Ce que j’apprécie particulièrement dans ce système c’est :
    – simplicité de la syntaxe
    – lisibilité
    – gestion des tags/includes, créer ses propres tags (en Java) très facilement
    – i18n built-in

  • Oui, moi aussi je n’aime pas trop l’approche par template. Cela nécessite (en général) l’apprentissage d’un « nouveau » langage et (bien souvent) on se retrouve bloqué sur un truc bête alors qu’avec le langage initial, ça prendrait 2mn.

    Ceci étant dit, comme le fait remarquer smandou, la vue n’est pas le lieu où coder de la logique (une question de responsabilité de l’objet). Entendons nous : pas de logique métier ; toute logique « de présentation » (par exemple colorier une ligne sur deux dans un tableau) est bien de la responsabilité de la vue.
    Une bonne approche template permettra l’insertion de code dans le langage natif (exemple des scriptlet java dans les jsp si un taglib ne fait pas l’affaire).

  • Nabil Adouani

    Je rejoins le raisonnement de Stéphane concernant la prise en main super facile de Play!.

    Personnellement je viens du monde Spring-Hibernate-Struts (ou struts 2) et j’ai même fait du JSF. Je pense que ce sont les « bonne pratiques enseignées en entreprises » selon les dires de GI. Je comprends, puisque les entreprises françaises ne font que ça!! des technos certes robustes etc… mais bien lourdes pour faire du Dev Web simple, et assez inaccessible pour les non java-istes.

    Je ne suis pas dans une optique de Troll, mais faire du SEAM est une grosse connerie pour moi, un truc bien lourd, génère plein de de code boilerplate à maintenir à la main si on veux changer quelque chose… bref une techno que je n’utiliserai jamais si j’avais le choix!

    Moi j’aime Play! pour un autre avantage: c’est la création d’API REST. Aussi simple que Play sur ce niveau, on ne trouve pas.

    Voici un lien intéressant pour se documenter un peu plus sur play: https://github.com/3monkeys/play.rules

  • Il est top ce dépot Git avec la doc !
    Merci Nabik

  • Gl

    Pas besoin de troller d avantage, c est un avis perso et la discussion est sans fin. Perso je dev chaque jour pour un projet perso en play.

    Je soulignais que play ne reflete pas la realite du monde de l entreprise. Et pour ma part ce sont les difficultes, les solutions, les reponses qui nous permettent de nous ameliorer, du moins pour un debutant, au risque de mettre de côté toute la complexité du jee.

  • Gl

    Edit: je viens de lire led nouveaux posts

    perso le discours fait beaucoup hypocrite. Je ne vous connais pas, donc je ne connais pas votre niveau dans l univers java, mais lors d un entretien client ou ssii (je parle pour les meilleurs et pas celle qui recrute tout et n importe qui) les entretiens sont assez eleves et on demande une certaine expertise, connaissance et culture autour de java, voir plus, donc je continue a dire que ce n est pas la meilleur entrée pour un debutant, du moins pour un dev java, apres pour dev php ou net pourquoi pas

  • Ah oui effectivement … c’est du gros niveau quand même.

    – Qu’est-ce qui fait hypocrite exactement ? Si dans les super ssii que tu connais on fait passer des tests poussés, ils ne doivent pas concerner une certaine forme de démonstration ou d’argumentation ! (Et je ne parle pas du reste …)

  • Nabik Adouani

    Je pense que le mot hypocrite est mal compris par GI

  • Nabik, tu ne dois pas faire partie d’une meilleure ssii, tu sais bien, celles qui ne recrutent pas n’importe qui, c’est pour ça que ton niveau n’est pas assez élevé pour comprendre ce qu’il a voulu dire !

    :D

    D’ailleurs, si on sait que Play n’est pas la meilleure entrée, peut être est-ce le meilleur dessert ? On sait jamais !