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

Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 

Último (20)

Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.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