SlideShare une entreprise Scribd logo
1  sur  26
Framework Play!
ZUBER Lionel
Ordre du jour

Le problème Java EE
Play! Principe de fonctionnement
Play in action !

Et pour les questions… N’attendez pas la fin !

2
Le problème Java EE
Architecture JEE standard
Réponse HTTP

Spring / CDI

Requête HTTP

• Mapping URI / Actions
• Constitution objets métiers a partir de la
•
•
•
•

requête
Constitution objets sessions à partir de la
session
Restaurations d’états
Conversions
Validations

4

JPA

JSF

XML

Serveur d’Applications
Et quand on monte en charge...
Serveur d’Applications
Serveur d’Applications

Serveur d’Applications

5

CACHE

Serveur d’Applications

SESSIONS

Serveur d’Applications
Et coté développements...

Code

• En moyenne coté déploiement…
• Démarrage du serveur : 2 min
• Redéploiement d’une application :
30s

Test

Compilation

• Effectués 50 fois par jour
• Presque 30 min de pertes

• En phase de « debug », la partie

Déploiement

déploiement est parfois la plus longue
du cycle.

6
Présentation générale du Framework
Historiques
• Base du framework posée en 2007 par Guillaume Bort
• Version 1.0 en Octobre 2009
• Entreprise Zenexity
• Version purement Java

• Version 2.0 en Mars 2012
• Entreprise Zenexity et Typesafe
• 1 version Java et 1 version Scala
• Se rapproche de l’eco-système Scala

8
Play! Un ensemble de technologie

Sbt

CoffeeScript

Less
Ebean

Google Closure
Compile
Jdbc
Yaml
Memcached

Akka
Heroku

Selenium

Logback

Junit

9
Les grands principes
• Respect de l’architecture Web (principe REST)

• Full-Stack Framework
•
•

Couvre toutes les phases : du développement à la production
Fournit une API pour les fonctionnalités nécessaires à l’élaboration d’une application Web

• Productif
•
•

Basé sur des concepts simples et prévisibles

Architecture minimum

• Forte Scalabilité
•
•

Framework stateless
Peu d’instanciation d’objets

• Testabilité
•
•

Intégration d’outils de test (Junit, Selenium)
Helper pour aider à leurs mises en places

10
Les petits plus
• Outils en ligne de commande complet (initialisation, packaging, console, …)
• Gestions des dépendances par le Framework
• Documentation disponible via le serveur de développement
• Compilation et déploiement « à la volée »
• Extensible
• Du source : toute API Java peut être incluse
• Du noyau : système de plugins

11
Architecture MVC
Annotations
JPA

routes
Controller
Java

Template
Scala

12

Models
Ebean
Architecture MVC
Annotations
JPA

routes
Controller
Java

Template
Scala

@(form: Form[forms.Login])
@main {BOUM} {Dashboard} {
@helper.form(routes.Application.authenticate) {
<h1>Sign in</h1>
@if(form.hasGlobalErrors) {
<p class="error">
@form.globalError.message
</p>
}
}
}
13

Models
Ebean
Architecture MVC
Annotations
JPA

routes
Controller
Java

Template
Scala

Models
Ebean

# Map static resources from the /public folder to the /assets URL path
GET
/assets/*file
controllers.Assets.at(path="/public", file)
# Authentication
GET
/login
controllers.Application.login()
POST
/login
controllers.Application.authenticate()
# Application de gestion de flux
GET
/flux
controllers.GesFlux.search(page:Int
?= 0, sortBy ?= "answerDate", sortOrder ?= "asc", ip ?= "", status:Int
?= 0)
14
Architecture MVC
Annotations
JPA

routes
Controller
Java

Template
Scala

public class Application extends Controller {
@Security.Authenticated(Secured.class)
public static Result index() {
return ok(index.render(""));
}
}

15

Models
Ebean
Architecture MVC
Annotations
JPA

routes
Controller
Java

Template
Scala

*/
@Entity
public class UserEntity extends Model implements BoumModel {
@Id
public String login;
public static Model.Finder<String,UserEntity> find = new
Finder<String, UserEntity>(String.class, UserEntity.class);
public static List<UserEntity> findAll() {
return find.all();
}
}

16

Models
Ebean
Cycle de vie

17
Et quand on monte en charge...
Serveur Play!
Load Balancing

Serveur Play!

Serveur Play!
Serveur Play!

18

CACHE

Serveur Play!
Les points faibles
• Documentation
•
•
•
•

Bonne approche mais pas assez exhaustive
Javadoc inexistante pour la partie template
Doc sur certains outils annexes (YML) inexistante
Exemple internet périmé (Play 1)

• Non-Standard
• Incompatible JEE

• Forte dépendance vis-à-vis du Framework
• Se séparer de Play! = Refondre complètement l’application

19
Démonstration
Cas pratique
• Vador veut une application pour gérer son tableau de chasse.

• Le lot 1 de l’application devra permettre au Jedi
•
•
•

D’afficher la liste de ses victimes
D’effectuer une recherche dans la liste
De rajouter un nouveau Jedi à la liste de ses victimes

• Yoda l’a nargué à de nombreuses reprises avec le pouvoir de Play! Le
seigneur noir veut donc voir cette étrange puissance en action…

21
Outils en ligne de commande
Les commandes externes Play

• play new: commande de création d’un nouveau projet. Crée l’arborescence et la
paramétrage par défaut.

• play : lance le shell play en mode standard
• play debug : lance le shell play en mode debug
Les commandes du Shell

• run : lance le serveur d’application en mode développement (rechargement
automatique)

•
•
•
•
•
•

test : lance les tests automatisés (unitaire et fonctionnel)
compile : lance la compilation
clean : fait le ménage dans les fichiers générés
eclipsify : prépare le projet eclipse
dist: crée le jar pour un déploiement standalone
console : passe en console interactive scala

22
Getting Started Eclipse

1. play new : on initialise le projet
2. play eclipsify : on initialise les fichiers de configurations eclipse
3. Import du projet dans Eclipse

Eclipse compile le code comme un projet standard.
Après l’ajout d’un nouveau template ou d’une nouvelle dépendance, relancer eclipsify,
et rafraichir le projet.

23
Arborescence
• /app: dossier contenant les sources applicatives
• /test : dossier contenant les sources des tests unitaires ou fonctionnels
• /conf : configuration général de l’application
• /application.conf : properties principales de l’application (bdd, logger, langue)
• /routes : configuration des urls

• /logs : log applicatif de l’application
• /project : fichier concernant le packaging et la configuration play
• /Build.scala : packaging (dépendances, fonctions spécifiques, versionning)
• /plugins.sbt : ajout et mise à disposition de plugin Play

• /public : ressources utilisable dans l’application (Fichier
css, images, javascript)

• /target : dossier contenant les binaires et résultats de packaging

24
Package Applicatif
• controllers : contient toutes les classes de controllers de l’application.
• models : modèles de données persistés en base (class Ebean).
• views : template scala

25
Des questions ?

Site officiel : http://www.playframework.com/

Contenu connexe

Tendances

Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMXFranck SIMON
 
Déploiement d'applications Java EE
Déploiement d'applications Java EEDéploiement d'applications Java EE
Déploiement d'applications Java EEjavalabsf
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancertarkaus
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureCocoaHeads France
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)hibnico
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 
Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2Samy Dindane
 
Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Sylvain Wallez
 
Tech Days Spring Intégration
Tech Days Spring IntégrationTech Days Spring Intégration
Tech Days Spring IntégrationArrow-Institute
 
20091008 Tests Interaces Web Riches Selenium
20091008   Tests Interaces Web Riches Selenium20091008   Tests Interaces Web Riches Selenium
20091008 Tests Interaces Web Riches SeleniumGreenIvory
 
Tests ihm automatises avec selenium
Tests ihm automatises avec seleniumTests ihm automatises avec selenium
Tests ihm automatises avec seleniumsojavawest
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2Hugo Hamon
 
Introduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @DogstudioIntroduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @DogstudioNicolas Widart
 

Tendances (20)

Netbeans Install
Netbeans InstallNetbeans Install
Netbeans Install
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMX
 
Déploiement d'applications Java EE
Déploiement d'applications Java EEDéploiement d'applications Java EE
Déploiement d'applications Java EE
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancer
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume Faure
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 
Selenium
SeleniumSelenium
Selenium
 
Laravel Blade
Laravel BladeLaravel Blade
Laravel Blade
 
Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2
 
Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011
 
ParisJUG Spring Boot
ParisJUG Spring BootParisJUG Spring Boot
ParisJUG Spring Boot
 
Tech Days Spring Intégration
Tech Days Spring IntégrationTech Days Spring Intégration
Tech Days Spring Intégration
 
20091008 Tests Interaces Web Riches Selenium
20091008   Tests Interaces Web Riches Selenium20091008   Tests Interaces Web Riches Selenium
20091008 Tests Interaces Web Riches Selenium
 
Tests ihm automatises avec selenium
Tests ihm automatises avec seleniumTests ihm automatises avec selenium
Tests ihm automatises avec selenium
 
Apache Maven 3
Apache Maven 3Apache Maven 3
Apache Maven 3
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
Introduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @DogstudioIntroduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @Dogstudio
 

En vedette

Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaYevgeniy Brikman
 
Play : Premiers pas par l'exemple le 120613
Play : Premiers pas par l'exemple le 120613Play : Premiers pas par l'exemple le 120613
Play : Premiers pas par l'exemple le 120613SOAT
 
Play! Framework at GenevaJUG by Guillaume Bort
Play! Framework at GenevaJUG by Guillaume BortPlay! Framework at GenevaJUG by Guillaume Bort
Play! Framework at GenevaJUG by Guillaume BortGenevaJUG
 
Apache Camel
Apache CamelApache Camel
Apache CamelGenevaJUG
 
Play Framework: The Basics
Play Framework: The BasicsPlay Framework: The Basics
Play Framework: The BasicsPhilip Langer
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-DurandSOAT
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Saeed Zarinfam
 
Play! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersPlay! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersTeng Shiu Huang
 
Vom verschmutzen Schild zur Problemlösung - Wie funktionieren Anliegenmanage...
Vom verschmutzen Schild zur Problemlösung -  Wie funktionieren Anliegenmanage...Vom verschmutzen Schild zur Problemlösung -  Wie funktionieren Anliegenmanage...
Vom verschmutzen Schild zur Problemlösung - Wie funktionieren Anliegenmanage...arbeitsweltdergeographie
 
PROYECTO GRUPO 6
PROYECTO GRUPO 6PROYECTO GRUPO 6
PROYECTO GRUPO 6Dayana Mora
 
Project 2010 identifier les projets critiques pour votre entreprise et les gé...
Project 2010 identifier les projets critiques pour votre entreprise et les gé...Project 2010 identifier les projets critiques pour votre entreprise et les gé...
Project 2010 identifier les projets critiques pour votre entreprise et les gé...Microsoft Décideurs IT
 
HARDWARE Y SOFTWARE
HARDWARE Y SOFTWAREHARDWARE Y SOFTWARE
HARDWARE Y SOFTWAREmelanyfarnes
 
Parcours linéaire & km 2015
Parcours linéaire & km 2015Parcours linéaire & km 2015
Parcours linéaire & km 2015Joseph Nodin
 

En vedette (20)

Why Play Framework is fast
Why Play Framework is fastWhy Play Framework is fast
Why Play Framework is fast
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
Play : Premiers pas par l'exemple le 120613
Play : Premiers pas par l'exemple le 120613Play : Premiers pas par l'exemple le 120613
Play : Premiers pas par l'exemple le 120613
 
Play! Framework at GenevaJUG by Guillaume Bort
Play! Framework at GenevaJUG by Guillaume BortPlay! Framework at GenevaJUG by Guillaume Bort
Play! Framework at GenevaJUG by Guillaume Bort
 
Apache Camel
Apache CamelApache Camel
Apache Camel
 
Play Framework: The Basics
Play Framework: The BasicsPlay Framework: The Basics
Play Framework: The Basics
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)
 
Play! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersPlay! Framework for JavaEE Developers
Play! Framework for JavaEE Developers
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
Scala vs Ruby
Scala vs RubyScala vs Ruby
Scala vs Ruby
 
Node.js vs Play Framework
Node.js vs Play FrameworkNode.js vs Play Framework
Node.js vs Play Framework
 
Vom verschmutzen Schild zur Problemlösung - Wie funktionieren Anliegenmanage...
Vom verschmutzen Schild zur Problemlösung -  Wie funktionieren Anliegenmanage...Vom verschmutzen Schild zur Problemlösung -  Wie funktionieren Anliegenmanage...
Vom verschmutzen Schild zur Problemlösung - Wie funktionieren Anliegenmanage...
 
PROYECTO GRUPO 6
PROYECTO GRUPO 6PROYECTO GRUPO 6
PROYECTO GRUPO 6
 
LAS RSS
LAS RSS LAS RSS
LAS RSS
 
Project 2010 identifier les projets critiques pour votre entreprise et les gé...
Project 2010 identifier les projets critiques pour votre entreprise et les gé...Project 2010 identifier les projets critiques pour votre entreprise et les gé...
Project 2010 identifier les projets critiques pour votre entreprise et les gé...
 
Bulletin de-veille-n°9
Bulletin de-veille-n°9Bulletin de-veille-n°9
Bulletin de-veille-n°9
 
HARDWARE Y SOFTWARE
HARDWARE Y SOFTWAREHARDWARE Y SOFTWARE
HARDWARE Y SOFTWARE
 
Le Mag Sud Ouest
Le Mag Sud OuestLe Mag Sud Ouest
Le Mag Sud Ouest
 
Parcours linéaire & km 2015
Parcours linéaire & km 2015Parcours linéaire & km 2015
Parcours linéaire & km 2015
 

Similaire à Play Framework

Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Julien Dubois
 
20080923 04 - Selenium web application testing system
20080923 04 - Selenium web application testing system20080923 04 - Selenium web application testing system
20080923 04 - Selenium web application testing systemLeClubQualiteLogicielle
 
CI-Jenkins.pptx
CI-Jenkins.pptxCI-Jenkins.pptx
CI-Jenkins.pptxMEDOBEST1
 
Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm
 
Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!Bilel McSam
 
20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven developmentLeClubQualiteLogicielle
 
0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdfOmbotimbe Salifou
 
Un exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPUn exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPKristen Le Liboux
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsFactoVia
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsAZUG FR
 
Migrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaMigrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaCédric Leblond
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipseISIG
 

Similaire à Play Framework (20)

Présentation1
Présentation1Présentation1
Présentation1
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
 
#6 Outils De Developpement
#6 Outils De Developpement#6 Outils De Developpement
#6 Outils De Developpement
 
20080923 04 - Selenium web application testing system
20080923 04 - Selenium web application testing system20080923 04 - Selenium web application testing system
20080923 04 - Selenium web application testing system
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
CI-Jenkins.pptx
CI-Jenkins.pptxCI-Jenkins.pptx
CI-Jenkins.pptx
 
Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux
 
J platform
J platformJ platform
J platform
 
Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!
 
20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development
 
0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf
 
Un exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPUn exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHP
 
Octo Maven.pdf
Octo Maven.pdfOcto Maven.pdf
Octo Maven.pdf
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
 
Migrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaMigrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds Java
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipse
 
2
22
2
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 

Play Framework

  • 2. Ordre du jour Le problème Java EE Play! Principe de fonctionnement Play in action ! Et pour les questions… N’attendez pas la fin ! 2
  • 4. Architecture JEE standard Réponse HTTP Spring / CDI Requête HTTP • Mapping URI / Actions • Constitution objets métiers a partir de la • • • • requête Constitution objets sessions à partir de la session Restaurations d’états Conversions Validations 4 JPA JSF XML Serveur d’Applications
  • 5. Et quand on monte en charge... Serveur d’Applications Serveur d’Applications Serveur d’Applications 5 CACHE Serveur d’Applications SESSIONS Serveur d’Applications
  • 6. Et coté développements... Code • En moyenne coté déploiement… • Démarrage du serveur : 2 min • Redéploiement d’une application : 30s Test Compilation • Effectués 50 fois par jour • Presque 30 min de pertes • En phase de « debug », la partie Déploiement déploiement est parfois la plus longue du cycle. 6
  • 8. Historiques • Base du framework posée en 2007 par Guillaume Bort • Version 1.0 en Octobre 2009 • Entreprise Zenexity • Version purement Java • Version 2.0 en Mars 2012 • Entreprise Zenexity et Typesafe • 1 version Java et 1 version Scala • Se rapproche de l’eco-système Scala 8
  • 9. Play! Un ensemble de technologie Sbt CoffeeScript Less Ebean Google Closure Compile Jdbc Yaml Memcached Akka Heroku Selenium Logback Junit 9
  • 10. Les grands principes • Respect de l’architecture Web (principe REST) • Full-Stack Framework • • Couvre toutes les phases : du développement à la production Fournit une API pour les fonctionnalités nécessaires à l’élaboration d’une application Web • Productif • • Basé sur des concepts simples et prévisibles Architecture minimum • Forte Scalabilité • • Framework stateless Peu d’instanciation d’objets • Testabilité • • Intégration d’outils de test (Junit, Selenium) Helper pour aider à leurs mises en places 10
  • 11. Les petits plus • Outils en ligne de commande complet (initialisation, packaging, console, …) • Gestions des dépendances par le Framework • Documentation disponible via le serveur de développement • Compilation et déploiement « à la volée » • Extensible • Du source : toute API Java peut être incluse • Du noyau : système de plugins 11
  • 13. Architecture MVC Annotations JPA routes Controller Java Template Scala @(form: Form[forms.Login]) @main {BOUM} {Dashboard} { @helper.form(routes.Application.authenticate) { <h1>Sign in</h1> @if(form.hasGlobalErrors) { <p class="error"> @form.globalError.message </p> } } } 13 Models Ebean
  • 14. Architecture MVC Annotations JPA routes Controller Java Template Scala Models Ebean # Map static resources from the /public folder to the /assets URL path GET /assets/*file controllers.Assets.at(path="/public", file) # Authentication GET /login controllers.Application.login() POST /login controllers.Application.authenticate() # Application de gestion de flux GET /flux controllers.GesFlux.search(page:Int ?= 0, sortBy ?= "answerDate", sortOrder ?= "asc", ip ?= "", status:Int ?= 0) 14
  • 15. Architecture MVC Annotations JPA routes Controller Java Template Scala public class Application extends Controller { @Security.Authenticated(Secured.class) public static Result index() { return ok(index.render("")); } } 15 Models Ebean
  • 16. Architecture MVC Annotations JPA routes Controller Java Template Scala */ @Entity public class UserEntity extends Model implements BoumModel { @Id public String login; public static Model.Finder<String,UserEntity> find = new Finder<String, UserEntity>(String.class, UserEntity.class); public static List<UserEntity> findAll() { return find.all(); } } 16 Models Ebean
  • 18. Et quand on monte en charge... Serveur Play! Load Balancing Serveur Play! Serveur Play! Serveur Play! 18 CACHE Serveur Play!
  • 19. Les points faibles • Documentation • • • • Bonne approche mais pas assez exhaustive Javadoc inexistante pour la partie template Doc sur certains outils annexes (YML) inexistante Exemple internet périmé (Play 1) • Non-Standard • Incompatible JEE • Forte dépendance vis-à-vis du Framework • Se séparer de Play! = Refondre complètement l’application 19
  • 21. Cas pratique • Vador veut une application pour gérer son tableau de chasse. • Le lot 1 de l’application devra permettre au Jedi • • • D’afficher la liste de ses victimes D’effectuer une recherche dans la liste De rajouter un nouveau Jedi à la liste de ses victimes • Yoda l’a nargué à de nombreuses reprises avec le pouvoir de Play! Le seigneur noir veut donc voir cette étrange puissance en action… 21
  • 22. Outils en ligne de commande Les commandes externes Play • play new: commande de création d’un nouveau projet. Crée l’arborescence et la paramétrage par défaut. • play : lance le shell play en mode standard • play debug : lance le shell play en mode debug Les commandes du Shell • run : lance le serveur d’application en mode développement (rechargement automatique) • • • • • • test : lance les tests automatisés (unitaire et fonctionnel) compile : lance la compilation clean : fait le ménage dans les fichiers générés eclipsify : prépare le projet eclipse dist: crée le jar pour un déploiement standalone console : passe en console interactive scala 22
  • 23. Getting Started Eclipse 1. play new : on initialise le projet 2. play eclipsify : on initialise les fichiers de configurations eclipse 3. Import du projet dans Eclipse Eclipse compile le code comme un projet standard. Après l’ajout d’un nouveau template ou d’une nouvelle dépendance, relancer eclipsify, et rafraichir le projet. 23
  • 24. Arborescence • /app: dossier contenant les sources applicatives • /test : dossier contenant les sources des tests unitaires ou fonctionnels • /conf : configuration général de l’application • /application.conf : properties principales de l’application (bdd, logger, langue) • /routes : configuration des urls • /logs : log applicatif de l’application • /project : fichier concernant le packaging et la configuration play • /Build.scala : packaging (dépendances, fonctions spécifiques, versionning) • /plugins.sbt : ajout et mise à disposition de plugin Play • /public : ressources utilisable dans l’application (Fichier css, images, javascript) • /target : dossier contenant les binaires et résultats de packaging 24
  • 25. Package Applicatif • controllers : contient toutes les classes de controllers de l’application. • models : modèles de données persistés en base (class Ebean). • views : template scala 25
  • 26. Des questions ? Site officiel : http://www.playframework.com/

Notes de l'éditeur

  1. Chapitre 1 : C’estlàoù on vatroller un peucontre JEE.Chapitre 2 : Présentation des grandsprincipes de fonctionnements du Frameworks.Chapitre3 : On montre le fonctionnement en direct live avec du code.
  2. Java EE c’estcommel’étoile noire :Quandils’agitd’abattreuneplanète, c’est le top.Quandils’agitd’abattre le petit X-Wing qui tourneautour, çadevientdur de viser...Bref, Java EE n’est pas adapté à tous les projets. Il s’agitavant tout d’uneénormeUsine à Gaz.
  3. Lanorme J2EE (et particulièrement JSF) estunesurcouche qui se pose au dessus du protocole HTTP de base. Il essayed’étendre les fonctionnalités de base du Web pour créer des applications statefull.Conséquence =&gt; Beaucoup de complexité et de traitementscachés.Pour beaucoup de développeur Junior, ceque fait le framework ressemble à de la magie (La force Luke, utilise la Force...).Au final, Java estconsidérécommeComplexe par les développeurs.
  4. En front : Cluster, Load Balancing ? Que faire de la session ? Soitchaqueserveur à une session et on garantiqu’unutilisateurconnectéretombetoujourssur le mêmeserveur.Si on veut de la perf, ilfaudra en plus rajouter du cache.Résultat : - Beaucoup de configurations- Attention à la tolérance au panne !
  5. Info importante : beaucoup de perte de temps en dev.
  6. Où le X-Wing fait exploserl’étoile noire.
  7. Play 2 change beaucoup par rapport à Play 1 =&gt; Virageversl’éco-systèmeScala.
  8. Au centre : Java et Scala.Mais Play! s’appuiesur pas mal de technologies différentes : - Soit en interne pour sesmécanismes - Soit en offrant les interfaces pour les intégréesaiséments
  9. REST : URL simple et Bookmarkable Utilisation et respectsdes actions du protocoles HTTP (GET, POST, PUT, DELETE, HEAD...) Stateless (deuxappels HTTP sonttotalementsindépendants).Scalabilité = Capacité de montée en charge.
  10. A regarder en mode Diaporama (Shift + F5 :p ) pour êtrecompréhensible.En gros je décrit les différentsélements en donnant un exemples.
  11. A regarder en mode Diaporama (Shift + F5 :p ) pour êtrecompréhensible.En gros je décrit les différentsélements en donnant un exemples.
  12. A regarder en mode Diaporama (Shift + F5 :p ) pour êtrecompréhensible.En gros je décrit les différentsélements en donnant un exemples.
  13. A regarder en mode Diaporama (Shift + F5 :p ) pour êtrecompréhensible.En gros je décrit les différentsélements en donnant un exemples.
  14. A regarder en mode Diaporama (Shift + F5 :p ) pour êtrecompréhensible.En gros je décrit les différentsélements en donnant un exemples.
  15. On décrit le cycle de vie. Au final on reprend unpeu le slide précédentmais en montrant le mécanismevis à vis de la requête HTTP.
  16. Plus de session à gérer.Chaquerequêteestpleinementindépendante : un utilisateurpeutêtre balancer d’un serveur à un autre de façontotalementtransparente.Une session liteexistecoté client maiselleesttranmises à chaquerequête HTTP (mécanisme de cookies).
  17. A
  18. A partir du slide suivant, cesontavant tout des aides mémoires. Si vousêtes tout seul, le mieux pour la suite est de prendre la doc et d’essayer de refairel’exemple. Le projet Play sera mis à disposition à coté de ses slides.