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