jugl 2009 - introduction groovy/grails
DESCRIPTION
Introduction to Groovy/Grails held at the Java User Group Lausanne in 2009TRANSCRIPT
Introduction Groovy / Grails
JUG Lausanne Jeudi 10 décembre 2009
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 2
Présentateur
§ Cyril PICAT § Architecte chez OCTO Technology § [email protected] § http://www.octo.com
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 3
Agenda
§ L’éco-système Groovy (GR3)
§ Présentation de Groovy
§ Présentation de Grails
§ Synthèse : Groovy / Grails pour ?
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
L’ECO-SYSTÈME GROOVY (GR3)
4
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Qu’est-ce que Groovy ?
§ Groovy est un langage dynamique pour la machine virtuelle Java § « Interprété » ou compilé § Génère du bytecode
§ Grammaire dérivée du langage Java § Et inspiré d’autres langages : Python, Ruby, SmallTalk
§ Son but est de simplifier la vie des développeurs
5
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Qu’est-ce que Grails ?
§ Grails est un framework de développement d’applications Web § Inspiré par Ruby on Rails, Django, Turbo Gears
§ Pour la plateforme Java § Basé sur Groovy § S’appuie sur des briques Open Source reconnues (Spring,
Hibernate etc…)
§ Son but est de simplifier le développement tout en permettant la ré-utilisation de l’existant
6
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Un peu d’histoire…
§ Groovy § Lancé en 2003 § Version 1.0 en janvier 2007 § Branche stable : 1.6.7 datée de décembre 2009 § JSR-223 en 2006 : langages de script sur la JVM
§ Grails § Lancé en 2005 § Version 1.0 en février 2008 § Branche stable : 1.1.2 datée de novembre 2009
7
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Eco-système
§ Griffon § Framework MVC pour construire des applications Swing –
similaire à Grails pour le RDA
§ Gradle § Nouveau système de build inspiré de Ant, Maven et Ivy
§ Easyb § Behaviour Driven Development (BDD). Utilise du langage
naturel pour décrire les tests et donc documenter le code
8
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
PRÉSENTATION DE GROOVY
9
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Langage
§ Dérivé de Java § À quelques exceptions près… § Un programme Java compile en Groovy
§ Surcouche à Java § En terme de syntaxe § En terme d’API
§ Apports § Simplification du code § Expressivité, lisibilité du code § Simplification de l’écriture de scripts
10
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Ex. d’utilisation - DSL
§ DSL = Domain Specific Language
§ Grails fait un usage intensif de ces fonctionnalités
§ ex. GORM, l’API de persistence de Grails
11
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Outils
§ Shell et console: groovysh and groovyConsole § Tâche Ant, plugin Maven (GMaven) § Un compilateur joint groovyc
§ Compile Groovy et Java simultanémenent
§ Support dans les IDE
12
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
DEMO: HELLOWORLD EN GROOVY
13
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Intéropérabilité avec Java
§ Groovy génère des .class - bytecode Java § Mêmes chaînes de caractères et expressions régulières § Mêmes APIs — JDK, collections, 3rd party § Même modèle de sécurité, même threading § Même modèle de programmation Orienté Objet § Compilation “jointe”
14
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Listes, maps, ranges, regex...
§ Listes §
§ Maps — dictionnaires
§ Ranges
§ Regex
15
def list = ["Groovy", "Grails"] println list[0] list[2] = "Griffon"
def states = [CA: "California", TX: "Texas"] println states["CA"]; println states.CA States["NY"] = "New York"
def range = 1..10; def range = 'a'..'d' for (i in 1..10) { … }
(myString =~ /Hello/).each { … }
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
GDK
§ GDK = Groovy Development Kit § Groovy « décore » le JDK existant
§ étend Object § étend des classes final comme java.lang.String ou java.io.File
§ Exemples :
16
new File(“f.txt”).eachLine { println it }
(1..100).findAll { it % 2 == 1 }
speakers.groupBy { it.lastname }
“123”.padLeft(5, ‘0’)
Thread.start { /* code to be executed */ }
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
DEMO: REST EN GROOVY
17
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Et bien plus...
§ Surcharge d’opérateurs § Multi-méthodes § API pour SQL, Ant, XML, templates, Swing, JMX, WS § Groovy Truth § GPath avancé § Groovy Builders § Paramètres nommés § Meta-programming statique (AST) et dynamique (MOP) § Autres mécanismes d’intégration avec Spring, Java etc…
18
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
PRÉSENTATION DE GRAILS
19
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Vision très haut-niveau
§ Grails est un framework MVC action-based
§ Grails utilise les principes rendus populaires par Rails § CoC: Convention over Configuration § DRY: Don’t Repeat Yourself § Scaffolding
§ Productivité et simplicité de développement Web § Tout en protégeant votre investissement sur la plateforme Java
20
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Vision haut-niveau
21
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Vision rapprochée
§ Grails est bâti sur des technologies éprouvées § la JVM, les specs Java EE, les serveurs d’app § Spring : IoC, DI, Spring MVC, Spring WebFlow § Hibernate : Object-Relational Mapping § SiteMesh : structure de page et composition § Quartz : séquencement de tâches § Jetty and HSQLDB : pour des cycles de développement rapide
§ Grails est fourni comme un ensemble intégré et est productif immédiatemment
22
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
DEMO: CRÉATION D’UNE APPLICATION GRAILS VIDE
23
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Arborescence et nommage
24
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Outils
§ Les mêmes outils que pour Groovy § Sauf pour Eclipse, pas de support direct de Grails
§ Support de Grails dans Eclipse via SpringSource Tools Suite (STS)
25
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
DEMO: DOMAINE / CONTROLLEUR / VUE / SERVICE
26
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Avez-vous remarqué ?
§ Où sont les fichiers de configuration ? § Pas besoin d’écrire du XML ? § Où sont mes DAOs ? § Où sont mes fichiers de mapping ? § Pas besoin de configurer une base de
données ? § Pas besoin d’installer et de configurer un
serveur d’app ? § Pas besoin de télécharger des tonnes de
jar depuis des repositories Maven ? => Il y a de la magie dans l’air :-)
27
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Synthèse demo
§ Explication des conventions § Domaine § Controlleur / Actions § Vue § Service
§ CRUD en Grails
28
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
DEMO: WEB LAYER
29
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Synthèse demo
§ GSP § Support de la syntaxe JSP/ASP <% %> § GSP tags : variable, logique, search, filter, links, forms § Tags
• fonctions groovy standard utilisables en <g:xx> ou ${g.xx} § Création de librairies de Tag
§ Templates
§ Layout de site avec SiteMesh
30
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
DEMO: DOMAINE - GORM
31
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Synthèse demo
§ DSL GORM (Grails ORM) § Contraintes / Validation § Association / Composition / Héritage
§ Classes du domaine décorées § save / delete § count / get / getAll / list
• pagination & sorting § dynamic finders : findBy / findAllBy
• pagination & sorting
32
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
DEMO: CONTROLLER & BINDINGS
33
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Synthèse demo
§ GORM § Controller
§ Bindings : simple / multiple / association
§ URL Mappings
34
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Plugins
§ Grails est bâti sur un système de plugins évolué
§ Le coeur même de Grails est constitué de plugins § Hibernate plugin § Tomcat plugin
§ Les plugins rajoutent de la fonctionnalité § Domaine, service, controlleur, tag libs et même conventions !
35
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
DEMO: GOOGLE CHART PLUGIN
36
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Plugins disponibles
§ 100+ plugins disponibles
§ Build : Maven § Tests : Webtest, Easyb, Selenium, jsUnit, Fitnesse… § Rich client / AJAX : Yahoo, Ext-JS, GWT, jQuery, iUI… § Web Services : XFire, remoting, Axis2, Metro… § Sécurité : Spring Security, Jsecurity… § Search : Compass integration…
37
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Déploiement
§ Environnements § Par défaut développement / test / production § Possibilité de créer ses propres environnements
§ Déploiement § Commandes ‘grails run-app/run-war/war’
§ Serveurs d’application supportés § Tomcat, Jetty, GlassFish, JBoss, Weblogic etc…
38
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Ce que l’on a pas vu…
§ Advanced Query : Hibernate HQL, Criteria § Spring Web Flow § Internationalisation § Architectures type REST § Tests en Grails § GORM avancé
§ eager/lazy fetching, pessimistic/optimistic locking § utilisation de schémas existants, de mapping Hibernate ou de
configuration Spring existantes
§ Filtres / intercepteurs
39
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
SYNTHÈSE : GROOVY / GRAILS POUR ?
40
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Synthèse
§ Parfait pour développer rapidement des applications innovantes
§ Adapté à un développement Agile des applications § Permet de montrer très rapidement des écrans fonctionnels
§ Également adapté aux développement de nouvelles fonctionnalités en s’interfaçant avec du legacy § Architecture type REST
§ Permet de profiter de toutes ces nouveautés toute de suite § Pas d’impact en production
§ Permet une transition facile de la zone d’innovation vers la zone rationalisée § Si besoin
41
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Bibliographie
§ Livres § Groovy
• Groovy in Action § Grails
• The Definitive Guide to Grails, 2nd edition • Grails in Action
§ Ressources : § Groovy User Guide : http://groovy.codehaus.org/User+Guide § Groovy GDK : http://groovy.codehaus.org/groovy-jdk § Grails User Guide : http://www.grails.org/doc/latest
42
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Sources
§ « Introduction à Groovy », Guillaume Laforge, Paris JUG, septembre 2008
§ « Groovy & Grails in Action! », Guillaume Laforge, Devoxx, 2008
43
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 44
Licence
Creative Commons Contrat Paternité
Pas d'Utilisation Commerciale Partage des Conditions Initiales à l'Identique
2.0 France
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 45
Q&A