1. Grails, from scratch to prod
… plus vite !
!"#$%&"'()*+,-& 12+3,().)2(%0+&-+#/(%01)
!"#$%&'(#')*+,-() 4+-5,67-).)678.99504&-#:+;-#4<"/9-#9(%0+&-+#/(%01)
./0+*).)(/(%0123+,-(450) 8*9:&.)678.99,&"=43+,-(450)
4. Qu'est-ce que Grails ?
! Framework d'application web complet
! MVC, basé sur le langage Groovy
! Inspiré de RoR, Django, TurboGears
! Adapté à la culture Java
! Bâti sur le roc
! Stack éprouvée : Spring, Hibernate, Tomcat
5. Buts
! Pile application web Java standard
! Fournir un niveau d'abstraction en plus
! Réduire la complexité
! En outillant l'existant
! Augmenter la productivité
! En scriptant les tâches répétitives
6. Approche
! Convention over configuration
! Principe de "défaut raisonnable"
! Don't repeat yourself
! Structure imposée pour réduire les duplications
! Plateforme complète
! Méthodologie et approche fournies
7. Histoire
! Janvier 2007
! Sortie de Groovy 1.0
! Février 2008
! Sortie de Grails 1.0
! Novembre 2008
! SpringSource rachète G2One
8. Rock Stars
! Guillaume Laforge (@glaforge)
! Leader Groovy chez SpringSource
! Graeme Rocher (@graemerocher)
! Leader Grails chez SpringSource
11. Simplifié par Groovy
! Syntaxe allégée
! Accessible à tous les développeurs Java
! Closures, Collections, Gpars, …
! L'essayer c'est l'adopter
! Scripts de génération de code
! Facilement extensible
16. Scaffolding
! Génération de CRUD à partir des entités
! Economie de temps
! Popularisé par Ruby on Rails
! Orienté schéma base de données
! Adopté par Grails
! Orienté domaine
23. GORM : Requêtage
class Book {
static namedQueries = {
withPotterInTitle {
like 'title', '%Potter%'
}
}
}
Book.withPotterInTitle.list()
24. Vues
! Groovy Server Pages
! HTML + Taglib groovy
! Assemblage par Sitemesh
! Commandé par tags GSP
! Taglib Grails (Prototype pour le JS)
! Formulaires, AJAX
25. Vues : exemples
<g:formRemote name="myForm"
on404="alert('not found!')"
update="updateMe" // onSuccess="jsFunc"
url="[action:'show']">
Login: <input name="login" type="text"></input>
</g:formRemote>
<div id="updateMe">this div is updated by the form</div>
! fieldRemote, remoteFunction
27. Contrôleurs
! grails create-controller org.bookstore.Book
! Génère un contrôlleur coquille
! Injection de dépendance
! def leNomDeMonService en attribut de classe
! Helpers
! render as JSON, render as XML
28. Contrôleurs : exemple
class AuthorController {
def springSecurityService
def list = {
[ authorInstanceList: Author.list(),
authorInstanceTotal: Author.count() ]
}
}
37. Est-ce performant ?
! Overhead Groovy : x5-7
! Utilisez Groovy++ (x3-5)
! Productivité contre vitesse d'exécution
! Pas de compile check ? Pas grave.
! Optimisations Java
! "src/java" ou librairies
38. Et la courbe d'apprentissage ?
! Groovy s'apprend vite
! Bases ~ 2 jours, Courant ~ 1 mois
! Pièges, GORM Gotchas
! Dans l'ensemble, rien ne bloque longtemps
! Au delà de la carrosserie
! Sur le Tao de Grails, la stack tu maîtriseras
39. La communauté est-elle active ?
! 7 versions mineures en 1 an
! ~ 60 Users Group sur la planète
! ~ 800 repository GitHub autour de Grails
! ~ 2500 mails par mois sur les ML
41. Dans quels cas utiliser Grails ?
! Minimum Viable Product rapide
! Du prototype au produit en douceur
! Reprise d'une application existante
! IHM Web rapide, intégration existant en librairie
! Tout nouveau projet d'appli web
! En toute simplicité "
44. Linkothèque
! Groovy home
! http://groovy.codehaus.org/
! Grails home
! http://www.grails.org
! Grails plugins
! http://www.grails.org/plugins/
! An army of solipsists (this week in Grails)
! http://burtbeckwith.com/blog/