SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
Introducción a




http://twitter.com/highwayman
d.highwayman@gmail.com
http://linkd.in/davidsantamaria
Que es Grails

Grails es un framework para el desarrollo de aplicaciónes web
basado en el lenguaje de programación Groovy.
Paradigmas:
  ● DRY
  ● CoC
Patrón:
  ● MVC
Libre de:
  ● NIH
Que es Grails

● Groovy Sobre Spring.
● Servidor (Tomcat) y bbdd (HSQL) embebidos.
● Debug en caliente y genera WAR.
● Scaffolding
● Testing
● Extensible: plugins
Que es Grails
Que mas es Grails?
Framework Spring:

 ● DispatcherServlet -> Grails controllers
 ● Data Binding and Validation
 ● Runtime configuration
 ● ApplicationContext
 ● Transactions : Usadas por el GORM
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
     -> Tareas GANT.
 ● http://gant.codehaus.org/
 ● Empaquetado de la aplicacion.
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...
 ● YUI



Y 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 Grails
http://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
Comenzamos! (II)
$ grails create-app HelloWorld
$ cd HelloWorld
Grails: HelloWorld

grails create-controller Hello

package helloworld
class HelloController {
def world = {
  render "Hello World!"
}
}

Una pequeña ayuda:
 static defaultAction = "world"
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 helloworld
class HelloController {
def world = {
   render view:"world" model:[name:"david"]
}
}
Grails: Clases Dominio

grails create-domain-class org.example.Book

package org.example
class Book {
  String title
  String author

    static constraints = {
      title(blank: false)
      author(blank: false)
    }
}
Grails: GORM

Grails object relational mapping (ORM)
Create
def p = new Person(name:"David", age:30, lastVisit:new Date())
p.save()
Read
def p = Person.get(1)
assert 1 == p.id
Update
def p = Person.get(1)
p.name = "David Santamaria"
p.save()
Delete
def p = Person.get(1)
p.delete()
Grails: Controllers

grails create-controller org.example.Book

package org.example
class BookController {
  def scaffold = Book // Note the capital "B"
}
Grails: Scaffolding
El Scaffolding es la habilidad que tiene Grails para generar las
vistas 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 Estatico
grails generate-controller Book
grails generate-views Book

grails generate-all org.example.Book
Grails: Ejecutando la aplicación

grails run-app

Server running. Browse to http://localhost:8080/HelloWorld
Grails: Services

Los servicios en grails son transaccionales por defecto.

grails create-service book

package org.example
class BookService {
}

Para deshabilitar la transaccionalidad:
static transactional = false
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"
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"
Grails: Services(III)

Grails permite la inyección de servicios

class BookController {
  def bookService
  …
}
Grails: Validacion

La 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)
  }
}
Grails: Validacion(II)

Y en los controllers

def user = new User(params)
if(user.validate()) {
   // do something with user
}
else {
   user.errors.allErrors.each {
      println it
   }
}
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>
Grails: Mas GORM

Asociaciones:
 ● Agregación (unidireccional)
class Face {
  Nose nose
}
class Nose {
}


  ● Agregacion (bidireccional)
class Face {
  Nose nose
}
class Nose {
   static belongsTo = [face:Face]
}
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ón
class Author {
   static hasMany = [ books : Book ]
  String name
}
class Book {
String title
}

(Deletes y updates on cascade)
Grails: Mas GORM(III)

Asociaciones(III):
  ● Muchas a muchas: Author es el owner
class 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()
Grails: Mas GORM(IV)

Queries:

  ● Listando
def books = Book.list(sort:"title", order:"asc")

  ● Dynamic Finders
def book = Book.findByTitle("The Stand")
book = Book.findByTitleLike("Harry Pot%")

book = Book.findByReleaseDateBetween( firstDate, secondDate )

book = Book.findByReleaseDateGreaterThan( someDate )

book = Book.findByTitleLikeOrReleaseDateLessThan( "%Something%", someDate )
Grails: Environments
Grails soporta el concepto de entornos.
Los entornos pueden ser seleccionados antes de lanzar alguno
de los scripts de grails:
  grails prod run-app
Los entornos pueden ser usados para tener diferentes
configuraciones.
setting = "foo"
com.example.anything.setting = "something"
environments {
  production {
     setting = "bar"
  }
}
Grails: BootStrap
Grails permite la ejecucion de tareas y/o configuracion de la aplicacion previas
a su ejecución
Para ello se pueden crear tantas clases BootStrap como se quieran en el
directorio "%PROJECT_HOME%/grails-app/conf"

import org.example.Book
class 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 = {
    }
}
Grails: DataSources

Configurando 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 = ""
    }
Grails: DataSources(II)

La propiedad dbCreate indica a Grails que hay que hacer con
los objetos de Dominio:
 ● create-drop.
 ● create.
 ● update.
 ● validate.
Grails: Mas Scaffolding




Podemos sobreescribir los Controllers y las vistas que se
generan en el Scaffolding.

  ● grails install-templates

Y entonces en el directorio src/templates tendras las templates que se usan
en tu proyecto.
Casos de exito
Casos de exito
Casos de exito
Casos de exito
Mas Grails

Toda la documentacion:
http://grails.org/doc/latest/

IDE: STS, la version de eclipse de SpringSource.
http://www.springsource.com/developer/sts
Grails

Más contenido relacionado

La actualidad más candente

Groovy no es java sin puntos y comas - Codemotion Madrid 2014
Groovy no es java sin puntos y comas - Codemotion Madrid 2014Groovy no es java sin puntos y comas - Codemotion Madrid 2014
Groovy no es java sin puntos y comas - Codemotion Madrid 2014Pablo Alba
 
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...RootedCON
 
Seminario de Groovy y grails
Seminario de Groovy y grailsSeminario de Groovy y grails
Seminario de Groovy y grailsParadigma Digital
 
Desarrollo web ágil con Python y Django
Desarrollo web ágil con Python y DjangoDesarrollo web ágil con Python y Django
Desarrollo web ágil con Python y DjangoJaime Irurzun
 
Crystal: herramientas, uso y creación.
Crystal: herramientas, uso y creación.Crystal: herramientas, uso y creación.
Crystal: herramientas, uso y creación.Crystal Language
 
Creación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y ExpressCreación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y Expressbetabeers
 
Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2Javier López
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMjavier ramirez
 
Evadiendo antivirus - uso de crypters
Evadiendo antivirus - uso de cryptersEvadiendo antivirus - uso de crypters
Evadiendo antivirus - uso de cryptersINCIDE
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispanohdgarcia
 
Ocho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptOcho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptDavid Ballén
 
Introducción al desarrollo Web: Backend
Introducción al desarrollo Web: BackendIntroducción al desarrollo Web: Backend
Introducción al desarrollo Web: BackendGabriela Bosetti
 

La actualidad más candente (20)

Groovy no es java sin puntos y comas - Codemotion Madrid 2014
Groovy no es java sin puntos y comas - Codemotion Madrid 2014Groovy no es java sin puntos y comas - Codemotion Madrid 2014
Groovy no es java sin puntos y comas - Codemotion Madrid 2014
 
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
 
Seminario de Groovy y grails
Seminario de Groovy y grailsSeminario de Groovy y grails
Seminario de Groovy y grails
 
Desarrollo web ágil con Python y Django
Desarrollo web ágil con Python y DjangoDesarrollo web ágil con Python y Django
Desarrollo web ágil con Python y Django
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
 
Java 7- Java Day Guatemala
Java 7- Java Day GuatemalaJava 7- Java Day Guatemala
Java 7- Java Day Guatemala
 
Crystal: herramientas, uso y creación.
Crystal: herramientas, uso y creación.Crystal: herramientas, uso y creación.
Crystal: herramientas, uso y creación.
 
Introduccion a Python
Introduccion a PythonIntroduccion a Python
Introduccion a Python
 
Creación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y ExpressCreación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y Express
 
Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2
 
Decompiladores
DecompiladoresDecompiladores
Decompiladores
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Evadiendo antivirus - uso de crypters
Evadiendo antivirus - uso de cryptersEvadiendo antivirus - uso de crypters
Evadiendo antivirus - uso de crypters
 
Introducción a Groovy
Introducción a GroovyIntroducción a Groovy
Introducción a Groovy
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispano
 
El apuntador this
El apuntador this El apuntador this
El apuntador this
 
Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
HTML5
HTML5HTML5
HTML5
 
Ocho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptOcho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScript
 
Introducción al desarrollo Web: Backend
Introducción al desarrollo Web: BackendIntroducción al desarrollo Web: Backend
Introducción al desarrollo Web: Backend
 

Destacado

Entrepreneurship education activity consists of both dynamic and
Entrepreneurship education activity consists of both dynamic andEntrepreneurship education activity consists of both dynamic and
Entrepreneurship education activity consists of both dynamic andmahinrad
 
фонетика
фонетикафонетика
фонетикаLuisas90
 
Grails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaGrails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaDomingo Suarez Torres
 
Lernen Srpechen
Lernen SrpechenLernen Srpechen
Lernen SrpechenLuisas90
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 

Destacado (7)

Entrepreneurship education activity consists of both dynamic and
Entrepreneurship education activity consists of both dynamic andEntrepreneurship education activity consists of both dynamic and
Entrepreneurship education activity consists of both dynamic and
 
фонетика
фонетикафонетика
фонетика
 
Nick M
Nick MNick M
Nick M
 
Grails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaGrails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta carga
 
Lernen Srpechen
Lernen SrpechenLernen Srpechen
Lernen Srpechen
 
Cls minerv-1232-1245-laccase
Cls minerv-1232-1245-laccaseCls minerv-1232-1245-laccase
Cls minerv-1232-1245-laccase
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

Similar a Grails

Tu api ha muerto larga vida a tu dsl
Tu api ha muerto  larga vida a tu dslTu api ha muerto  larga vida a tu dsl
Tu api ha muerto larga vida a tu dslJorge Aguilera
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Fernando Petrola
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradleDavid Gómez García
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesDani Latorre
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicketAdrià Solé Orrit
 
Introducción a AngularJS
Introducción a AngularJS Introducción a AngularJS
Introducción a AngularJS Marcos Reynoso
 
Grails: Framework para el desarrollo de aplicaciones Web No 2
Grails: Framework para el desarrollo de aplicaciones Web No 2Grails: Framework para el desarrollo de aplicaciones Web No 2
Grails: Framework para el desarrollo de aplicaciones Web No 2Esteban Saavedra
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Gabriela Bosetti
 
Grails en Expo FISI 2011
Grails en Expo FISI 2011Grails en Expo FISI 2011
Grails en Expo FISI 2011jose diaz
 
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Fátima Casaú Pérez
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryDavid Arango
 
CouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidCouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidRicardo Monagas Medina
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJSBEEVA_es
 

Similar a Grails (20)

Taller de Grails
Taller de GrailsTaller de Grails
Taller de Grails
 
Tu api ha muerto larga vida a tu dsl
Tu api ha muerto  larga vida a tu dslTu api ha muerto  larga vida a tu dsl
Tu api ha muerto larga vida a tu dsl
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
Creación de plugins con Grails
Creación de plugins con GrailsCreación de plugins con Grails
Creación de plugins con Grails
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradle
 
Groogle
GroogleGroogle
Groogle
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernes
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicket
 
Introducción a AngularJS
Introducción a AngularJS Introducción a AngularJS
Introducción a AngularJS
 
Grails: Framework para el desarrollo de aplicaciones Web No 2
Grails: Framework para el desarrollo de aplicaciones Web No 2Grails: Framework para el desarrollo de aplicaciones Web No 2
Grails: Framework para el desarrollo de aplicaciones Web No 2
 
Gwt II - trabajando con gwt
Gwt II - trabajando con gwtGwt II - trabajando con gwt
Gwt II - trabajando con gwt
 
Web Mapping con Django
Web Mapping con DjangoWeb Mapping con Django
Web Mapping con Django
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
 
Grails en Expo FISI 2011
Grails en Expo FISI 2011Grails en Expo FISI 2011
Grails en Expo FISI 2011
 
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQuery
 
CouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidCouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones Android
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 

Último

KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 

Último (16)

KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 

Grails

  • 2. Que es Grails Grails es un framework para el desarrollo de aplicaciónes web basado en el lenguaje de programación Groovy. Paradigmas: ● DRY ● CoC Patrón: ● MVC Libre de: ● NIH
  • 3. Que es Grails ● Groovy Sobre Spring. ● Servidor (Tomcat) y bbdd (HSQL) embebidos. ● Debug en caliente y genera WAR. ● Scaffolding ● Testing ● Extensible: plugins
  • 5. Que mas es Grails? Framework Spring: ● DispatcherServlet -> Grails controllers ● Data Binding and Validation ● Runtime configuration ● ApplicationContext ● Transactions : Usadas por el GORM
  • 6. Que mas es Grails? Contenedor Web: - Jetty. Pero tambien estan... - Tomcat. - Weblogic - JBoss - GlassFish - Geronimo - ....
  • 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. Que mas es Grails? Persistencia: GORM ● Framework de persistencia. ● Mapeo automatico con Hibernate.
  • 9. Que mas es Grails? DataSources ● Por defecto grails viene configurado para usar HSQLDB.
  • 10. Que mas es Grails? Sitemesh ● Renderizado del HTML. ● Patron Decorator.
  • 11. Que mas es Grails? Javascript & AJAX ● Prototype. Pero también estan... ● YUI Y a partir de la version 1.7(2.0) ● jQuery
  • 12. Que mas es Grails? Testing ● Framework de desarrollo de Test Unitarios. ● Test de integracion. ● Test funcionales.
  • 13. Que mas es Grails? TODO! http://www.grails.org/plugins/ Sistema de plugins. 637 Total (por el momento)
  • 14. Comenzamos! ● Descargamos la ultima version de Grails http://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. Comenzamos! (II) $ grails create-app HelloWorld $ cd HelloWorld
  • 16. Grails: HelloWorld grails create-controller Hello package helloworld class HelloController { def world = { render "Hello World!" } } Una pequeña ayuda: static defaultAction = "world"
  • 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 helloworld class HelloController { def world = { render view:"world" model:[name:"david"] } }
  • 18. Grails: Clases Dominio grails create-domain-class org.example.Book package org.example class Book { String title String author static constraints = { title(blank: false) author(blank: false) } }
  • 19. Grails: GORM Grails object relational mapping (ORM) Create def p = new Person(name:"David", age:30, lastVisit:new Date()) p.save() Read def p = Person.get(1) assert 1 == p.id Update def p = Person.get(1) p.name = "David Santamaria" p.save() Delete def p = Person.get(1) p.delete()
  • 20. Grails: Controllers grails create-controller org.example.Book package org.example class BookController { def scaffold = Book // Note the capital "B" }
  • 21. Grails: Scaffolding El Scaffolding es la habilidad que tiene Grails para generar las vistas 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 Estatico grails generate-controller Book grails generate-views Book grails generate-all org.example.Book
  • 22. Grails: Ejecutando la aplicación grails run-app Server running. Browse to http://localhost:8080/HelloWorld
  • 23. Grails: Services Los servicios en grails son transaccionales por defecto. grails create-service book package org.example class BookService { } Para deshabilitar la transaccionalidad: static transactional = false
  • 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. 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. Grails: Services(III) Grails permite la inyección de servicios class BookController { def bookService … }
  • 27. Grails: Validacion La 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. Grails: Validacion(II) Y en los controllers def user = new User(params) if(user.validate()) { // do something with user } else { user.errors.allErrors.each { println it } }
  • 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. Grails: Mas GORM Asociaciones: ● Agregación (unidireccional) class Face { Nose nose } class Nose { } ● Agregacion (bidireccional) class Face { Nose nose } class Nose { static belongsTo = [face:Face] }
  • 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ón class Author { static hasMany = [ books : Book ] String name } class Book { String title } (Deletes y updates on cascade)
  • 32. Grails: Mas GORM(III) Asociaciones(III): ● Muchas a muchas: Author es el owner class 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. Grails: Mas GORM(IV) Queries: ● Listando def books = Book.list(sort:"title", order:"asc") ● Dynamic Finders def 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. Grails: Environments Grails soporta el concepto de entornos. Los entornos pueden ser seleccionados antes de lanzar alguno de los scripts de grails: grails prod run-app Los entornos pueden ser usados para tener diferentes configuraciones. setting = "foo" com.example.anything.setting = "something" environments { production { setting = "bar" } }
  • 35. Grails: BootStrap Grails permite la ejecucion de tareas y/o configuracion de la aplicacion previas a su ejecución Para ello se pueden crear tantas clases BootStrap como se quieran en el directorio "%PROJECT_HOME%/grails-app/conf" import org.example.Book class 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. Grails: DataSources Configurando 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. Grails: DataSources(II) La propiedad dbCreate indica a Grails que hay que hacer con los objetos de Dominio: ● create-drop. ● create. ● update. ● validate.
  • 38. Grails: Mas Scaffolding Podemos sobreescribir los Controllers y las vistas que se generan en el Scaffolding. ● grails install-templates Y entonces en el directorio src/templates tendras las templates que se usan en tu proyecto.
  • 43. Mas Grails Toda la documentacion: http://grails.org/doc/latest/ IDE: STS, la version de eclipse de SpringSource. http://www.springsource.com/developer/sts