Introducción ahttp://twitter.com/highwaymand.highwayman@gmail.comhttp://linkd.in/davidsantamaria
Que es GrailsGrails es un framework para el desarrollo de aplicaciónes webbasado en el lenguaje de programación Groovy.Par...
Que es Grails● Groovy Sobre Spring.● Servidor (Tomcat) y bbdd (HSQL) embebidos.● Debug en caliente y genera WAR.● Scaffold...
Que es Grails
Que mas es Grails?Framework Spring: ● DispatcherServlet -> Grails controllers ● Data Binding and Validation ● Runtime conf...
Que mas es Grails?Contenedor Web:- Jetty.Pero tambien estan...- Tomcat.- Weblogic- JBoss- GlassFish- Geronimo- ....
Que mas es Grails?Sistema de empaquetado y scripts: GANT ● ANT + Groovy (-XML) ● Sistema de Scripts de Grails     -> Tarea...
Que mas es Grails?Persistencia: GORM ● Framework de persistencia. ● Mapeo automatico con Hibernate.
Que mas es Grails?DataSources ● Por defecto grails viene configurado   para usar HSQLDB.
Que mas es Grails?Sitemesh ● Renderizado del HTML. ● Patron Decorator.
Que mas es Grails?Javascript & AJAX ● Prototype.Pero también estan... ● YUIY a partir de la version 1.7(2.0) ● jQuery
Que mas es Grails?Testing ● Framework de desarrollo de Test   Unitarios. ● Test de integracion. ● Test funcionales.
Que mas es Grails?TODO!http://www.grails.org/plugins/Sistema de plugins.637 Total (por el momento)
Comenzamos!  ● Descargamos la ultima version de Grailshttp://grails.org/Download  ● Descomprimimos en un directorio.  ● Añ...
Comenzamos! (II)$ grails create-app HelloWorld$ cd HelloWorld
Grails: HelloWorldgrails create-controller Hellopackage helloworldclass HelloController {def world = {  render "Hello Worl...
Grails: HelloWorld(II)Y las vistas?<html> <body>  Hello world </body></html>en /grails-app/views/hello/world.gsp.Y como co...
Grails: Clases Dominiograils create-domain-class org.example.Bookpackage org.exampleclass Book {  String title  String aut...
Grails: GORMGrails object relational mapping (ORM)Createdef p = new Person(name:"David", age:30, lastVisit:new Date())p.sa...
Grails: Controllersgrails create-controller org.example.Bookpackage org.exampleclass BookController {  def scaffold = Book...
Grails: ScaffoldingEl Scaffolding es la habilidad que tiene Grails para generar lasvistas y las acciones para una determin...
Grails: Ejecutando la aplicacióngrails run-appServer running. Browse to http://localhost:8080/HelloWorld
Grails: ServicesLos servicios en grails son transaccionales por defecto.grails create-service bookpackage org.exampleclass...
Grails: Services(II)Por defecto los accesos a los servicios NO son sincronoizados.Scope: Grails permite definir el scope d...
Grails: Services(II)Por defecto los accesos a los servicios NO son sincronoizados.Scope: Grails permite definir el scope d...
Grails: Services(III)Grails permite la inyección de serviciosclass BookController {  def bookService  …}
Grails: ValidacionLa Validacion en las entidades:class User {  String login  String password  String email  Integer age  s...
Grails: Validacion(II)Y en los controllersdef user = new User(params)if(user.validate()) {   // do something with user}els...
Grails: Validacion(II)Y en las vistas<g:hasErrors bean="${user}"> <ul>  <g:eachError var="err" bean="${user}">    <li>${er...
Grails: Mas GORMAsociaciones: ● Agregación (unidireccional)class Face {  Nose nose}class Nose {}  ● Agregacion (bidireccio...
Grails: Mas GORM(II)Asociaciones(II):   ● Una a Una( Foreign Key)class Face {   static hasOne = [nose:Nose]}class Nose {  ...
Grails: Mas GORM(III)Asociaciones(III):  ● Muchas a muchas: Author es el ownerclass Book {  static belongsTo = Author  sta...
Grails: Mas GORM(IV)Queries:  ● Listandodef books = Book.list(sort:"title", order:"asc")  ● Dynamic Findersdef book = Book...
Grails: EnvironmentsGrails soporta el concepto de entornos.Los entornos pueden ser seleccionados antes de lanzar algunode ...
Grails: BootStrapGrails permite la ejecucion de tareas y/o configuracion de la aplicacion previasa su ejecuciónPara ello s...
Grails: DataSourcesConfigurando un nuevo DataSource:    ○ Por defecto grails viene configurado para usar HSQLDB.    ○ In-m...
Grails: DataSources(II)La propiedad dbCreate indica a Grails que hay que hacer conlos objetos de Dominio: ● create-drop. ●...
Grails: Mas ScaffoldingPodemos sobreescribir los Controllers y las vistas que segeneran en el Scaffolding.  ● grails insta...
Casos de exito
Casos de exito
Casos de exito
Casos de exito
Mas GrailsToda la documentacion:http://grails.org/doc/latest/IDE: STS, la version de eclipse de SpringSource.http://www.sp...
Grails
Upcoming SlideShare
Loading in...5
×

Grails

2,402

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,402
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
53
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Grails

  1. 1. Introducción ahttp://twitter.com/highwaymand.highwayman@gmail.comhttp://linkd.in/davidsantamaria
  2. 2. Que es GrailsGrails es un framework para el desarrollo de aplicaciónes webbasado en el lenguaje de programación Groovy.Paradigmas: ● DRY ● CoCPatrón: ● MVCLibre de: ● NIH
  3. 3. Que es Grails● Groovy Sobre Spring.● Servidor (Tomcat) y bbdd (HSQL) embebidos.● Debug en caliente y genera WAR.● Scaffolding● Testing● Extensible: plugins
  4. 4. Que es Grails
  5. 5. Que mas es Grails?Framework Spring: ● DispatcherServlet -> Grails controllers ● Data Binding and Validation ● Runtime configuration ● ApplicationContext ● Transactions : Usadas por el GORM
  6. 6. Que mas es Grails?Contenedor Web:- Jetty.Pero tambien estan...- Tomcat.- Weblogic- JBoss- GlassFish- Geronimo- ....
  7. 7. Que mas es Grails?Sistema de empaquetado y scripts: GANT ● ANT + Groovy (-XML) ● Sistema de Scripts de Grails -> Tareas GANT. ● http://gant.codehaus.org/ ● Empaquetado de la aplicacion.
  8. 8. Que mas es Grails?Persistencia: GORM ● Framework de persistencia. ● Mapeo automatico con Hibernate.
  9. 9. Que mas es Grails?DataSources ● Por defecto grails viene configurado para usar HSQLDB.
  10. 10. Que mas es Grails?Sitemesh ● Renderizado del HTML. ● Patron Decorator.
  11. 11. Que mas es Grails?Javascript & AJAX ● Prototype.Pero también estan... ● YUIY a partir de la version 1.7(2.0) ● jQuery
  12. 12. Que mas es Grails?Testing ● Framework de desarrollo de Test Unitarios. ● Test de integracion. ● Test funcionales.
  13. 13. Que mas es Grails?TODO!http://www.grails.org/plugins/Sistema de plugins.637 Total (por el momento)
  14. 14. Comenzamos! ● Descargamos la ultima version de Grailshttp://grails.org/Download ● Descomprimimos en un directorio. ● Añadimos la variable de entorno GRAILS_HOME.Y %GRAILS_HOME%/bin a la variable PATH. ○ Debemos tener JAVA_HOME apuntando al SDK ● Escribimos grails
  15. 15. Comenzamos! (II)$ grails create-app HelloWorld$ cd HelloWorld
  16. 16. Grails: HelloWorldgrails create-controller Hellopackage helloworldclass HelloController {def world = { render "Hello World!"}}Una pequeña ayuda: static defaultAction = "world"
  17. 17. Grails: HelloWorld(II)Y las vistas?<html> <body> Hello world </body></html>en /grails-app/views/hello/world.gsp.Y como compartimos información desde el controller?<html> <body> Hello ${params.name} </body></html>package helloworldclass HelloController {def world = { render view:"world" model:[name:"david"]}}
  18. 18. Grails: Clases Dominiograils create-domain-class org.example.Bookpackage org.exampleclass Book { String title String author static constraints = { title(blank: false) author(blank: false) }}
  19. 19. Grails: GORMGrails object relational mapping (ORM)Createdef p = new Person(name:"David", age:30, lastVisit:new Date())p.save()Readdef p = Person.get(1)assert 1 == p.idUpdatedef p = Person.get(1)p.name = "David Santamaria"p.save()Deletedef p = Person.get(1)p.delete()
  20. 20. Grails: Controllersgrails create-controller org.example.Bookpackage org.exampleclass BookController { def scaffold = Book // Note the capital "B"}
  21. 21. Grails: ScaffoldingEl Scaffolding es la habilidad que tiene Grails para generar lasvistas y las acciones para una determinada clase de Dominio.Scaffolding Dinamico ● Autogenerado a traves de la propiedad scaffold de grails. def scaffold = DomainClass def scaffold = true ● Se generan las siguientes acciones: list, show, edit, delete, create, save, update. ● Se genera también una interfaz CRUD.Scaffolding Estaticograils generate-controller Bookgrails generate-views Bookgrails generate-all org.example.Book
  22. 22. Grails: Ejecutando la aplicacióngrails run-appServer running. Browse to http://localhost:8080/HelloWorld
  23. 23. Grails: ServicesLos servicios en grails son transaccionales por defecto.grails create-service bookpackage org.exampleclass BookService {}Para deshabilitar la transaccionalidad:static transactional = false
  24. 24. Grails: Services(II)Por defecto los accesos a los servicios NO son sincronoizados.Scope: Grails permite definir el scope de un servicio. ● prototype -se crea cada nueva Inyección ● request - Se crea por request ● flash - Se crea para este y la siguiente peticion. ● flow - Durante todo el webflow ● conversation - Durante la conversacion en un webflow (el estado y sus subestados). ● session - Durante una sesion ● singleton (default) - Unica instancia de ese servicio (Por defecto).static scope = "flow"
  25. 25. Grails: Services(II)Por defecto los accesos a los servicios NO son sincronoizados.Scope: Grails permite definir el scope de un servicio. ● prototype -se crea cada nueva Inyección ● request - Se crea por request ● flash - Se crea para este y la siguiente peticion. ● flow - Durante todo el webflow ● conversation - Durante la conversacion en un webflow (el estado y sus subestados). ● session - Durante una sesion ● singleton (default) - Unica instancia de ese servicio (Por defecto).static scope = "flow"
  26. 26. Grails: Services(III)Grails permite la inyección de serviciosclass BookController { def bookService …}
  27. 27. Grails: ValidacionLa Validacion en las entidades:class User { String login String password String email Integer age static constraints = { login(size:5..15, blank:false, unique:true) password(size:5..15, blank:false) email(email:true, blank:false) age(min:18, nullable:false) }}
  28. 28. Grails: Validacion(II)Y en los controllersdef user = new User(params)if(user.validate()) { // do something with user}else { user.errors.allErrors.each { println it }}
  29. 29. Grails: Validacion(II)Y en las vistas<g:hasErrors bean="${user}"> <ul> <g:eachError var="err" bean="${user}"> <li>${err}</li> </g:eachError> </ul></g:hasErrors>
  30. 30. Grails: Mas GORMAsociaciones: ● Agregación (unidireccional)class Face { Nose nose}class Nose {} ● Agregacion (bidireccional)class Face { Nose nose}class Nose { static belongsTo = [face:Face]}
  31. 31. Grails: Mas GORM(II)Asociaciones(II): ● Una a Una( Foreign Key)class Face { static hasOne = [nose:Nose]}class Nose { Face face} ● Una a muchas (bidireccional): Composiciónclass Author { static hasMany = [ books : Book ] String name}class Book {String title}(Deletes y updates on cascade)
  32. 32. Grails: Mas GORM(III)Asociaciones(III): ● Muchas a muchas: Author es el ownerclass Book { static belongsTo = Author static hasMany = [authors:Author] String title}class Author { static hasMany = [books:Book] String name}new Author(name:"Stephen King").addToBooks(new Book(title:"The Stand")).addToBooks(new Book(title:"The Shining")).save()new Book(name:"Groovy in Action").addToAuthors(new Author(name:"Dierk Koenig")).addToAuthors(new Author(name:"Guillaume Laforge")).save()
  33. 33. Grails: Mas GORM(IV)Queries: ● Listandodef books = Book.list(sort:"title", order:"asc") ● Dynamic Findersdef book = Book.findByTitle("The Stand")book = Book.findByTitleLike("Harry Pot%")book = Book.findByReleaseDateBetween( firstDate, secondDate )book = Book.findByReleaseDateGreaterThan( someDate )book = Book.findByTitleLikeOrReleaseDateLessThan( "%Something%", someDate )
  34. 34. Grails: EnvironmentsGrails soporta el concepto de entornos.Los entornos pueden ser seleccionados antes de lanzar algunode los scripts de grails: grails prod run-appLos entornos pueden ser usados para tener diferentesconfiguraciones.setting = "foo"com.example.anything.setting = "something"environments { production { setting = "bar" }}
  35. 35. Grails: BootStrapGrails permite la ejecucion de tareas y/o configuracion de la aplicacion previasa su ejecuciónPara ello se pueden crear tantas clases BootStrap como se quieran en eldirectorio "%PROJECT_HOME%/grails-app/conf"import org.example.Bookclass BootStrap { def init = { servletContext -> // Check whether the test data already exists. if (!Book.count()) { new Book(author: "Stephen King", title: "The Shining").save(failOnError: true) new Book(author: "James Patterson", title: "Along Came a Spider").save(failOnError: true) } } def destroy = { }}
  36. 36. Grails: DataSourcesConfigurando un nuevo DataSource: ○ Por defecto grails viene configurado para usar HSQLDB. ○ In-memory. dataSource { dbCreate = "update" driverClassName = "com.mysql.jdbc.Driver" url = "jdbc:mysql://localhost/my_app" username = "root" password = "" }
  37. 37. Grails: DataSources(II)La propiedad dbCreate indica a Grails que hay que hacer conlos objetos de Dominio: ● create-drop. ● create. ● update. ● validate.
  38. 38. Grails: Mas ScaffoldingPodemos sobreescribir los Controllers y las vistas que segeneran en el Scaffolding. ● grails install-templatesY entonces en el directorio src/templates tendras las templates que se usanen tu proyecto.
  39. 39. Casos de exito
  40. 40. Casos de exito
  41. 41. Casos de exito
  42. 42. Casos de exito
  43. 43. Mas GrailsToda la documentacion:http://grails.org/doc/latest/IDE: STS, la version de eclipse de SpringSource.http://www.springsource.com/developer/sts
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×