Successfully reported this slideshow.
Sviluppo Rapido di Applicazioni con Grails
Presentazioni <ul><li>About Mokabyte: </li></ul><ul><ul><li>La prima rivista Web dedicata a java </li></ul></ul><ul><ul><l...
Gli acciacchi dell'età <ul><li>Lo sviluppo web in salsa J(2)EE soffre di patologie croniche: </li></ul><ul><ul><li>Bassa p...
…  il tran tran quotidiano … <ul><li>Sintassi prolissa </li></ul><ul><li>Costrutti obbligatori </li></ul><ul><li>Compile <...
… i tempi che cambiano… Alberto Brandolini – abrandolini@mokabyte.it - Mokabyte Javaday Roma - 01/12/2007 Java 1.4 Java 5 ...
… l’insolenza dei giovani …
… tutti su Ruby? <ul><li>Non buttiamo il bambino con l’acqua sporca! </li></ul><ul><ul><li>Java è la maggiore comunità di ...
Cos'è Groovy? <ul><li>“ Groovy è Java come lo avremmo potuto inventare dopo aver visto Ruby” </li></ul><ul><ul><li>Linguag...
Groovy Bytecode <ul><li>A livello di bytecode,  Groovy è Java </li></ul>.class .class JVM
JSR-241 <ul><li>Groovy è entrato a fare parte ufficialmente del mondo java. </li></ul><ul><li>Groovy è il  secondo linguag...
<ul><li>Sintassi “ java-like” </li></ul><ul><li>…  ma anche molto più concisa </li></ul><ul><li>Groovy String  </li></ul><...
Chiusure - Closures <ul><li>Frammenti di codice che possono essere riutilizzati in diversi contesti </li></ul><ul><li>In J...
Collections e ranges  <ul><li>List e maps sono tipi primitivi in Groovy. </li></ul><ul><li>Overloading degli operatori </l...
Cos'è Grails? <ul><li>L’ennesimo framework MVC? </li></ul><ul><li>Un clone di Ruby on Rails? </li></ul><ul><li>Un ORM? </l...
Dove nasce… <ul><li>Grails affonda le sue origini nella “perfida Albione”, e nasce da un’intuizione di Graeme Keith Rocher...
Demo!
Layout di progetto <ul><li>La struttura delle directory di progetto è creata da Grails </li></ul>Convention over Configura...
Technology Stack JVM JDK Java language Java Enterprise Edition Spring Hibernate Quartz Grails Site-mesh
Built-in MVC architecture <ul><li>L’impianto architetturale di Grails è strettamente MVC </li></ul><ul><ul><li>I packages ...
Oltre il POJO <ul><li>Groovy va oltre il modello POJO </li></ul><ul><ul><li>No getters </li></ul></ul><ul><ul><li>No sette...
Convention over configuration <ul><li>Non è necessario esplicitare le dipendenze tra le classi di uno stesso percorso </li...
Controllers <ul><li>Un controller corrisponde all’omonima classe di dominio </li></ul>Alberto Brandolini – abrandolini@mok...
Scaffolding <ul><li>Grails ha due modalità di gestione dello scaffolding. </li></ul><ul><li>Lo scaffolding  dinamico  ci o...
Scaffolding - 2 <ul><li>In alternativa possiamo adottare la modalità “tradizionale” da riga di comando </li></ul>Alberto B...
Up and running – Web Server <ul><li>In configurazione di sviluppo, Grails lancia un web server  Jetty   embedded , agganci...
Up and running - DB <ul><li>In configurazione di sviluppo  NON è necessaria l’installazione del DB : </li></ul><ul><li>Vie...
Up and Running – Logging <ul><li>Grails parte con Log4J già configurato. </li></ul><ul><li>Componenti di Grails a livello ...
Up and Running - ORM <ul><li>La configurazione di Hibernate viene gestita da un modulo apposito:  GORM </li></ul><ul><li>A...
Ciclo di persistenza <ul><li>Gli oggetti modificati sono automaticamente salvati </li></ul><ul><li>Hibernate legge i  dirt...
Validazione <ul><li>I constraints di validazione possono essere specificati a livello di domain classes </li></ul>Alberto ...
Dynamic Finders <ul><li>Metodi di Data Retrieval dedotti via convention over configuration. </li></ul>Alberto Brandolini –...
Hibernate <ul><li>Se necessario è possibile utilizzare tutte le funzionalità esposte da Hibernate </li></ul><ul><ul><li>Qu...
Up and Running – I18n <ul><li>Grails nasce GIA’ internazionalizzato </li></ul><ul><li>Resource bundle per le principali li...
Scaffolding <ul><li>Prototipazione  rapida di tutte le strutture necessarie alla manipolazione di un’entità applicativa. <...
Un tool “forzatamente” agile <ul><li>…  necessario ri-analizzare il processo di sviluppo alla luce delle novità. </li></ul...
Strumenti di supporto <ul><li>…  i “duri e puri” possono fare a meno dell’IDE (anche perché alcune delle funzionalità sono...
Bibliografia <ul><li>The Definitive Guide to Grails  – Graeme Keith Rocher (Apress) </li></ul>
Bibliografia <ul><li>Groovy in Action  – Dierk König (Manning) </li></ul>
Bibliografia collegata <ul><li>Java Persistence with Hibernate  – Christian Bauer, Gavin King (Manning) </li></ul><ul><li>...
Riferimenti <ul><li>Grails :  http://grails.codehaus.org   </li></ul><ul><li>Groovy :  http://groovy.codehaus.org   </li><...
Upcoming SlideShare
Loading in …5
×

Sviluppo Rapido Di Applicazioni Con Grails

3,449 views

Published on

My presentation about Grails @ the Italian Java Day in Rome

Published in: Technology, Business
  • Be the first to comment

Sviluppo Rapido Di Applicazioni Con Grails

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

×