PLAY FRAMEWORK
Toc:


Installation

Récupérer le zip http://www.playframework.org/download et dezipper le et rendez le executable
unzip play-1.2.3.zip
cd play-1.2.3
chmod +x play

hello world

play new helloPlay
play eclipsify helloPlay
play run helloPlay
Cela va démarrer un serveur local pour votre web app consultable ici

Pour demarrer le serveur de test effectuer dans le répertoire de l'application la commande suivante
Play test
Le serveur est accessible a l'url suivante

JPA DTB

Java Persistante Api

Si on tag une class @Entity cela signifie qu'elle est lier au JPA donc a une source de sauvegarde
Dans notre cas une dtb en ram (type h2) configuré dans le fichier conf/application.con
db=mem
db=fs
#mysql5
db=mysql:user:pwd@database_name
#old mysql
db.url=jdbc:postgresql:database_name
db.driver=org.postgresql.Driver
db.user=root
db.pass=secret

Class User dans models:
package models;

import java.util.*;
import javax.persistence.*;
import play.db.jpa.*; 

@Entity
public class User extends Model {
	public String email;
	public String password;
	public String fullname;
	public boolean isAdmin;

	public User(String email, String password, String fullname) {
		this.email = email;
		this.password = password;
		this.fullname = fullname;
	}
}
Lorsque ensuite on veux l'utiliser il existe des méthode hérité de Model (fournit par play)
// Create a new user and save it
new User("bob@gmail.com", "secret", "Bob").save();

// Retrieve the user with e-mail address bob@gmail.com
User bob = User.find("byEmail", "bob@gmail.com").first();

Il existe aussid des methode fournit par les importe util pour les tests
Fixtures.deleteDatabase();
Fixtures.loadModels("data.yml");

Astuce controllers

Pour rendre dispos le contenue du fichier application.conf a tous les renders du controller
	@Before
	static void addDefaults() {
	    renderArgs.put("blogTitle", Play.configuration.getProperty("blog.title"));
	    renderArgs.put("blogBaseline", Play.configuration.getProperty("blog.baseline"));
	}

grovy

? : Si condition vrais alors expression 1 sinon expression 2

Si la var _as='teaser' alors class="post teaser" sinon class="post "

modules

Charger les dependances
play dps
play list-modules
play install excel
play -> excel
Installé sous ~/play/modules

Si le module JPA est installé il faut au moins configurer une base en mémoire
db=mem

tag

@Entity
public class User extends Model {
for JPA (Hibernate) En plaçant ce tag sur un bean on le map sur la base
Le nom de la table est le nom de la class
@Entity
@Table(name="blog_user")
public class User extends Model {
Ce tag permet de renommer la table (placé devant votre class)
@Lob
public String content;
public String content;
Spécifie le type dans la data-base (lob et un gros paquet de texte)
//many post one user
@ManyToOne
public User author;
La relation est entre le champ et la class porteuse (ici Post)
Chaque Post a 1 User
Et chaque user peux avoir plusieur Post
@OneToMany(mappedBy="post", cascade=CascadeType.ALL)
public List comments;
Ici on indique que la relation entre Comment et post
mappedBy="post"
cascade=CascadeType.ALL
@OnApplicationStart
public class Bootstrap extends Job {
Indique qu'il faut lancer ce job au demarage de play (en prod, a la 1er requette en dev)