COURS GRAILS - myuuu.frmyuuu.fr/cours/MBDS/Grails/cours_grails.pdf · Basé sur le langage Groovy !...

Preview:

Citation preview

COURS GRAILS Novembre 2013

Introduction – Programme – Planning – Rappels

Introduction 2

Introduction ¤ Grégory Galli

¤ Tokidev S.A.S. n Consulting, Bureau d’étude,

développement informatique.

n www.tokidev.fr

3

Avant de commencer ¤ Posez des questions !

n Si un point ne vous semble pas clair, n’hésitez pas à me poser des questions.

¤ Me contacter en dehors du cours n Si vous avez besoin d’aide en dehors des horaires de cours,

contactez moi par e-mail : greg.galli@tokidev.fr n Pour le cours ou vos projets.

4

Avant de commencer

¤ Google est votre ami ! n Si vous rencontrez un problème, ayez le réflexe de chercher

sur internet… la réponse y sera la plupart du temps !

¤ Débug n Développement web : Inspecteur (Chrome/Firebug) n Développement Grails : Débug pas à pas comme en Java

5

Planning

¤ Lundi 18 Novembre n Cours : 8h30 – 11h30 n TD : 13h – 16h

¤ Mercredi 20 Novembre n Cours : 8h30 – 11h30 n TD : 13h – 16h

6

¤ Mardi 19 Novembre n Cours : 8h30 – 11h30 n TD : 13h – 16h

Rappel : MVC

Modèle

Vue

Contrôleur

7

Rappel : Web Services

¤ Programme informatique permettant la communication et l’échange de données entre applications.

¤ Deux principaux types de Web Services :

n SOAP (WSDL / UDDI) n REST

8

Rappel : Serveur d’application ¤ Machine ou service pour l’hébergement d’applications à

exécuter côté client ¤ Quelques exemples :

n  JBOSS n  Apache Tomcat n  Glassfish n  Websphere n  …

9

Présentation Générale 10

Grails, c’est quoi ?

¤ Né en 2005, initié par Graeme Rocher ¤ Framework open source de développement agile ¤ Basé sur le langage Groovy ¤ Groovy on Rails (agile) > Grails ¤ Construit sur un modèle MVC

11

Groovy, c’est quoi ?

¤ Langage OO destiné à la plateforme Java ¤ Alternative inspirée de Python, Ruby et Smalltalk ¤  Intégré et compatible avec la JVM

n On peux utiliser des librairies Java n Être utilisé directement dans des classes Java

12

Philosophie : les cinq fondamentaux

¤ DRY : Don’t Repeat Yourself ¤ Développement rapide

n  Prototypage n  Scaffolding

n  Gros projets ¤ Architecture orientée modèle ¤ Convention plutôt que configuration ¤  Exploite la puissance de la JVM : compilation en bytecode Java

13

Avantages ¤ Web MVC : Facile à utiliser ¤ GSP : Langage de template simple et complet ¤ Serveur embarqué ¤ GORM : Modélisation et accès aux données ¤ Base de donnée simulée (développement) ¤  Internationalisation ¤ Tests & Tests unitaires ¤ Documentation très riche

14

Créer un projet : 3 étapes

¤ Création des classes de domaine

¤ Scaffold

¤ Run

15

Plugins

¤ Tomcat ¤ Hibernate ¤ Très nombreux ¤ Accélèrent grandement le développement ¤ Ne pas en abuser ¤ Twitter Bootstrap

16

Hibernate – GORM – Structure d’un projet

Présentation – Composants principaux 17

Hibernate

¤ Framework open source de persistance ¤ Adaptable à tous les serveurs d’application / web ¤ Remplacement d’une DAL classique

n Appel de méthodes objets de haut niveau

¤ Pluggable sur n’importe quel type de BDD ¤ Utilisé dans le cadre du développement Grails via GORM

18

GORM

¤ Grails Object Relational Mapping ¤  Illusion de base de donnée

orientée objet ¤ Correspondance monde objet /

monde relationnel n Appel de méthodes objets de haut

niveau

19

def book = Book.findByTitle("Groovy in Action") book .addToAuthors(name:"Dierk Koenig") .addToAuthors(name:"Guillaume LaForge") .save()

grails create-domain-class org.bookstore.Book

GORM vs DAL Classique

¤ Avantages

n Réduction de la quantité de code n Binding poussé

n  Pas de SQL pour des requêtes simples n  On appelle directement les objets que l’on a créé

n Méthodes dynamiques

20

GORM vs DAL Classique 21

¤ Désavantages

n On ne sait pas ce qui se passe derrière n On rajoute une couche à Performances n Connaissances requises pour une utilisation efficace n Sans compréhension du concept et des mécaniques, l’échec est assuré

Composants d’un projet Grails ¤ Config ¤ Domain : Définition du modèle ¤ Controller : Contrôleurs web ¤  i18n : Internationalisation ¤  Service : Couche de service ¤ View : Groovy Server Pages ¤  SRC : Autre sources (Java / Groovy) ¤  Test : Tests unitaires et d’intégration ¤ Web-app : ressources web

22

Config

Présentation – Eléments principaux 23

Config 24

¤  Config : Configuration du projet ¤  DataSource

n  Liens base de données n  Configuration

¤  BuildConfig ¤  UrlMapping

n  Règles de redirections n  REGEXP

¤  ApplicationResources n  Module gestion de ressource (Grails 2.0)

Ressources 25

¤ Plugin de base inclus depuis la version 2.0 de Grails

¤ Gestion des ressources web n  Javascript n CSS

¤ Optimisation n Compression n Concaténation

DataSources 26

¤ Configurations base de données n Différentiation Production / Test /

Production n dbCreate : Paramètre important qui

définit le comportement au lancement du projet

n  create n  create-drop n  update

BuildConfig 27

¤ Configurations des dépendances ¤  Port de déploiement ¤ Configuration des plugins

n  runtime n  build n  compile n  test n  provided

UrlMapping 28

¤ Configuration des redirections n Expressions régulières n Vers des controllers / actions n Vers des vues

UrlMapping 29

¤ Définitions complexes et contraintes : n $ : permets de pré-nommer des

variables n Expressions régulières pour des

besoins particuliers n Définitions bi-directionnelles

Model – View – Controller – Services – Gettext

Présentation – Eléments principaux 30

Modèle 31

¤ Attributs de la classe ¤ hasMany / hasOne ¤ constraints ¤ mapping ¤ mappedBy ¤ Constructeurs ¤ Méthodes de classe

Controlleur 32

¤  Lien vers les vues ¤  Traitement léger ¤  beforeInterceptor ¤  allowedMethods ¤  Retour vers les vues

n  Render n  Redirect n  [] n  XML / JSON Converters

Controlleur 33

¤ Comportement par défaut n Renvoi à la vue correspondante n Sinon, méthodes à disposition

n  Redirect n  Render n  []

¤ Exemple: n Controllers /

FrontController.groovy n  Méthode index

n Views/Front/index.gsp

i18n 34

¤  Internationalisation ¤  Injection via gettext ¤ 17 langues par défaut  ¤  ${message (code:’’lb.hello’’)}

¤  <g:message code=’’lb.hello’’/> ¤  <g:message code="my.localized.content" args="$

{ ['Juan', 'lunes'] }" /> n  my.localized.content=Hola, Me llamo {0}. Hoy es {1}.

n  render : Hola, Me llamo Juan. Hoy es lunes.

i18n 35

¤ Cas complexes n  Injection de message dans un message

n  message(code: 'default.not.found.message', args: [message(code: 'congres.label', default: 'Congres'), id])

n  code: 'default.not.found.message' n  args: [message(code: 'congres.label', default: 'Congres'), id]

Service 36

¤ Traitements lourds n  Injection dans les controlleurs

¤ Threading possible n Attention au contexte Hibernate

¤ Langages Java / Groovy ¤ Eviter les manipulation de BDD

autant que possible

Service 37

¤ Conservation du contexte de persistance n Possible mais à éviter n Si on ne peux faire autrement

Vues 38

¤  Index n  <meta name="layout" content="main"/>

¤  ${ … } ¤  <% … %>

n 

¤  <g:xxx /> ¤  Resources accessible (grailsApplication)

Vues - Layout 39

¤  Default title ¤  <g:layoutHead />

¤  <r:layoutResources />

¤  <g:layoutBody />

¤  <r:layoutResources />

Web app 40

¤ Web-app /css /images /js /meta-inf /web-inf

Grails 2.0.0 41

¤ Version majeure riche en fonctionnalités n  Intégration de base du plugin Resources n Amélioration des test unitaires et d’intégration n HTML5 dans le scaffolding n Nouvelle console

¤ Version à utiliser : 2.2.4

Préparation de l’environnement de travail

Un peu de pratique ! 42

Modélisation 43

¤ Création du modèle n Accès à tous les types de base (Int, String, Boolean) n Création d’une relation 1..n

n  static hasMany = [nomDeLaCollection:Object]

n Création d’une relation 1..1 : Comme un attribut quelconque n  Utilisation possible de la propriété hasOne

Modélisation 44

¤ Création du modèle

n  Définition des attributs n  Relations n  Contraintes

Modélisation 45

¤ Possibilité d’héritage n Eviter si possible à Gourmand en ressources n Récupération des attributs du parent

Modélisation – Relations 46

¤ Très important n Définition du « responsable » d’une

association via la propriété « belongsTo »

n  Je crée un objet « Roue » qui belongsTo « Vehicule », si j’efface le véhicule, ma roue sera effacé elle aussi car une relation forte est définie entre les deux objets

Modélisation – Relations 47

¤ Si je définie deux classes Roue et Véhicule: n Roue belongsTo Vehicule

n  Dépendance forte n  Une roue ne peux pas être créée seule n  Nécessité de créer un véhicule et d’y

attacher la roue

Modélisation - Contraintes 48

¤  Propriété constraints n  Permets de définir les contraintes sur les propriétés de nos classes

n  unique n  blank n  nullable n  size n  url n  mail n  max, maxSize …

n  http://grails.org/doc/latest/ref/Constraints/Usage.html

Modélisation - Mapping 49

¤ Propriété mapping n Permets de personnaliser les noms des champs générés par GORM

dans la base de donnée

n  Définir si un attribut dois être caché par défaut

n  static mapping = { table bool cache usage: 'read-only', include: 'non-lazy' }

Modélisation - Mapping 50

¤ Propriété mapping n Permets de personnaliser les propriété de jointure si on ne veux pas

garder les propriété par défaut

Modélisation - Mapping 51

¤ Propriété mapping n  Lazy loading

n  Par défaut si un objet possède une référence sur un autre objet, ce dernier ne sera pas chargé en mémoire, si on désire que le comportement de base soit différent, il faut l’expliciter.

n  static mapping = { books lazy:false

}

Modélisation - Mapping 52

¤  Propriété mapping n  Les comportements comme les transactions et les cascades SQL peuvent être définies

dans ce bloc n  static mapping = {

book lazy: false, cascade:"all,delete-orphan“ }

n  Si l’on désire que la modification d’un objet parent affecte l’objet fils, on dois définir le fils comme appartenant au parent (relation forte), si on ne désire pas définir d’appartenance, il faut alors expliciter les comportements

n  Sinon : Faisable à la main

Modélisation - Mapping 53

¤ Propriété mapping

n De très nombreuses adaptations sont possible, lire la documentation si vous êtes dans un cas particulier

n http://grails.org/doc/latest/guide/GORM.html

Manipulation des objets 54

¤ Requêtes sur une base de donnée via GORM n Récupération par ID : Object.get(id) n Récupération de tous les objets :

n  Object.list() n  Object.getAll()

n Requête sur propriété : n  Object.findByName(‘’lenom’’) n  Object.findAllByName(‘’lenom’’)

Manipulation des objets 55

Manipulation des objets 56

Manipulation des objets 57

¤ Sauvegarde n objectInstance.save()

n  Options : n  Flush : quand défini à « true », persiste l’objet immédiatement n  Validate : valide la persistance de l’objet n  Insert : force hibernate à utiliser un INSERT(true) ou un UPDATE (false n  failOnError : si la persistance echoue, une exception sera levée

(souvent utilisé dans le bootstrap) n  deepValidate : défini si les objets fils doivent eux aussi être validé

Manipulation des objets 58

¤ Ajout n vehiculeInstance.addToRoues(new Roue(..))

¤ Suppression n objectInstance.delete()

n  Options : n  Flush : quand défini à « true », persiste l’objet immédiatement

n vehiculeInstance.removeFromRoues(roueInstance)

Plugin : Resource 59

¤ Gestion des ressources n  Images n CSS n  Javascript

¤ Gestion via des modules n Fichier « ApplicationResources.groovy »

n  Dépendances n  Héritage

Plugin : Resource 60

¤ Utilité n Cache n  Importations optimisées dans les pages n Minimize n Concaténation de fichiers n Création de bundles

Plugin : Resource 61

¤ Utilisation dans les pages n  Importation de modules

n  <r:require module=‘’moduleName’’/> n  <r:require modules=‘’[moduleName1, moduleName2]’’

n Utilisation d’images n  <g:img/> à la place de la balise <img/>

Plugin : Spring Security 62

¤ Gestion de la sécurité n Existe depuis longtemps n Utilisé dans de nombreux frameworks n Eprouvé n  Intégration facile n Options de base suffisantes n Potentiel de customisation

Plugin : Spring Security 63

¤ Modèle de base n Classes

n  User n  Role n  UserRole

n Controllers n  LoginController n  LogoutController

Plugin : Spring Security 64

¤ Contrôle fin de la sécurité n  Méthodes (actions) n  Controller n  Projet global

¤ Gestion d’une session n  Utilisateur couramment identifié accessible n  Exploitable depuis tous les composants

n  Controller n  Service n  Vues

Plugin : Spring Security 65

¤ TagLibs n <sec:ifLoggedIn> n <sec:ifNotLoggedIn>

Plugin : Spring Security 66

¤ Respectez les étapes n  Importation du plugin n Exécution de la commande de génération

n  S2-quickstart fr.mbds.cwitter User Role

n Modification des classes existantes n Ajout des utilisateurs dans le BootStrap

Plugin : Spring Security 67

¤ BootStrap

Plugin : Spring Security 68

¤ BootStrap

Documentation

¤ La documentation officielle sera votre première source d’information. n http://grails.org/doc/latest/guide/index.html

¤ Plugins n http://grails.org/plugins/

¤ Google ¤ Forums d’entraide

69

Merci à vous !

¤ N’hésitez pas à me contacter pout toute demande d’informations : n Grégory Galli n E-mail : greg.galli@tokidev.fr n Site Web : www.tokidev.fr

¤ Bonne continuation à tous !

70

Pratique

Réalisation d’une application « Twitter like »

Utilisation de tous les aspects de Grails

71

TP à réaliser 72

Recommended