Grails from scratch to prod - MixIT 2011

  • 997 views
Uploaded on

 

More in: Technology
  • 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
997
On Slideshare
0
From Embeds
0
Number of Embeds
1

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