SlideShare une entreprise Scribd logo
1  sur  46
Grails, from scratch to prod … plus vite ! MAURY Aurélien Consultant Xebia Email : amaury@xebia.fr Twitter : @aurelienmaury LinkedIn : http://fr.linkedin.com/in/aurelienmaury Blog : http://blog.xebia.fr
Qu'est-ce que Grails ?
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
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
Approche Convention over configuration Principe de "défaut raisonnable" Don'trepeatyourself Structure imposée pour réduire les duplications Plateforme complète Méthodologie et approche fournies
Histoire Janvier 2007 Sortie de Groovy 1.0 Février 2008 Sortie de Grails 1.0 Novembre 2008 SpringSource rachète G2One
Rock Stars Guillaume Laforge(@glaforge) Leader Groovy chez SpringSource Graeme Rocher (@graemerocher) Leader Grails chez SpringSource
Comment ça marche ?
Plateforme complète
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
Développement rapide Test Code Fix create run war
Support IDE Intellij IDEA Eclipse STS Netbeans
$ grailscreate-appbookstore
Structure d'un projet bookstore |_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
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
Scaffolding grailscreate-domain-class grailscreate-controller grailscreate-service grailsgenerate-all
Scaffolding
Scaffolding grailsgenerate-allorg.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
Scaffolding dynamique class BookController { def index = {…} deflist = {…} defcreate = {…} defsave = {…} def show = {…} defedit = {…} def update = {…} defdelete = {…} } class BookController { defscaffold = true }
GORM : Mapping class Book { 	String title staticbelongsTo = [author: Author] statichasMany = [chapters: Chapters] staticconstraints = { titlenullable:false    } }
GORM : Requêtage Book.list(sort: 'title', order: 'asc') Book.getAll(37, 41, 43) Book.findByTitleLike("Harry P%") Book.withCriteria { eq('title', 'Harry Potter')	 author { like('Rowli%') 	} }
GORM : Requêtage class Book { staticnamedQueries = { withPotterInTitle { like 'title', '%Potter%' 		} 	} } Book.withPotterInTitle.list()
Vues Groovy Server Pages HTML + Taglibgroovy Assemblage par Sitemesh Commandé par tags GSP Taglib Grails (Prototype pour le JS) Formulaires, AJAX
Vues : exemples <g:formRemotename="myForm"  		on404="alert('not found!')"  		update="updateMe"		// onSuccess="jsFunc"  		url="[action:'show']">     Login: <input name="login" type="text"></input> </g:formRemote> <div id="updateMe">thisdivisupdated by the form</div> fieldRemote, remoteFunction
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, …
Contrôleurs grailscreate-controllerorg.bookstore.Book Génère un contrôlleur coquille Injection de dépendance defleNomDeMonServiceen attribut de classe Helpers render as JSON, render as XML
Contrôleurs : exemple class AuthorController { defspringSecurityService deflist = {         [	authorInstanceList: Author.list(), 	authorInstanceTotal: Author.count() ]     } }
Configuration : dépendances grails.project.dependency.resolution = { repositories { grailsPlugins() grailsHome() grailsCentral() mavenLocal() mavenCentral() mavenRepo "http://snapshots.repository.codehaus.org"   } dependencies { runtime 'mysql:mysql-connector-java:5.1.13'   } }
Configuration : environnements environments { development { dataSource { dbCreate = "create-drop"             url = "jdbc:hsqldb:mem:devDB" }  } 	test { dataSource { … } } 	production { dataSource { … } } }
Environnements grailsrun-app		=> dev grails test run-app	=> test grailstest-app		=> test grailswar		=> production
Extensible Dépôt de plugins centralisé grailsinstall-plugin … spring-security-core spring-security-ui quartz codenarc mongodb spock …
Très extensible app-engine(GORM en mode JPA) groovy-plus-plus jquery searchable gwt feeds birt-report … ou : grailscreate-pluginmonPlugin
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 d'exécution Pas de compile check ? Pas grave. Optimisations Java "src/java" ou librairies
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
La communauté est-elle active ? 7 versions mineures en 1 an ~ 60 Users Group sur la planète ~ 800 repositoryGitHub autour de Grails ~ 2500 mails par mois sur les ML
Y a-t-il du support ?
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é 
Success stories
Bibliothèque
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 (thisweek in Grails) http://burtbeckwith.com/blog/
Questions ?
Merci à touset bon appétit

Contenu connexe

Tendances

Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStorm當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStormOomusou Xiao
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015Stéphane Legrand
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapBassem ABCHA
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Guillaume Laforge
 
Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...
Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...
Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...Patrick Guimonet
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en gokader15
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Testacular
TestacularTestacular
TestacularSwiip
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirYves Van Goethem
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?Fou Cha
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage GoSylvain Wallez
 

Tendances (17)

Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStorm當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStorm
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
Django by mrjmad
Django by mrjmadDjango by mrjmad
Django by mrjmad
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008
 
Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...
Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...
Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Testacular
TestacularTestacular
Testacular
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenir
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage Go
 

En vedette

Internet Bab1™Yosa Wimbi 9e™
Internet Bab1™Yosa Wimbi 9e™Internet Bab1™Yosa Wimbi 9e™
Internet Bab1™Yosa Wimbi 9e™Yosa Jrs Belitung
 
Green machine video_webinar_see3
Green machine video_webinar_see3Green machine video_webinar_see3
Green machine video_webinar_see3Jo Lee
 
Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Aurélien Maury
 
Pelaksanaan kip kementan baru
Pelaksanaan kip kementan baruPelaksanaan kip kementan baru
Pelaksanaan kip kementan baruhumassdm
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as CodeShaw Innes
 

En vedette (7)

Internet Bab1™Yosa Wimbi 9e™
Internet Bab1™Yosa Wimbi 9e™Internet Bab1™Yosa Wimbi 9e™
Internet Bab1™Yosa Wimbi 9e™
 
Ilumax
IlumaxIlumax
Ilumax
 
Green machine video_webinar_see3
Green machine video_webinar_see3Green machine video_webinar_see3
Green machine video_webinar_see3
 
Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011
 
Pelaksanaan kip kementan baru
Pelaksanaan kip kementan baruPelaksanaan kip kementan baru
Pelaksanaan kip kementan baru
 
Horario
HorarioHorario
Horario
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as Code
 

Similaire à Grails from scratch to prod - MixIT 2010

Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Développer sereinement avec Node.js
Développer sereinement avec Node.jsDévelopper sereinement avec Node.js
Développer sereinement avec Node.jsJulien Giovaresco
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJSVISEO
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en goAbdoul Kader Sarambe
 
AngularJS et autres techno frontend
AngularJS et autres techno frontendAngularJS et autres techno frontend
AngularJS et autres techno frontendyllieth
 
Google App Engine For Java
Google App Engine For JavaGoogle App Engine For Java
Google App Engine For Javatcouery
 
Présentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - ZenikaPrésentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - ZenikaZenika
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyGuillaume Laforge
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVCNathaniel Richand
 
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et JavascriptCodedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascriptcodedarmor
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Mickael Perraud
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Alexis Sukrieh
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentationjulien pauli
 

Similaire à Grails from scratch to prod - MixIT 2010 (20)

Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Développer sereinement avec Node.js
Développer sereinement avec Node.jsDévelopper sereinement avec Node.js
Développer sereinement avec Node.js
 
Applets
AppletsApplets
Applets
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
Introduction a jQuery
Introduction a jQueryIntroduction a jQuery
Introduction a jQuery
 
AngularJS et autres techno frontend
AngularJS et autres techno frontendAngularJS et autres techno frontend
AngularJS et autres techno frontend
 
Google App Engine For Java
Google App Engine For JavaGoogle App Engine For Java
Google App Engine For Java
 
Présentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - ZenikaPrésentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - Zenika
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec Groovy
 
Gradle_BordeauxJUG
Gradle_BordeauxJUGGradle_BordeauxJUG
Gradle_BordeauxJUG
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Gradle_LyonJUG
Gradle_LyonJUGGradle_LyonJUG
Gradle_LyonJUG
 
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et JavascriptCodedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009
 
Gradle_NormandyJUG
Gradle_NormandyJUGGradle_NormandyJUG
Gradle_NormandyJUG
 
Javascript et JQuery
Javascript et JQueryJavascript et JQuery
Javascript et JQuery
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
 

Grails from scratch to prod - MixIT 2010

  • 1. Grails, from scratch to prod … plus vite ! MAURY Aurélien Consultant Xebia Email : amaury@xebia.fr Twitter : @aurelienmaury LinkedIn : http://fr.linkedin.com/in/aurelienmaury Blog : http://blog.xebia.fr
  • 2.
  • 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'trepeatyourself 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
  • 12. Développement rapide Test Code Fix create run war
  • 13. Support IDE Intellij IDEA Eclipse STS Netbeans
  • 15. Structure d'un projet bookstore |_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
  • 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
  • 17. Scaffolding grailscreate-domain-class grailscreate-controller grailscreate-service grailsgenerate-all
  • 19. Scaffolding grailsgenerate-allorg.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
  • 20. Scaffolding dynamique class BookController { def index = {…} deflist = {…} defcreate = {…} defsave = {…} def show = {…} defedit = {…} def update = {…} defdelete = {…} } class BookController { defscaffold = true }
  • 21. GORM : Mapping class Book { String title staticbelongsTo = [author: Author] statichasMany = [chapters: Chapters] staticconstraints = { titlenullable:false } }
  • 22. GORM : Requêtage Book.list(sort: 'title', order: 'asc') Book.getAll(37, 41, 43) Book.findByTitleLike("Harry P%") Book.withCriteria { eq('title', 'Harry Potter') author { like('Rowli%') } }
  • 23. GORM : Requêtage class Book { staticnamedQueries = { withPotterInTitle { like 'title', '%Potter%' } } } Book.withPotterInTitle.list()
  • 24. Vues Groovy Server Pages HTML + Taglibgroovy Assemblage par Sitemesh Commandé par tags GSP Taglib Grails (Prototype pour le JS) Formulaires, AJAX
  • 25. Vues : exemples <g:formRemotename="myForm" on404="alert('not found!')" update="updateMe" // onSuccess="jsFunc" url="[action:'show']"> Login: <input name="login" type="text"></input> </g:formRemote> <div id="updateMe">thisdivisupdated by the form</div> fieldRemote, remoteFunction
  • 26. 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, …
  • 27. Contrôleurs grailscreate-controllerorg.bookstore.Book Génère un contrôlleur coquille Injection de dépendance defleNomDeMonServiceen attribut de classe Helpers render as JSON, render as XML
  • 28. Contrôleurs : exemple class AuthorController { defspringSecurityService deflist = { [ authorInstanceList: Author.list(), authorInstanceTotal: Author.count() ] } }
  • 29. Configuration : dépendances grails.project.dependency.resolution = { repositories { grailsPlugins() grailsHome() grailsCentral() mavenLocal() mavenCentral() mavenRepo "http://snapshots.repository.codehaus.org" } dependencies { runtime 'mysql:mysql-connector-java:5.1.13' } }
  • 30. Configuration : environnements environments { development { dataSource { dbCreate = "create-drop" url = "jdbc:hsqldb:mem:devDB" } } test { dataSource { … } } production { dataSource { … } } }
  • 31. Environnements grailsrun-app => dev grails test run-app => test grailstest-app => test grailswar => production
  • 32. Extensible Dépôt de plugins centralisé grailsinstall-plugin … spring-security-core spring-security-ui quartz codenarc mongodb spock …
  • 33. Très extensible app-engine(GORM en mode JPA) groovy-plus-plus jquery searchable gwt feeds birt-report … ou : grailscreate-pluginmonPlugin
  • 34. Extensible Plugin Grails == Application Grails
  • 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 repositoryGitHub autour de Grails ~ 2500 mails par mois sur les ML
  • 40. Y a-t-il du support ?
  • 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 (thisweek in Grails) http://burtbeckwith.com/blog/
  • 46. Merci à touset bon appétit