Grails, from scratch to prod… plus vite !!"#$%&"()*+,-&            12+3,().)2(%0+&-+#/(%01)!"#$%&(#)*+,-()          4+-5,6...
Quest-ce que Grails ?
Quest-ce que Grails ?!  Framework dapplication web complet   !  MVC, basé sur le langage Groovy!  Inspiré de RoR, Django, ...
Buts!  Pile application web Java standard   !  Fournir un niveau dabstraction en plus!  Réduire la complexité   !  En outi...
Approche!  Convention over configuration   !  Principe de "défaut raisonnable"!  Dont repeat yourself   !  Structure impos...
Histoire!  Janvier 2007    !  Sortie de Groovy 1.0!  Février 2008   !  Sortie de Grails 1.0!  Novembre 2008   !  SpringSou...
Rock Stars!  Guillaume Laforge (@glaforge)   !  Leader Groovy chez SpringSource!  Graeme Rocher (@graemerocher)   !  Leade...
Comment ça marche ?
Plateforme complète
Simplifié par Groovy!  Syntaxe allégée   !  Accessible à tous les développeurs Java!  Closures, Collections, Gpars, …   ! ...
Développement rapide                         ?+$)                  @-3)           !";+) <0+(+)   0%#)                     ...
Support IDE!  Intellij IDEA!  Eclipse STS!  Netbeans
$ grails create-app bookstore
Structure dun projetbookstore!|_grails-app!| !|_conf       !   !=> BootStraping, Datasources, UrlMappings!| !|_controllers...
Scaffolding!  Génération de CRUD à partir des entités   !  Economie de temps!  Popularisé par Ruby on Rails   !  Orienté s...
Scaffolding!  grails create-domain-class!  grails create-controller!  grails create-service!  grails generate-all
Scaffolding
Scaffolding!  grails generate-all org.bookstore.Book    !  BookController    !  BookControllerTest    !  grails-app/views/...
Scaffolding dynamiqueclass BookController {   class BookController { def index = {…}          def scaffold = true def list...
GORM : Mappingclass Book {  String title  static belongsTo = [author: Author]  static hasMany = [chapters: Chapters]  stat...
GORM : RequêtageBook.list(sort: title, order: asc)Book.getAll(37, 41, 43)Book.findByTitleLike("Harry P%")Book.withCriteria...
GORM : Requêtageclass Book {  static namedQueries = {     withPotterInTitle {           like title, %Potter%     }  }}Book...
Vues!  Groovy Server Pages   !  HTML + Taglib groovy!  Assemblage par Sitemesh   !  Commandé par tags GSP!  Taglib Grails ...
Vues : exemples<g:formRemote name="myForm"       on404="alert(not found!)"       update="updateMe"           // onSuccess=...
Vues : exemples<g:each var="book" in="${books}">  <p>Title: ${book.title}</p>  <p>Author: ${book.author}</p></g:each>!  if...
Contrôleurs!  grails create-controller org.bookstore.Book    !  Génère un contrôlleur coquille!  Injection de dépendance  ...
Contrôleurs : exempleclass AuthorController {  def springSecurityService    def list = {       [ authorInstanceList: Autho...
Configuration : dépendancesgrails.project.dependency.resolution = {  repositories {    grailsPlugins()    grailsHome()    ...
Configuration : environnementsenvironments {   development {     dataSource {         dbCreate = "create-drop"         url...
Environnements!  grails run-app     => dev!  grails test run-app => test!  grails test-app    => test!  grails war        ...
Extensible!  Dépôt de plugins centralisé!  grails install-plugin …    !  spring-security-core    !  spring-security-ui    ...
Très extensible  !  app-engine    (GORM en mode JPA)  !  groovy-plus-plus  !  jquery  !  searchable  !  gwt  !  feeds  !  ...
Extensible!  Plugin Grails == Application Grails
Questions fréquemment posées
Intégration continue ?
Est-ce performant ?!  Overhead Groovy : x5-7   !  Utilisez Groovy++ (x3-5)!  Productivité contre vitesse dexécution   !  P...
Et la courbe dapprentissage ?!  Groovy sapprend vite   !  Bases ~ 2 jours, Courant ~ 1 mois!  Pièges, GORM Gotchas   !  Da...
La communauté est-elle active ?!  7 versions mineures en 1 an!  ~ 60 Users Group sur la planète!  ~ 800 repository GitHub ...
Y a-t-il du support ?
Dans quels cas utiliser Grails ?!  Minimum Viable Product rapide  !  Du prototype au produit en douceur!  Reprise dune app...
Success stories
Bibliothèque
Linkothèque!  Groovy home   !  http://groovy.codehaus.org/!  Grails home   !  http://www.grails.org!  Grails plugins   !  ...
Questions ?
Merci à tous       et bon appétit
Grails from scratch to prod - MixIT 2011
Upcoming SlideShare
Loading in...5
×

Grails from scratch to prod - MixIT 2011

1,047

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,047
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
18
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Grails from scratch to prod - MixIT 2011"

  1. 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)
  2. 2. Quest-ce que Grails ?
  3. 3. Quest-ce que Grails ?!  Framework dapplication 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
  4. 4. Buts!  Pile application web Java standard !  Fournir un niveau dabstraction en plus!  Réduire la complexité !  En outillant lexistant!  Augmenter la productivité !  En scriptant les tâches répétitives
  5. 5. Approche!  Convention over configuration !  Principe de "défaut raisonnable"!  Dont repeat yourself !  Structure imposée pour réduire les duplications!  Plateforme complète !  Méthodologie et approche fournies
  6. 6. Histoire!  Janvier 2007 !  Sortie de Groovy 1.0!  Février 2008 !  Sortie de Grails 1.0!  Novembre 2008 !  SpringSource rachète G2One
  7. 7. Rock Stars!  Guillaume Laforge (@glaforge) !  Leader Groovy chez SpringSource!  Graeme Rocher (@graemerocher) !  Leader Grails chez SpringSource
  8. 8. Comment ça marche ?
  9. 9. Plateforme complète
  10. 10. Simplifié par Groovy!  Syntaxe allégée !  Accessible à tous les développeurs Java!  Closures, Collections, Gpars, … !  Lessayer cest ladopter!  Scripts de génération de code !  Facilement extensible
  11. 11. Développement rapide ?+$) @-3) !";+) <0+(+) 0%#) >(0)
  12. 12. Support IDE!  Intellij IDEA!  Eclipse STS!  Netbeans
  13. 13. $ grails create-app bookstore
  14. 14. Structure dun projetbookstore!|_grails-app!| !|_conf ! !=> BootStraping, Datasources, UrlMappings!| !|_controllers!| !|_domain!| !|_i18n ! !=> messages.properties internationalisés!| !|_services!| !|_taglib!| !|_utils!| !|_views ! !=> Groovy Server Pages!|_lib ! ! !=> Dépendances Java!|_scripts!|_src!| !|_groovy!| !|_java!|_test!|_web-app ! !=> Ressources statiques: images, JS, CSS, etc!
  15. 15. 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
  16. 16. Scaffolding!  grails create-domain-class!  grails create-controller!  grails create-service!  grails generate-all
  17. 17. Scaffolding
  18. 18. Scaffolding!  grails generate-all org.bookstore.Book !  BookController !  BookControllerTest !  grails-app/views/book/list.gsp !  grails-app/views/book/show.gsp !  grails-app/views/book/edit.gsp !  grails-app/views/book/create.gsp
  19. 19. Scaffolding dynamiqueclass BookController { class BookController { def index = {…} def scaffold = true def list = {…} } def create = {…} def save = {…} def show = {…} def edit = {…} def update = {…} def delete = {…}}
  20. 20. GORM : Mappingclass Book { String title static belongsTo = [author: Author] static hasMany = [chapters: Chapters] static constraints = { title nullable:false }}
  21. 21. GORM : RequêtageBook.list(sort: title, order: asc)Book.getAll(37, 41, 43)Book.findByTitleLike("Harry P%")Book.withCriteria { eq(title, Harry Potter) author { like(Rowli%) }}
  22. 22. GORM : Requêtageclass Book { static namedQueries = { withPotterInTitle { like title, %Potter% } }}Book.withPotterInTitle.list()
  23. 23. Vues!  Groovy Server Pages !  HTML + Taglib groovy!  Assemblage par Sitemesh !  Commandé par tags GSP!  Taglib Grails (Prototype pour le JS) !  Formulaires, AJAX
  24. 24. 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
  25. 25. Vues : exemples<g:each var="book" in="${books}"> <p>Title: ${book.title}</p> <p>Author: ${book.author}</p></g:each>!  if, else, formatDate, sortableColumn, datePicker, …
  26. 26. 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
  27. 27. Contrôleurs : exempleclass AuthorController { def springSecurityService def list = { [ authorInstanceList: Author.list(), authorInstanceTotal: Author.count() ] }}
  28. 28. Configuration : dépendancesgrails.project.dependency.resolution = { repositories { grailsPlugins() grailsHome() grailsCentral() mavenLocal() mavenCentral() mavenRepo "http://snapshots.repository.codehaus.org" } dependencies { runtime mysql:mysql-connector-java:5.1.13 }}
  29. 29. Configuration : environnementsenvironments { development { dataSource { dbCreate = "create-drop" url = "jdbc:hsqldb:mem:devDB" } } test { dataSource { … } } production { dataSource { … } }}
  30. 30. Environnements!  grails run-app => dev!  grails test run-app => test!  grails test-app => test!  grails war => production
  31. 31. Extensible!  Dépôt de plugins centralisé!  grails install-plugin … !  spring-security-core !  spring-security-ui !  quartz !  codenarc !  mongodb !  spock !  …
  32. 32. Très extensible !  app-engine (GORM en mode JPA) !  groovy-plus-plus !  jquery !  searchable !  gwt !  feeds !  birt-report !  …!  ou : grails create-plugin monPlugin
  33. 33. Extensible!  Plugin Grails == Application Grails
  34. 34. Questions fréquemment posées
  35. 35. Intégration continue ?
  36. 36. Est-ce performant ?!  Overhead Groovy : x5-7 !  Utilisez Groovy++ (x3-5)!  Productivité contre vitesse dexécution !  Pas de compile check ? Pas grave.!  Optimisations Java !  "src/java" ou librairies
  37. 37. Et la courbe dapprentissage ?!  Groovy sapprend vite !  Bases ~ 2 jours, Courant ~ 1 mois!  Pièges, GORM Gotchas !  Dans lensemble, rien ne bloque longtemps!  Au delà de la carrosserie !  Sur le Tao de Grails, la stack tu maîtriseras
  38. 38. 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
  39. 39. Y a-t-il du support ?
  40. 40. Dans quels cas utiliser Grails ?!  Minimum Viable Product rapide !  Du prototype au produit en douceur!  Reprise dune application existante !  IHM Web rapide, intégration existant en librairie!  Tout nouveau projet dappli web !  En toute simplicité "
  41. 41. Success stories
  42. 42. Bibliothèque
  43. 43. 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/
  44. 44. Questions ?
  45. 45. Merci à tous et bon appétit
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×