60
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Play! Framework Formation

Formation Play! framework

Embed Size (px)

DESCRIPTION

initiation et formation au framework de développement play!

Citation preview

Page 1: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Play! Framework–

Formation 

Page 2: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Quelques mots sur Play!

Page 3: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Historique

2007 Créé par Guillaume Bort

2008 Framework Open Source

2009 Version 1.0 en octobre

2010 Version 1.0.1 en janvier

2011 Version 1.1 en octobre

Page 4: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Un tour d'horizon

Pas de compilation

Respecte le protocole HTTP

RESTFull

Stateless

Système de templating simple

Groovy

Framework MVC

Rapide (exécution & développement)

Extensible par des modules

Pure JAVA !!!

Page 5: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La communauté

Twitter

http://twitter.com/playframework

~ 1600 followers

~ 500 tweets

Google group

http://groups.google.com/group/play-framework

~ 15000 messages

~ 1300 membres

~ 40 messages / jour

Github

http://github.com/playframework/play

~ 120 watchers

Page 6: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Pourquoi un nouveau framework web en Java

Page 7: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Pourquoi un nouveau web framework java 

Alors qu'il existe déjà JSF

Struts

Spring MVC

Wicket

...

Page 8: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Pourquoi un nouveau web framework java 

« Java web frameworks are created by java developpers, not

Web developpers »

« Java developpers are building Java applications, not web

applications »

Page 9: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Pourquoi un nouveau web framework java 

Web VS middleware

La complexité en Java est culturelle

InterfacesAbstractionRMIEJBSOAP

Page 10: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Pourquoi un nouveau web framework java 

WEB=

REST

Page 11: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Pourquoi un nouveau web framework java 

« Play ! Framework is the first reasonable Java web framework I

have personnaly seen»

Bret Taylor

Page 12: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les avantages de Play!

Page 13: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Cycle de Vie

Framework J2EE Traditionnel

Page 14: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Cycle de Vie

Avec Play!

Page 15: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les fonctionnalités

Module de sécurité

CRUD

Validation

Jobs asynchrones

I18n

Tests (unitaire & selenium)

L'envoie de mail

Webservices

RESTFull services

Page 16: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les fonctionnalités

Et avec les modules :

OpenID, CAS

Export en PDF

Export Excel

Rendre les CSS dynamiques

Minifier

Recherche

http://www.playframework.org/modules

Page 17: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les fonctionnalités

Play! est compatible avec toutes les librairies Java.

Play ! Intègre déjà :

Hibernate

Google Gson

Commons (fileupload, httpclient, email, logging …)

EhCache

...

Page 18: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

A la découverte de play!

Page 19: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Architecture

Page 20: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La structure d'une appli

Créer une nouvelle application

Play new monApplication

Structure de l'application

./conf

./conf/routes

./conf/application.conf

./conf/messages

./test

./lib

./public

./app

./app/models

./app/controllers

./app/views

Page 21: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les routes

Page 22: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Le fichier de configuration

Configuration

De la base de données

Du logger

Du cache

Du serveur SMTP

Des modules

System settings

Page 23: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Le fichier de configuration

Page 24: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Le fichier de configuration

Mais comment on fait pour tous travailler avec le même fichier de configuration,

alors que nos environnements ne sont pas identique ?

play id

Page 25: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

A la découverte de play ! :Le Model

Page 26: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Le model

Définition en JPA

Beaucoup d'annotation ! Que ce soit pour le mapping avec la base de données ou pour la structure / validation des champs– @Entity– @OneToMany– @Column– … (pour la validation nous verrons plus loin)

Doit étendre de la classe « Model »

Page 27: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Le model

Page 28: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Le model

Tout est public ! Il n'y a pas de getter/setter

Play : génère les getters/setters au runtime

Vous pouvez surcharger les getters/setters

Page 29: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Le model

La classe « Model » est un Helper

Page 30: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Le model

Import / Export de la base en YML

Import natif dans play

Export avec le module YML(version 1.0)– http://github.com/sim51/logisima-play-yml

Page 31: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

A la découverte de play! :Les controllers

Page 32: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les controllers

Doit étendre la classe « Controller »

Possède que des méthodes public static void

Une méthode est appelée selon une route

Un controller donne accès à plusieurs méthode de rendu

Json

Xml

Pdf

On peut chainer les actions

Redirection

En appelant directement la méthode : Application.index()

Page 33: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les controllers

Page 34: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les controllers

Les paramètres d'entrées des Controlleurs

Ce sont les variables en GET / POST / DELETE / PUT

Les GET peuvent être défini dans le fichier de routes

Il n'y pas que des types simples, on peut y mettre des objets de notre model. Ces objets seront créée via les paramètres de la request. Exemple :– resto.name– resto.url– ...

Page 35: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les controllers

Les paramètres de sorties des controlleurs

Il suffit d'ajouter les objets à la méthode render

exemple :– render("Public/resto/show.html", resto, randomID) ;

Ou d'appeler la méthode renderArgs– renderArgs.put(« resto », resto);

Sinon, il y a les différents scopes

Page 36: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les scopes

Application

Session

Stocké dans un cookie sécurisé et accéssible durant toute la session de l'utilisateur (4Kb).

Flash

Stocké dans un cookie sécurisé et uniquement accessible par la prochaine requête (4Kb).

Request

Pour tout le reste, il y a le cache !

Page 37: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les controllers

Les fichiers de rendu

Par défaut Play! cherche le fichier suivant :– app/views/[Classe Name]/[Methode Name].html– app/views/Application/index.html

Mais on peut spécifier un fichier– render("Public/resto/show.html", resto);

Page 38: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les controllers

C'est bien beau de ne plus

avoir la « servlet-api »,

mais comment je fais pour faire un filtre ?

Page 39: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les controllers

Il existe les intercepteurs !@Before

– Exécute la méthode annotée avant chaque action du Controller. On peut exclure certaine action (unless={« login », « logout »}), ou définir seulement quelques actions (only={« login », « logout »})

@After

– Exécute la méthode annotée s'exécute après chaque action du Controller.

Page 40: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les controllers

@Finally

– Exécute la méthode annotée après chaque résultat d'action du Controller.

@With

– Permet de déléguer les intercepteur à une classe.

Les intercepteurs s'appliquent même aux sous-classes !

Page 41: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

A la découverte de play! :Les templates

Page 42: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les templates

La Syntax

Expressions : ${ … }

– Permet d'afficher une variable: ${resto.name}Messages : &{ … }

– I18N. Affiche la valeur correspondant à la clef (définie dans le fichier conf/messages)

Actions (reverse Route):

– @{ …} : génère l'URI de l'action : @{Application.index()}

– @@{ …} : génère une URL absolueCommentaires : *{ … }*

Scripts : %{ … }%

Page 43: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les templates

Les décorateursFichier html de template parent

Un template hérite du décorateur

#{get /}, #{set /}, #{extend /} & #{doLayout /}

Page 44: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les templates

Les Tags : #{tagName /}Un tag est un fragment de HTML qui peut être appelé avec des paramètres.

Un tag correspond à un fichier devant absolument se trouver dans le répertoire « app/views/tags », et le nom du tag correspond au nom du fichier.

Les paramètres passés au tag sont accessibles dans le tag via _[le nom de mon paramètre]

Page 45: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les templates

Les Tags : #{tagName /}Exemple d'appel :

Le fichier article.html :

Page 46: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les templates

Les extensions

Certaines méthodes sont ajoutés au objets dans les templates :

– Date|format() : pour formater une date : ${myDate.format('dd MMMM yyyy hh:mm:ss')}

– String|escapeHtlm() : pour échapper le code html

– String|nl2br() : remplace les sauts de ligne par des <br/>

– String|raw() : pour ne pas échapper le code html.

– …

Il est à noter que Play ! échappe automatiquement tous les textes.

http://www.playframework.org/documentation/1.1/javaextensions

Page 47: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les templates

Les extensions personnaliséesIl est possible de créer ses propres extensions !

Il suffit de créer une classe

– qui étend de JavaExtensions– Contenant des méthodes public static

Page 48: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

A la découverte de play! :Les jobs

Page 49: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Les Jobs

Doit étendre la classe « Job »

@Every(«1d»)

@On(«0 0 12 * * *)– CRON expression

@OnApplicationStart

Page 50: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

Pour aller plus loin ...

Page 51: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La validation

Page 52: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La validation

3 façons de valider une requête :

Directement dans le controller en appelant la méthode « validation ».

En ajoutant les annotations dans la déclaration des paramètres de la méthode.

Dans le POJO en ajoutant les annotations, et en ajoutant @valid dans la déclaration du pojo comme paramètre de la méthode.

Page 53: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La validation

Méthode 1

Page 54: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La validation

Méthode 2

Page 55: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La validation

Méthode 3

Page 56: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La validation

Dans les templates

Page 57: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La validation

Les validateurs :

Email : vérifie que le champ est une adresse mail

– validation.email(mail)

– @Email String mail

Equals : vérifie que le champ est égale à un autre (ex : password confirmation)

– validation.equals(password, passwordConfirmation)

– @Equals(« passwordConfirmation ») String password

Future : vérifie que la date est dans le future (en fonction de la date du jour ou de la date de référence passée en paramètre)

– validation.future(maDate) | validation.future(maDate, « 1971-12-31 »)

– @InFuture String maDate / @InFuture(« 1971-12-31 ») String maDate

Page 58: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La validation

Les validateurs :

IsTrue : vérifie que le champs est à « true » (String ,Boolean ou Number)– validation.isTrue(agree)

– @IsTrue String agree

Match : Le champ valide la regex– validation.match(abbreviation, "[A-Z]{3}")

– @Match("[A-Z]{3}") String abbreviation

Max : Vérifie que le champ n'est pas plus grand que la valeur spécifiée (Number et String)– validation.max(wordCount, 7500)

– @Max(7500) String wordCount

Page 59: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La validation

Les validateurs :

MaxSize : taille maximum du String– validation.maxSize(url, 2083) ;

– @MaxSize(2083) String value

Min : Vérifie que le champ est plus grand que la valeur spécifiée (Number et String) – validation.min(age, 18) ;

– @Min(18) Long age

MinSize : taille minimum du String– validation.minSize(value, 42) ;

– @MinSize(42) String value

Page 60: Formation Play! framework

Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.

La validation

Les validateurs :

Past : vérifie que la date est dans le passé (en fonction de la date du jour ou de la date de référence passée en paramètre)

– validation.past(actualDepartureDate) ; / validation.past(expectedDepartureDate, expectedArrivalDate);

– @Past String actualDepartureDate / @Past("1980-01-01") String birthDate

Range : min & max

– validation.range(wordCount, 17500, 40000) ;

– @Range(min = 17500, max = 40000) String wordCount

Required : le champ est obligatorie

– validation.required(value) ;

– @Required String value

Url : vérifie que le champ est une url valide

– @URL String address