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
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
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.
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.
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 => 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.
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 !
Info importante : beaucoup de perte de temps en dev.
Où le X-Wing fait exploserl’étoile noire.
Play 2 change beaucoup par rapport à Play 1 => Virageversl’éco-systèmeScala.
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
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.
A regarder en mode Diaporama (Shift + F5 :p ) pour êtrecompréhensible.En gros je décrit les différentsélements en donnant un exemples.
A regarder en mode Diaporama (Shift + F5 :p ) pour êtrecompréhensible.En gros je décrit les différentsélements en donnant un exemples.
A regarder en mode Diaporama (Shift + F5 :p ) pour êtrecompréhensible.En gros je décrit les différentsélements en donnant un exemples.
A regarder en mode Diaporama (Shift + F5 :p ) pour êtrecompréhensible.En gros je décrit les différentsélements en donnant un exemples.
A regarder en mode Diaporama (Shift + F5 :p ) pour êtrecompréhensible.En gros je décrit les différentsélements en donnant un exemples.
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.
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).
A
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.