SlideShare a Scribd company logo
Sviluppo Rapido di Applicazioni con Grails
Presentazioni About Mokabyte: La prima rivista Web dedicata a java Circa 30 corsi di formazione On line da più di 10 anni About Gruppo Imola: Consulenze di alto livello su architetture,tecnologie , processo, project management, etc. About me: Consulente (come sopra), Docente, Articolista,  blogger,  cuoco,  batterista…  Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007
Sviluppo Rapido Di Applicazioni Con Grails
Gli acciacchi dell'età Lo sviluppo web in salsa J(2)EE soffre di patologie croniche: Bassa produttività Strumenti “pesanti” Toolkit frammentato Curva di apprendimento “imbarazzante” Obsolescenza continua
…  il tran tran quotidiano … Sintassi prolissa Costrutti obbligatori Compile Build Deploy Run getters setters equals() hashCode() toString()
… i tempi che cambiano… Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 Java 1.4 Java 5 Java 6 J2EE JEE 5 Servlet JSP EJB EJB 2.0 EJB 3.0 Struts Tapestry Velocity Cocoon Java Server Faces Spring Spring MVC Spring Web Flow JDO Hibernate Log4J JUnit TestNG Ant Maven Google Web Toolkit AJAX
… l’insolenza dei giovani …
… tutti su Ruby? Non buttiamo il bambino con l’acqua sporca! Java è la maggiore comunità di programmatori al mondo La JVM è “dappertutto” Java è già  legacy Qualche poveretto si è  letto  quei libri
Cos'è Groovy? “ Groovy è Java come lo avremmo potuto inventare dopo aver visto Ruby” Linguaggio dinamico Sintassi concisa Completamente OOP Chiusure Espressioni regolari Ranges Scripting …  ma soprattutto …
Groovy Bytecode A livello di bytecode,  Groovy è Java .class .class JVM
JSR-241 Groovy è entrato a fare parte ufficialmente del mondo java. Groovy è il  secondo linguaggio standard (dopo Java) sulla JVM Da Groovy posso chiamare classi Java Ma anche il viceversa! JRE Java JVM
Sintassi “ java-like” …  ma anche molto più concisa Groovy String     supporto per il formato  ${param} Stringhe multilinea “”” Altre chicche… + tutte quelle di Java def person = “John” println “””  ${new Date()} Dear $person, This is a Groovy letter! Best regards “””
Chiusure - Closures Frammenti di codice che possono essere riutilizzati in diversi contesti In Java sono le famigerate Inner Class Anonime Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 Def square = {it * it} Assert [1,4,9] == [1,2,3].collect(square)
Collections e ranges  List e maps sono tipi primitivi in Groovy. Overloading degli operatori Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 [1,2,3,4].each {num -> println num}
Cos'è Grails? L’ennesimo framework MVC? Un clone di Ruby on Rails? Un ORM? Tutto questo, ma soprattutto è un  concentrato di buone idee! Convention over configuration Dont Repeat Yourself
Dove nasce… Grails affonda le sue origini nella “perfida Albione”, e nasce da un’intuizione di Graeme Keith Rocher L’evoluzione del progetto è avvenuta in sinergia con quella di Groovy Progetto “patronato” da  Skills Matter Ora Grails ha anche sponsor del calibro di IBM, Oracle etc.
Demo!
Sviluppo Rapido Di Applicazioni Con Grails
Layout di progetto La struttura delle directory di progetto è creata da Grails Convention over Configuration : La struttura delle directory è standard >Grails create-app
Technology Stack JVM JDK Java language Java Enterprise Edition Spring Hibernate Quartz Grails Site-mesh
Built-in MVC architecture L’impianto architetturale di Grails è strettamente MVC I packages riflettono il ruolo delle classi coinvolte La struttura applicativa nasce  “già girata per il verso giusto” Convention over Configuration  fa in modo che tutto funzioni “magicamente”
Oltre il POJO Groovy va oltre il modello POJO No getters No setters No private… (No punto e virgola)  No import Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 Class utente { String nome String cognome String password Date lastLogin } POGO?
Convention over configuration Non è necessario esplicitare le dipendenze tra le classi di uno stesso percorso Un po’ come Spring… … solo che possiamo fare a meno anche del file di configurazione! Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007
Controllers Un controller corrisponde all’omonima classe di dominio Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 I metodi del controller sono mappati direttamente negli URL http://localhost:8080/demo/utente/display >grails create-controller
Scaffolding Grails ha due modalità di gestione dello scaffolding. Lo scaffolding  dinamico  ci obbliga a scrivere qualche riga di codice Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 Class UtenteController { def scaffold = Utente } … sufficiente a generare un intero CRUD
Scaffolding - 2 In alternativa possiamo adottare la modalità “tradizionale” da riga di comando Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 Anche questa genera i metodi del controller, le pagine di editing, etc. Le due modalità possono essere “compresenti”… >grails generate-all
Up and running – Web Server In configurazione di sviluppo, Grails lancia un web server  Jetty   embedded , agganciato di default alla porta 8080. Non è necessaria configurazione per iniziare a sviluppare . Non è necessaria configurazione per iniziare a sviluppare In ambiente di test, produzione, etc. posso comunque rilasciare un classico  .war .
Up and running - DB In configurazione di sviluppo  NON è necessaria l’installazione del DB : Viene utilizzato un  in-memory-database  HSQLDB Script di popolamento generato da Grails
Up and Running – Logging Grails parte con Log4J già configurato. Componenti di Grails a livello INFO Componenti di sistema a livello ERROR. log4j:WARN No appenders could be found for logger (it.brando.example.domain.TestBaseProject). log4j:WARN Please initialize the log4j system properly.
Up and Running - ORM La configurazione di Hibernate viene gestita da un modulo apposito:  GORM Anche in questo caso vale il principio di  Convention over Configuration Non è necessario specificare il mapping delle nostre entità: questo viene dedotto dalle caratteristiche dei nostri oggetti groovy.
Ciclo di persistenza Gli oggetti modificati sono automaticamente salvati Hibernate legge i  dirty objects  dietro le quinte e ed aggiorna il dato se l’oggetto è stato modificato Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 E la validazione?
Validazione I constraints di validazione possono essere specificati a livello di domain classes Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 Class Utente { String nome String cognome String password String email Date lastLogin static constraints = [nome(blank:false),  cognome (blank:false),  email (email:true)]  }
Dynamic Finders Metodi di Data Retrieval dedotti via convention over configuration. Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 Utente.findByNomeAndCognome(‘Alberto’,‘Brandolini’) Utente.findByNome(‘Alberto’) Possibile utilizzare combinazioni di più parametri …  ancora senza scrivere una riga di DAO
Hibernate Se necessario è possibile utilizzare tutte le funzionalità esposte da Hibernate Query By Examples Criterias Projections Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007
Up and Running – I18n Grails nasce GIA’ internazionalizzato Resource bundle per le principali lingue europee Messaggi di validazione standard già presenti Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007
Sviluppo Rapido Di Applicazioni Con Grails
Scaffolding Prototipazione  rapida di tutte le strutture necessarie alla manipolazione di un’entità applicativa. È un punto di partenza molto comodo, ma  non è  l’applicazione. …  necessario ri-analizzare il processo di sviluppo alla luce delle novità. Iterazioni più corte? Maggior coinvolgimento dei committenti? MOLTO
Un tool “forzatamente” agile …  necessario ri-analizzare il processo di sviluppo alla luce delle novità. Iterazioni più corte? Maggior coinvolgimento dei committenti? Grails permette di anticipare il momento del feedback In un processo “waterfall” o con poca interazione con il cliente rischiamo di sprecare buona parte dei vantaggi acquisiti Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007
Strumenti di supporto …  i “duri e puri” possono fare a meno dell’IDE (anche perché alcune delle funzionalità sono ora parte del linguaggio) Supporto per Groovy in  Eclipse ,  JDeveloper ,  IntelliJ IDEA , etc. C’è “movimento” ma l’aspetto pionieristico si percepisce ancora…
Sviluppo Rapido Di Applicazioni Con Grails
Bibliografia The Definitive Guide to Grails  – Graeme Keith Rocher (Apress)
Bibliografia Groovy in Action  – Dierk König (Manning)
Bibliografia collegata Java Persistence with Hibernate  – Christian Bauer, Gavin King (Manning) Spring in Action  – Craig Walls (Manning)
Riferimenti Grails :  http://grails.codehaus.org   Groovy :  http://groovy.codehaus.org   Mokabyte :  http://www.mokabyte.it   Gruppo Imola :  http://www.imolinfo.it Homepage :  http://albertobrandolini.wikidot.com Blog :  http://ziobrando.blogspot.com   Mail :  [email_address]

More Related Content

PDF
DDD Dirty Harry style
Alberto Brandolini
 
PDF
Reshaping enterrprise software
Alberto Brandolini
 
PDF
La fatina dei denti
Alberto Brandolini
 
PDF
Managing debt remastered
Alberto Brandolini
 
PDF
Liberate il kraken
Alberto Brandolini
 
KEY
Software ...e tutto ciò che comporta
Alberto Brandolini
 
PDF
Kanban unbounded - Cosa succede sulla linea di faglia tra il team ed il resto...
Alberto Brandolini
 
PDF
Cosa manca ad un brief
Ilaria Mauric
 
DDD Dirty Harry style
Alberto Brandolini
 
Reshaping enterrprise software
Alberto Brandolini
 
La fatina dei denti
Alberto Brandolini
 
Managing debt remastered
Alberto Brandolini
 
Liberate il kraken
Alberto Brandolini
 
Software ...e tutto ciò che comporta
Alberto Brandolini
 
Kanban unbounded - Cosa succede sulla linea di faglia tra il team ed il resto...
Alberto Brandolini
 
Cosa manca ad un brief
Ilaria Mauric
 

What's hot (16)

PDF
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...
Pietro Di Bello
 
PPTX
Cosa ho imparato trasformando software factory?
Matteo Emili
 
PPTX
Test Driven Development @ Xe.Net
Mauro Servienti
 
PDF
Lean prototyping al servizio del designer
Luca Scarpa
 
PDF
Lean Prototyping
Luca Scarpa
 
PDF
Agile web development - Forum IISF - 2016
Luciano Amodio
 
KEY
Volevo solo scrivere codice iad 2011
Alberto Brandolini
 
PDF
Right here, right now: come capire e intercettare i momenti cruciali di un’es...
Ilaria Mauric
 
PDF
Manifesto per lo Sviluppo Agile di Software
AmmLibera AL
 
PDF
Anti pattern
Gianni Valdambrini
 
PDF
Raccolta Contributi dei Relatori, Parte 1 - Hr Vision & Innovation Workshop E...
ETAss Formazione | Finanziamenti | Social Media
 
PDF
I quattro punti cardinali per un orientamento lean nell'impr... insomma.
Jacopo Romei
 
PPTX
SCRUM WARS - Manuale di sopravvivenza agile per frontendisti
Simone Lelli
 
PDF
Le 3 Rivoluzioni - Italian Agile Day
Claudio Perrone
 
PDF
Raccolta Contributi dei Relatori, Parte 2 - Workshop ETAss 2015 - HR Vision &...
ETAss Formazione | Finanziamenti | Social Media
 
PDF
Scrum? E' come fare il bucato!
Manuel Scapolan
 
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...
Pietro Di Bello
 
Cosa ho imparato trasformando software factory?
Matteo Emili
 
Test Driven Development @ Xe.Net
Mauro Servienti
 
Lean prototyping al servizio del designer
Luca Scarpa
 
Lean Prototyping
Luca Scarpa
 
Agile web development - Forum IISF - 2016
Luciano Amodio
 
Volevo solo scrivere codice iad 2011
Alberto Brandolini
 
Right here, right now: come capire e intercettare i momenti cruciali di un’es...
Ilaria Mauric
 
Manifesto per lo Sviluppo Agile di Software
AmmLibera AL
 
Anti pattern
Gianni Valdambrini
 
Raccolta Contributi dei Relatori, Parte 1 - Hr Vision & Innovation Workshop E...
ETAss Formazione | Finanziamenti | Social Media
 
I quattro punti cardinali per un orientamento lean nell'impr... insomma.
Jacopo Romei
 
SCRUM WARS - Manuale di sopravvivenza agile per frontendisti
Simone Lelli
 
Le 3 Rivoluzioni - Italian Agile Day
Claudio Perrone
 
Raccolta Contributi dei Relatori, Parte 2 - Workshop ETAss 2015 - HR Vision &...
ETAss Formazione | Finanziamenti | Social Media
 
Scrum? E' come fare il bucato!
Manuel Scapolan
 
Ad

Similar to Sviluppo Rapido Di Applicazioni Con Grails (20)

PDF
Groovy & Grails
Marcello Teodori
 
PDF
Programmazione web libera dai framework
Francesca1980
 
PDF
Spring E Spring Web Flow Nel Progetto Jug Avis Web
Massimiliano Dessì
 
PDF
SPRING - MAVEN - REST API (ITA - Luglio 2017)
Valerio Radice
 
PDF
Presentazione framework Symfony
Alessandro Cinelli (cirpo)
 
PDF
Groovy e Domain Specific Languages
Tiziano Lattisi
 
ODP
Working between the clouds (versione completa)
Davide Cerbo
 
PDF
Spring Intro
guestfb22d3
 
ODP
Infrastrutture web e Ruby on Rails
guestfe3e15
 
PDF
Groovy technology ecosystem
Francesco Lerro
 
PPSX
Glossario tecnologico 2011
Andrea Colleoni
 
PDF
Niccolò Becchi: Introduzione a GWT
firenze-gtug
 
ODP
Working between the clouds
Davide Cerbo
 
PDF
Dal cloud al mobile con tecnologie Google
Diego Giorgini
 
PDF
Maven - Aprile 2010
fulviodimarco
 
PDF
Struttin' on, novità in casa Struts
Marcello Teodori
 
PDF
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
Codemotion
 
PPT
Spring 2.5
Pasquale Paola
 
PPTX
Spring - Ecosistema
Massimo Romano
 
PDF
CakePhp Linux Day Torino '09
Francesco Ronchi
 
Groovy & Grails
Marcello Teodori
 
Programmazione web libera dai framework
Francesca1980
 
Spring E Spring Web Flow Nel Progetto Jug Avis Web
Massimiliano Dessì
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
Valerio Radice
 
Presentazione framework Symfony
Alessandro Cinelli (cirpo)
 
Groovy e Domain Specific Languages
Tiziano Lattisi
 
Working between the clouds (versione completa)
Davide Cerbo
 
Spring Intro
guestfb22d3
 
Infrastrutture web e Ruby on Rails
guestfe3e15
 
Groovy technology ecosystem
Francesco Lerro
 
Glossario tecnologico 2011
Andrea Colleoni
 
Niccolò Becchi: Introduzione a GWT
firenze-gtug
 
Working between the clouds
Davide Cerbo
 
Dal cloud al mobile con tecnologie Google
Diego Giorgini
 
Maven - Aprile 2010
fulviodimarco
 
Struttin' on, novità in casa Struts
Marcello Teodori
 
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
Codemotion
 
Spring 2.5
Pasquale Paola
 
Spring - Ecosistema
Massimo Romano
 
CakePhp Linux Day Torino '09
Francesco Ronchi
 
Ad

More from Alberto Brandolini (20)

PDF
DDD tales from ProductLand - NewCrafts Paris - May 2024
Alberto Brandolini
 
PDF
1 Million Orange Stickies later - Devoxx Poland 2024
Alberto Brandolini
 
PDF
Extreme DDD Modelling Patterns - 2024 Devoxx Poland
Alberto Brandolini
 
PDF
Modelling Up - DDDEurope 2024 - Amsterdam
Alberto Brandolini
 
PDF
All the Small Things - XP2024 Bolzano/Bozen
Alberto Brandolini
 
PDF
L'illusione dell'ortogonalità
Alberto Brandolini
 
PDF
Redesigning everything ITARC Stockholm 2021
Alberto Brandolini
 
PDF
What lies beneath
Alberto Brandolini
 
PDF
Redesigning everything (avanscoperta meeutp edition)
Alberto Brandolini
 
PDF
Extreme DDD modelling
Alberto Brandolini
 
PDF
The gordian knot
Alberto Brandolini
 
PDF
Software design as a cooperative game with EventStorming
Alberto Brandolini
 
PDF
50.000 orange stickies later
Alberto Brandolini
 
PDF
The alignment
Alberto Brandolini
 
PDF
Chasing elephants
Alberto Brandolini
 
PDF
Transactions redefined
Alberto Brandolini
 
PDF
Optimized for what
Alberto Brandolini
 
PDF
Guerrilla portfolio management
Alberto Brandolini
 
PDF
The precision blade
Alberto Brandolini
 
PDF
Idea stickies green bar - Wroclaw edition
Alberto Brandolini
 
DDD tales from ProductLand - NewCrafts Paris - May 2024
Alberto Brandolini
 
1 Million Orange Stickies later - Devoxx Poland 2024
Alberto Brandolini
 
Extreme DDD Modelling Patterns - 2024 Devoxx Poland
Alberto Brandolini
 
Modelling Up - DDDEurope 2024 - Amsterdam
Alberto Brandolini
 
All the Small Things - XP2024 Bolzano/Bozen
Alberto Brandolini
 
L'illusione dell'ortogonalità
Alberto Brandolini
 
Redesigning everything ITARC Stockholm 2021
Alberto Brandolini
 
What lies beneath
Alberto Brandolini
 
Redesigning everything (avanscoperta meeutp edition)
Alberto Brandolini
 
Extreme DDD modelling
Alberto Brandolini
 
The gordian knot
Alberto Brandolini
 
Software design as a cooperative game with EventStorming
Alberto Brandolini
 
50.000 orange stickies later
Alberto Brandolini
 
The alignment
Alberto Brandolini
 
Chasing elephants
Alberto Brandolini
 
Transactions redefined
Alberto Brandolini
 
Optimized for what
Alberto Brandolini
 
Guerrilla portfolio management
Alberto Brandolini
 
The precision blade
Alberto Brandolini
 
Idea stickies green bar - Wroclaw edition
Alberto Brandolini
 

Sviluppo Rapido Di Applicazioni Con Grails

  • 1. Sviluppo Rapido di Applicazioni con Grails
  • 2. Presentazioni About Mokabyte: La prima rivista Web dedicata a java Circa 30 corsi di formazione On line da più di 10 anni About Gruppo Imola: Consulenze di alto livello su architetture,tecnologie , processo, project management, etc. About me: Consulente (come sopra), Docente, Articolista, blogger, cuoco, batterista… Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007
  • 4. Gli acciacchi dell'età Lo sviluppo web in salsa J(2)EE soffre di patologie croniche: Bassa produttività Strumenti “pesanti” Toolkit frammentato Curva di apprendimento “imbarazzante” Obsolescenza continua
  • 5. … il tran tran quotidiano … Sintassi prolissa Costrutti obbligatori Compile Build Deploy Run getters setters equals() hashCode() toString()
  • 6. … i tempi che cambiano… Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007 Java 1.4 Java 5 Java 6 J2EE JEE 5 Servlet JSP EJB EJB 2.0 EJB 3.0 Struts Tapestry Velocity Cocoon Java Server Faces Spring Spring MVC Spring Web Flow JDO Hibernate Log4J JUnit TestNG Ant Maven Google Web Toolkit AJAX
  • 7. … l’insolenza dei giovani …
  • 8. … tutti su Ruby? Non buttiamo il bambino con l’acqua sporca! Java è la maggiore comunità di programmatori al mondo La JVM è “dappertutto” Java è già legacy Qualche poveretto si è letto quei libri
  • 9. Cos'è Groovy? “ Groovy è Java come lo avremmo potuto inventare dopo aver visto Ruby” Linguaggio dinamico Sintassi concisa Completamente OOP Chiusure Espressioni regolari Ranges Scripting … ma soprattutto …
  • 10. Groovy Bytecode A livello di bytecode, Groovy è Java .class .class JVM
  • 11. JSR-241 Groovy è entrato a fare parte ufficialmente del mondo java. Groovy è il secondo linguaggio standard (dopo Java) sulla JVM Da Groovy posso chiamare classi Java Ma anche il viceversa! JRE Java JVM
  • 12. Sintassi “ java-like” … ma anche molto più concisa Groovy String  supporto per il formato ${param} Stringhe multilinea “”” Altre chicche… + tutte quelle di Java def person = “John” println “”” ${new Date()} Dear $person, This is a Groovy letter! Best regards “””
  • 13. Chiusure - Closures Frammenti di codice che possono essere riutilizzati in diversi contesti In Java sono le famigerate Inner Class Anonime Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007 Def square = {it * it} Assert [1,4,9] == [1,2,3].collect(square)
  • 14. Collections e ranges List e maps sono tipi primitivi in Groovy. Overloading degli operatori Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007 [1,2,3,4].each {num -> println num}
  • 15. Cos'è Grails? L’ennesimo framework MVC? Un clone di Ruby on Rails? Un ORM? Tutto questo, ma soprattutto è un concentrato di buone idee! Convention over configuration Dont Repeat Yourself
  • 16. Dove nasce… Grails affonda le sue origini nella “perfida Albione”, e nasce da un’intuizione di Graeme Keith Rocher L’evoluzione del progetto è avvenuta in sinergia con quella di Groovy Progetto “patronato” da Skills Matter Ora Grails ha anche sponsor del calibro di IBM, Oracle etc.
  • 17. Demo!
  • 19. Layout di progetto La struttura delle directory di progetto è creata da Grails Convention over Configuration : La struttura delle directory è standard >Grails create-app
  • 20. Technology Stack JVM JDK Java language Java Enterprise Edition Spring Hibernate Quartz Grails Site-mesh
  • 21. Built-in MVC architecture L’impianto architetturale di Grails è strettamente MVC I packages riflettono il ruolo delle classi coinvolte La struttura applicativa nasce “già girata per il verso giusto” Convention over Configuration fa in modo che tutto funzioni “magicamente”
  • 22. Oltre il POJO Groovy va oltre il modello POJO No getters No setters No private… (No punto e virgola) No import Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007 Class utente { String nome String cognome String password Date lastLogin } POGO?
  • 23. Convention over configuration Non è necessario esplicitare le dipendenze tra le classi di uno stesso percorso Un po’ come Spring… … solo che possiamo fare a meno anche del file di configurazione! Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007
  • 24. Controllers Un controller corrisponde all’omonima classe di dominio Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007 I metodi del controller sono mappati direttamente negli URL http://localhost:8080/demo/utente/display >grails create-controller
  • 25. Scaffolding Grails ha due modalità di gestione dello scaffolding. Lo scaffolding dinamico ci obbliga a scrivere qualche riga di codice Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007 Class UtenteController { def scaffold = Utente } … sufficiente a generare un intero CRUD
  • 26. Scaffolding - 2 In alternativa possiamo adottare la modalità “tradizionale” da riga di comando Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007 Anche questa genera i metodi del controller, le pagine di editing, etc. Le due modalità possono essere “compresenti”… >grails generate-all
  • 27. Up and running – Web Server In configurazione di sviluppo, Grails lancia un web server Jetty embedded , agganciato di default alla porta 8080. Non è necessaria configurazione per iniziare a sviluppare . Non è necessaria configurazione per iniziare a sviluppare In ambiente di test, produzione, etc. posso comunque rilasciare un classico .war .
  • 28. Up and running - DB In configurazione di sviluppo NON è necessaria l’installazione del DB : Viene utilizzato un in-memory-database HSQLDB Script di popolamento generato da Grails
  • 29. Up and Running – Logging Grails parte con Log4J già configurato. Componenti di Grails a livello INFO Componenti di sistema a livello ERROR. log4j:WARN No appenders could be found for logger (it.brando.example.domain.TestBaseProject). log4j:WARN Please initialize the log4j system properly.
  • 30. Up and Running - ORM La configurazione di Hibernate viene gestita da un modulo apposito: GORM Anche in questo caso vale il principio di Convention over Configuration Non è necessario specificare il mapping delle nostre entità: questo viene dedotto dalle caratteristiche dei nostri oggetti groovy.
  • 31. Ciclo di persistenza Gli oggetti modificati sono automaticamente salvati Hibernate legge i dirty objects dietro le quinte e ed aggiorna il dato se l’oggetto è stato modificato Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007 E la validazione?
  • 32. Validazione I constraints di validazione possono essere specificati a livello di domain classes Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007 Class Utente { String nome String cognome String password String email Date lastLogin static constraints = [nome(blank:false), cognome (blank:false), email (email:true)] }
  • 33. Dynamic Finders Metodi di Data Retrieval dedotti via convention over configuration. Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007 Utente.findByNomeAndCognome(‘Alberto’,‘Brandolini’) Utente.findByNome(‘Alberto’) Possibile utilizzare combinazioni di più parametri … ancora senza scrivere una riga di DAO
  • 34. Hibernate Se necessario è possibile utilizzare tutte le funzionalità esposte da Hibernate Query By Examples Criterias Projections Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007
  • 35. Up and Running – I18n Grails nasce GIA’ internazionalizzato Resource bundle per le principali lingue europee Messaggi di validazione standard già presenti Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007
  • 37. Scaffolding Prototipazione rapida di tutte le strutture necessarie alla manipolazione di un’entità applicativa. È un punto di partenza molto comodo, ma non è l’applicazione. … necessario ri-analizzare il processo di sviluppo alla luce delle novità. Iterazioni più corte? Maggior coinvolgimento dei committenti? MOLTO
  • 38. Un tool “forzatamente” agile … necessario ri-analizzare il processo di sviluppo alla luce delle novità. Iterazioni più corte? Maggior coinvolgimento dei committenti? Grails permette di anticipare il momento del feedback In un processo “waterfall” o con poca interazione con il cliente rischiamo di sprecare buona parte dei vantaggi acquisiti Alberto Brandolini – [email protected] - Mokabyte Javaday Roma - 01/12/2007
  • 39. Strumenti di supporto … i “duri e puri” possono fare a meno dell’IDE (anche perché alcune delle funzionalità sono ora parte del linguaggio) Supporto per Groovy in Eclipse , JDeveloper , IntelliJ IDEA , etc. C’è “movimento” ma l’aspetto pionieristico si percepisce ancora…
  • 41. Bibliografia The Definitive Guide to Grails – Graeme Keith Rocher (Apress)
  • 42. Bibliografia Groovy in Action – Dierk König (Manning)
  • 43. Bibliografia collegata Java Persistence with Hibernate – Christian Bauer, Gavin King (Manning) Spring in Action – Craig Walls (Manning)
  • 44. Riferimenti Grails : http://grails.codehaus.org Groovy : http://groovy.codehaus.org Mokabyte : http://www.mokabyte.it Gruppo Imola : http://www.imolinfo.it Homepage : http://albertobrandolini.wikidot.com Blog : http://ziobrando.blogspot.com Mail : [email_address]