Clever Age - Digital Architecture


fév 09 10

play !

Play ! est un framework web léger écrit en Java et basé sur MVC. Il se distingue de ses pairs par sa prise en main facile et son détachement par rapport aux spécifications JEE. C’est un outil prometteur qui redonne une jeunesse au développement web Java, souvent perçu comme complexe et contraignant.

Logo Play !

Fiche d’identité
Nom du produit Play !
Auteur Guillaume BORT - Zenexity
Date de sortie de la première version 1.0-stable1 (02/02/2008)
Numéro de la version étudiée 1.0-stable4 (03/12/2008)
Licence Apache Licence v2.0
Liens Sites qui utilisent ce produit, projet sur Launchpad

Aperçu

Voici un aperçu de quelques caractéristiques intéressantes de Play !. Pour plus d’informations, il est recommandé de lire la documentation officielle.

Pas de fichier de configuration XML à maintenir

Le reproche souvent fait aux frameworks Java porte sur les fichiers XML à maintenir. Ces derniers diminuent la productivité et sont sources d’erreurs. Play ! n’impose qu’un fichier de routes à la syntaxe simple. Exemple :


GET         /login       Admin.login
POST        /login       Admin.authenticate

Le format étant Type_de_requête_HTTP  URI  Contrôleur

Les contrôleurs sont de simples méthodes statiques

Les contrôleurs que l’on spécifie dans le fichier de routes sont des méthodes statiques. Exemple de fichier app/controllers/Admin.java :


public class Admin
{
   public static void login() {
       //...
       String welcomeMsg = "Bienvenue";
       int weekNumber = Calendar.getInstance().get(Calendar.WEEK_OF_YEAR);

       render(welcomeMsg, weekNumber);
   }
   public static void authenticate(String password) {
       //...
   }
}

La fonction render accepte un nombre quelconque d’objets qu’elle transférera à la vue.

Le paramètre password de la méthode authenticate contiendra la valeur du paramètre POST du même nom. Plus concrètement, String password aura la valeur saisie dans le champ <input type="password" name="password" value="" />

Une convention de nommage permet de lier automatiquement une vue à un contrôleur

Exemple : le fichier app/views/Admin/login.html sera utilisé par le contrôleur Admin.login.

Intégration de Groovy pour les templates

Par exemple, pour afficher les éléments passés à render :


<p>${welcomeMsg}</p>
<p>Nous sommes en semaine n°${weekNumber}</p>

Le langage de template permet de créer des tags/helpers, faire hériter des templates, afficher du texte "internationalisé", créer des liens vers des contrôleurs de manière élégante, etc.

Intégration de JPA et Hibernate pour la persistence des données

Après avoir renseigné les paramètres de connexion à la base de données dans le fichier de configuration principal, il suffit d’utiliser les annotations JPA pour que les tables soient créées à la prochaine utilisation de l’application. Exemple :


@Entity
public class Post extends JPAModel {
       
        public String title;
        public String content;
        public Date date;
//...
}

...créera la table Post. On peut ajouter un attribut à la classe et, sans redémarrer le serveur, le champ sera ajouté à la table. La classe JPAModel contient un @Id et des méthodes fréquemment utilisées (récupérer l’EntityManager, ajouter/mettre à jour/supprimer, etc.).

Un serveur d’application "maison" qui s’occupe de la compilation

On retrouve la facilité de déploiement du célèbre couple PHP/Apache Httpd : on modifie un fichier, on enregistre et on rafraîchit la page dans le navigateur. En cas d’erreur de compilation ou de configuration le serveur affiche les informations dans une page web avec le numéro de ligne et l’extrait de code concernés.

Intégration de JUnit pour les tests + un ensemble de fonctions pour tester le routage et les templates

Exemple :


@Test
public void getLogin() {
   Response response = GET("/login");
   assertStatus(200, response);
   assertContentType("text/html", response);
}

Perspectives

Play ! a encore du chemin à faire pour pouvoir être comparé à Symfony ou Grails, mais il présente déjà de bonnes bases et une facilité d’utilisation très appréciables. Bref, un framework à suivre de près !

Récapitulatif

ForcesFaiblesses
installation, prise en main et utilisation rapides et faciles documentation incomplète
documentation claire et efficace communauté peu visible
communauté réactivepas de génération de CRUD
pas de gestion du cache des vues
OpportunitésMenaces
apport de la communauté frameworks PHP qui ont beaucoup de succès grâce à l’environnement *AMP fourni par la plupart des hébergeurs
séduire des développeurs web JEE