| 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 |
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);
}
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 !
| Forces | Faiblesses |
|---|---|
| installation, prise en main et utilisation rapides et faciles | documentation incomplète |
| documentation claire et efficace | communauté peu visible |
| communauté réactive | pas de génération de CRUD |
| pas de gestion du cache des vues | |
| Opportunités | Menaces |
| 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 |