Grails from scratch to prod - MixIT 2011
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,330
On Slideshare
1,330
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
18
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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. Quest-ce que Grails ?
  • 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. 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. 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. Histoire!  Janvier 2007 !  Sortie de Groovy 1.0!  Février 2008 !  Sortie de Grails 1.0!  Novembre 2008 !  SpringSource rachète G2One
  • 7. Rock Stars!  Guillaume Laforge (@glaforge) !  Leader Groovy chez SpringSource!  Graeme Rocher (@graemerocher) !  Leader Grails chez SpringSource
  • 8. Comment ça marche ?
  • 9. Plateforme complète
  • 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. Développement rapide ?+$) @-3) !";+) <0+(+) 0%#) >(0)
  • 12. Support IDE!  Intellij IDEA!  Eclipse STS!  Netbeans
  • 13. $ grails create-app bookstore
  • 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. 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. Scaffolding!  grails create-domain-class!  grails create-controller!  grails create-service!  grails generate-all
  • 17. Scaffolding
  • 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. 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. GORM : Mappingclass Book { String title static belongsTo = [author: Author] static hasMany = [chapters: Chapters] static constraints = { title nullable:false }}
  • 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. GORM : Requêtageclass Book { static namedQueries = { withPotterInTitle { like title, %Potter% } }}Book.withPotterInTitle.list()
  • 23. Vues!  Groovy Server Pages !  HTML + Taglib groovy!  Assemblage par Sitemesh !  Commandé par tags GSP!  Taglib Grails (Prototype pour le JS) !  Formulaires, AJAX
  • 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. 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. 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. Contrôleurs : exempleclass AuthorController { def springSecurityService def list = { [ authorInstanceList: Author.list(), authorInstanceTotal: Author.count() ] }}
  • 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. Configuration : environnementsenvironments { development { dataSource { dbCreate = "create-drop" url = "jdbc:hsqldb:mem:devDB" } } test { dataSource { … } } production { dataSource { … } }}
  • 30. Environnements!  grails run-app => dev!  grails test run-app => test!  grails test-app => test!  grails war => production
  • 31. Extensible!  Dépôt de plugins centralisé!  grails install-plugin … !  spring-security-core !  spring-security-ui !  quartz !  codenarc !  mongodb !  spock !  …
  • 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. Extensible!  Plugin Grails == Application Grails
  • 34. Questions fréquemment posées
  • 35. Intégration continue ?
  • 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. 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. 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. Y a-t-il du support ?
  • 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. Success stories
  • 42. Bibliothèque
  • 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. Questions ?
  • 45. Merci à tous et bon appétit