SlideShare uma empresa Scribd logo
1 de 42
Taller de Groovy & Grails 13 Reunión de SpringHispano.org
Twitter Por favor para comentar en Twitter usa el hashtag#sh13 No se te olvide revisar los tweets con ese hashtag ;-)
Grails Una plataforma para el desarrollo Web
Agenda Grails Introducción Clases de dominio Controllers Servicios TagLibraries Deployment
Introducción ¿Qué es Grails? Una plataforma para desarrollo ágil en Web Logrando funcionalidades efectivas Y de paso divirtiéndose haciendolo Un framework MVC full-stack Open Source Corre en la JVM Desarrollo de aplicaciones con Groovy Altamente expresivo Totalmente orientado a objetos Dinámico Sintaxis familiar Perfecta integraciñon con Java
¿qué mas es Grails? Convención sobre configuración Defaults sensibles Todo tiene un lugar DRY (Don’trepeatyourself)
Simplicidad y poder IoC Provee una manera de ‘alambrar’ los objetos juntos con sus dependencias para tenerlos disponibles en tiempo de ejecución. IoC libera al desarrollador de la responsabilidad de obtener una referencia a un objeto dependiente ORM Provee una abstracción adicional sobre SQL, permitiendo a los desarrolladores pensar acerca de su modelo de dominio en lugar de pensar como acomodar los datos en SQL
Grails: la plataforma
Grails vive en el Ecosistema Java La grámaticaGroovy es derivada de Java 5, haciendo válido el código Java y el código Groovy Groovy comparte las misma API’s de Java Los objetos Groovy son objetos Java. A través del compilador de ensamble podemos tener referencias circulares entre Groovy y Java sin tener problemas de compilación Con Groovy podemos fácilmente usar las misma herramientas, las mismas herramientas de monitoreo y todas las existentes y futuras tecnologías Java
Laboratorio 1 Instalación de Grails y creación de la primera aplicación
Ventajas y características ORM con Cero-Configuración DependencyInjection Manejador de transacciones JNDI Internacionalización Web Flow Taglibraries Caching REST Layouts AJAX Servidor no necesita reiniciar(most cases) Desarrollo de pruebas en caliente Unit testing Integrationtesting Functiopnaltesting
Clases de dominio Sirven como corazón de la aplicación y del concepto del modelo de negocio El atributo más significativo que diferencia a las clases de dominio de otros artefactos dentro de las aplicaciones Grails es que estas son persistentes y que Grailsautómaticamente mapea cada clase de dominio dentro de una tabla física en la base de datos configurada El acto de mapear las clases en la capa de una base de datos relacional es también conocido como mapeo objeto-relacional(ORM). El ORM de Grails es llamado GORM y esta construido sobre el framework de persistencia más usado: Hibernate
Scaffolding Es una característica de Grails que permite rápidamente generar las interfaces para un CRUD para una clase de dominio existente. Ofrece varios beneficios, uno de ellos o tal vez el más destacado es que permite al desarrollador observar como interactúa Grails en todos sus elementos Importante: Grails NO es un framework para hacer CRUD. Y el scaffolding aunque es muy usado, no es el verdadero beneficio de usar Grails
Scaffolding Viene en dos sabores: Dinámico En runtime Estático Manejado por templates
Laboratorio 1.9 Instalación de plugin de seguridad
Laboratorio 2 Creación de clases de dominio y uso de Scaffolding dinámico
Scaffolding estático Podemos generar el código necesario del scaffolding, para estudiarlo, modificarlo, o eliminarlo… Nos ayudamos de: grailsgenerate-views grailsgenerate-controller grailsgenerate-all
Laboratorio 3 Scaffolding estático
Configurando DataSources Donde se almacenan los datos actualmente??? Podemos cambiar el lugar donde se ubica la base de datos y hacer una diferenciación entre diferentes ambientes de desarrollo Lo definimos en un solo archivo DataSource.groovy Un datasource se ve: dataSource { pooled = true driverClassName = "com.mysql.jdbc.Driver" dialect = org.hibernate.dialect.MySQLInnoDBDialect username = "root" password = "root" }
Datasource Lista de elementos que se pueden configurar: driverClassName username password url dbCreate pooled configClass logSql dialect
Environments Grails me permite establecer la configuración para cada entorno en el cual se ejecute la aplicación, incluso permite abrir más ambientes, esto es: environments { development { dataSource { 			… 		} 	} 	test { dataSource { 			… 		} 	} production { dataSource { 			… 		} 	} }
JNDI en Datasource Podemos configurar un recurso JNDI en el datasource de manera muy simple: production { dataSource { jndiName=“java:comp/env/jdbc/database” 		} 	}
Entendiendo mejor las clase de dominio Las aplicaciones OO por lo general siempre involucran un modelo de dominio representando las entidades de negocio de la aplicación Grails hace mucho del trabajo ‘díficil’ Por default todos los atributos de la clase son persistidos a base de datos
Validando las clases de dominio Muy seguramente encontremos reglas que obliguen a validar los valores de ciertas propiedades en una clase de dominio Reglas como estas deben ser expresadas claramente y solamente en un lugar Grails provee un mecanismo de validación a través de la interfaz Validation de Spring classPerson{ String propiedad staticconstraints = { propiedad(blank:false) 	} }
Lista de restricciones para clases de dominio
Otras restricciones min minLength minSize matches max maxLength maxSize notEqual Nullable range scale size
Propiedades transitorias Por default cada propiedad es persistido en base de datos, sin embargo, hay veces que una propiedad no debe ser persistida por requerimiento funcional Grails provee un mecanismo muy sencillo para para especificar que propiedades pueden ser transitorias Se hace como sigue: classCompany{ String nombre BigDecimalsalarioPorDepartamento statictransients = ['salarioPorDepartamento'] }
Personalizando el mapeo de base de datos Grails con el uso de convención sobre configuración mapea los nombres de las clases en nombres de campos definidos de la misma manera, sin embargo, puede que queramos saltarnos la convención por alguna necesidad especifica y establecer manualmente tanto el nombre de la tabla como los nombres de los campos, que no coinciden en la convención usada por Grails Con ayuda de un DSL Grails me permite cambiar este comportamiento
Personalizando el mapeo de base de datos La clase: classPerson{ StringfirstName StrinlastName Integerage } Genera: Table: person Fields: idbigint,versionbigint, ageint, first_namevarchar(255),last_namevarchar(255) Supongamos que tenemos: Table: people Fields: person_idint, person_ageint, person_first_namevarchar(255), person_last_name(255)
¿Cómo lo mapeamos? classPerson{ StringfirstName StrinlastName Integerage staticmapping = { table 'person' idcolumn:'person_id' firstNamecolumn:'person_first_name' lastNamecolumn:'person_last_name' agecolumn:'person_age' versionfalse 	} }
Relaciones entre clases Típicamente tenemos clases que se relacionan entre sí para darle sentido al negocio Grails me ayuda a resolver estas relaciones con el uso de relaciones basadas en OO Composición Agregación Herencia Dependencia
Probando las clases de dominio Automatizar las pruebas puede ser un proceso importante en la construcción de sistemas complejos Ayudan a confirmar que la funcionalidad requerida es valida y usable En los lenguajes dinámicos es una parte FUNDAMENTAL para desarrollar un software usable debido a la gran flexibilidad que dan estos, pues no es la misma respuesta que se da en compilación que en tiempo de ejecución o simulación Grails provee de una clase llamada GrailsUnitTestCase para realizar verdaderas pruebas de unidad Incluso cuando generamos una clase de dominio a través de la línea de comando vemos que nos genera la prueba de unidad respectiva para esa clase
Laboratorio 5 Relaciones entre clases y pruebas de unidad
Controllers Es la clase responsable de manejar el request que viene de la aplicación Los controllers reciben el request, potencialmente hacen algo con el request y finalmente deciden que debería pasar despues Ejecutar la acción de otro controller Renderear una vista Renderear información directamente al response Son singleton por lo cual no es necesario manejar las nuevas instancias creadas por request Proveen la entrada principal a las aplicaciones hechas con Grails Delegan a servicios o clases de dominio la lógica de negocio y hacen el render de las vistas
Atributos del Request actionName actionUrl controllerName controllerUri flash log params request response session servletContext
Alcances usando Controllers request Objetos puestos en el request son guardados durante la ejecución actual del mismo flash Los objetos almacenados en flash tienen una duración del request actual y del siguiente request solamente session Los objetos guardados en session son almacenados hasta que se invalida la sesión manualmente o expira servletContext Los objetos que se guardan aquí son vistos a lo largo de toda la aplicación, y vivirán todo el tiempo que permanezca arriba la aplicación
Redireccionando un request Podemos hacer que una acción de cierto controller mande a otro controller o bien a alguna parte fuera de nuestra aplicación A través de redirect() lo podemos hacer y le podemos indicar: action controller id params uri url
Renderear una vista Por convención un action dentro de un controller llama a la vista con el mismo nombre del action dentro del subdirectorio de views y la clase en cuestión,  por ejemplo: classClienteController{ def show = { 		//do something 	} } En el ejemplo anterior se busca una vista dentro del directorio views/Cliente/ de nombre show.gsp (ya veremos más adelante las views) Ahora si queremos cambiar la convención y mostrar otra vista podemos hacer lo siguiente classClienteController{ def show = { render(view:"display") 	} }
Vista - GSP Las vistas en el ambiente web son un topico por demás interesante JSP permiten mezclar el tradicional HTML con código Java Incluso podemos usar las JSTL Para Grails existen las GSP Las GSP proveen un mecanismo para crear tags personalizados pero sin sacrificar la agilidad Las GSP son la manera Groovy en que Grails nos facilita la vida en el desplegado del modelo
Atributos de las GSP application flash out params request response session
GSP esta construido sobre tags Tagspre-empaquetadas Logicas: if, else, etc. Iterativas: while, each, findAll, etc Formulario: textField, checkBox, datePicker, etc Renderizado: layoutBody, paginate, etc Ajax: remoteField, submitToRemote, etc Y otras más Tags personalizadas Nombradas usando convención Su nombre termina con TagLib Se ubican en el directorio de taglib Implementadas como closures No hace falta TLD’s
Laboratorio 7  Uso de tags

Mais conteúdo relacionado

Mais procurados

Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Rodolfo Finochietti
 
WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015Micael Gallego
 
El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7Ymbra
 
El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8Ymbra
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePointAdrian Diaz Cervera
 
Automatizacion de proyectos con gradle
Automatizacion de proyectos con gradleAutomatizacion de proyectos con gradle
Automatizacion de proyectos con gradleEdson Chávez Montaño
 
Desarrollo Web con ASP.NET MVC
Desarrollo Web con ASP.NET MVCDesarrollo Web con ASP.NET MVC
Desarrollo Web con ASP.NET MVCAngel Nuñez
 
Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferenciasMicael Gallego
 
Manual programacion - java - jsp & xml
Manual   programacion - java - jsp & xmlManual   programacion - java - jsp & xml
Manual programacion - java - jsp & xmlgilhorak
 
ASP.NET MVC (2011)
ASP.NET MVC (2011)ASP.NET MVC (2011)
ASP.NET MVC (2011)wildtango
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicMicael Gallego
 
PHP, casos de éxito y comparativas con otros lenguajes
PHP, casos de éxito y comparativas con otros lenguajesPHP, casos de éxito y comparativas con otros lenguajes
PHP, casos de éxito y comparativas con otros lenguajesHéctor Garduño Real
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015 Keopx
 
Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6Eduard Tomàs
 

Mais procurados (20)

Gutenberg sin miedo
Gutenberg sin miedoGutenberg sin miedo
Gutenberg sin miedo
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
 
WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7
 
El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePoint
 
Asp.net 4
Asp.net 4Asp.net 4
Asp.net 4
 
Automatizacion de proyectos con gradle
Automatizacion de proyectos con gradleAutomatizacion de proyectos con gradle
Automatizacion de proyectos con gradle
 
Desarrollo Web con ASP.NET MVC
Desarrollo Web con ASP.NET MVCDesarrollo Web con ASP.NET MVC
Desarrollo Web con ASP.NET MVC
 
Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferencias
 
Manual programacion - java - jsp & xml
Manual   programacion - java - jsp & xmlManual   programacion - java - jsp & xml
Manual programacion - java - jsp & xml
 
SERVLET BASICS
SERVLET BASICSSERVLET BASICS
SERVLET BASICS
 
ASP.NET MVC (2011)
ASP.NET MVC (2011)ASP.NET MVC (2011)
ASP.NET MVC (2011)
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
 
PHP, casos de éxito y comparativas con otros lenguajes
PHP, casos de éxito y comparativas con otros lenguajesPHP, casos de éxito y comparativas con otros lenguajes
PHP, casos de éxito y comparativas con otros lenguajes
 
Gwt II - trabajando con gwt
Gwt II - trabajando con gwtGwt II - trabajando con gwt
Gwt II - trabajando con gwt
 
Transforma tu Monolito con HMVC
Transforma tu Monolito con HMVCTransforma tu Monolito con HMVC
Transforma tu Monolito con HMVC
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015
 
Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6
 

Semelhante a Taller de Grails

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
 
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
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSIan Monge Pérez
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
 
¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?Jorge Franco Leza
 
Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Ronald Cuello
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacionkaolong
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsFreelancer
 

Semelhante a Taller de Grails (20)

Grails
GrailsGrails
Grails
 
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
 
Charla grails
Charla grailsCharla grails
Charla grails
 
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
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
Groogle
GroogleGroogle
Groogle
 
Spring Mvc Final
Spring Mvc FinalSpring Mvc Final
Spring Mvc Final
 
Metadata api en apex
Metadata api en apexMetadata api en apex
Metadata api en apex
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Tutorial hacer un crud con prado
Tutorial hacer un crud con pradoTutorial hacer un crud con prado
Tutorial hacer un crud con prado
 
Framework
FrameworkFramework
Framework
 
Framework
FrameworkFramework
Framework
 
¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?
 
Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
 
Presentacion node
Presentacion nodePresentacion node
Presentacion node
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 

Mais de Domingo Suarez Torres

Cloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de KubernetesCloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de KubernetesDomingo Suarez Torres
 
Java Dev Day 2019 No kuberneteen por convivir
Java Dev Day 2019  No kuberneteen por convivirJava Dev Day 2019  No kuberneteen por convivir
Java Dev Day 2019 No kuberneteen por convivirDomingo Suarez Torres
 
Retos en la arquitectura de Microservicios
Retos en la arquitectura de MicroserviciosRetos en la arquitectura de Microservicios
Retos en la arquitectura de MicroserviciosDomingo Suarez Torres
 
DevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
DevFest Lima Corriendo cargas e trabajo seguras en GKE con IstioDevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
DevFest Lima Corriendo cargas e trabajo seguras en GKE con IstioDomingo Suarez Torres
 
Cloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesCloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesDomingo Suarez Torres
 
Meetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architectureMeetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architectureDomingo Suarez Torres
 
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y EnvoyCloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y EnvoyDomingo Suarez Torres
 
Cloud Native Mexico Meetup enero 2018 Observability
Cloud Native Mexico Meetup enero 2018 ObservabilityCloud Native Mexico Meetup enero 2018 Observability
Cloud Native Mexico Meetup enero 2018 ObservabilityDomingo Suarez Torres
 
Orquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNextOrquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNextDomingo Suarez Torres
 
Webinar Arquitectura de Microservicios
Webinar Arquitectura de MicroserviciosWebinar Arquitectura de Microservicios
Webinar Arquitectura de MicroserviciosDomingo Suarez Torres
 

Mais de Domingo Suarez Torres (20)

Cloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de KubernetesCloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
 
Java Dev Day 2019 No kuberneteen por convivir
Java Dev Day 2019  No kuberneteen por convivirJava Dev Day 2019  No kuberneteen por convivir
Java Dev Day 2019 No kuberneteen por convivir
 
Contenedores 101 Digital Ocean CDMX
Contenedores 101 Digital Ocean CDMXContenedores 101 Digital Ocean CDMX
Contenedores 101 Digital Ocean CDMX
 
Retos en la arquitectura de Microservicios
Retos en la arquitectura de MicroserviciosRetos en la arquitectura de Microservicios
Retos en la arquitectura de Microservicios
 
Java Cloud Native Hack Nights GDL
Java Cloud Native Hack Nights GDLJava Cloud Native Hack Nights GDL
Java Cloud Native Hack Nights GDL
 
meetup digital ocean kubernetes
meetup digital ocean kubernetesmeetup digital ocean kubernetes
meetup digital ocean kubernetes
 
Peru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVMPeru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVM
 
DevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
DevFest Lima Corriendo cargas e trabajo seguras en GKE con IstioDevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
DevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
 
Cloud Native Development in the JVM
Cloud Native Development in the JVMCloud Native Development in the JVM
Cloud Native Development in the JVM
 
Cloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesCloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a Kubernetes
 
Meetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architectureMeetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architecture
 
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y EnvoyCloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
 
Cloud Native Mexico Meetup enero 2018 Observability
Cloud Native Mexico Meetup enero 2018 ObservabilityCloud Native Mexico Meetup enero 2018 Observability
Cloud Native Mexico Meetup enero 2018 Observability
 
Cloud Native Mexico Presentacion
Cloud Native Mexico PresentacionCloud Native Mexico Presentacion
Cloud Native Mexico Presentacion
 
gRPC: Beyond REST
gRPC: Beyond RESTgRPC: Beyond REST
gRPC: Beyond REST
 
Devops Landscape
Devops LandscapeDevops Landscape
Devops Landscape
 
Orquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNextOrquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNext
 
JVM Reactive Programming
JVM Reactive ProgrammingJVM Reactive Programming
JVM Reactive Programming
 
SGNext Elasticsearch
SGNext ElasticsearchSGNext Elasticsearch
SGNext Elasticsearch
 
Webinar Arquitectura de Microservicios
Webinar Arquitectura de MicroserviciosWebinar Arquitectura de Microservicios
Webinar Arquitectura de Microservicios
 

Último

CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdfsharitcalderon04
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 

Último (20)

CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdf
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 

Taller de Grails

  • 1. Taller de Groovy & Grails 13 Reunión de SpringHispano.org
  • 2. Twitter Por favor para comentar en Twitter usa el hashtag#sh13 No se te olvide revisar los tweets con ese hashtag ;-)
  • 3. Grails Una plataforma para el desarrollo Web
  • 4. Agenda Grails Introducción Clases de dominio Controllers Servicios TagLibraries Deployment
  • 5. Introducción ¿Qué es Grails? Una plataforma para desarrollo ágil en Web Logrando funcionalidades efectivas Y de paso divirtiéndose haciendolo Un framework MVC full-stack Open Source Corre en la JVM Desarrollo de aplicaciones con Groovy Altamente expresivo Totalmente orientado a objetos Dinámico Sintaxis familiar Perfecta integraciñon con Java
  • 6. ¿qué mas es Grails? Convención sobre configuración Defaults sensibles Todo tiene un lugar DRY (Don’trepeatyourself)
  • 7. Simplicidad y poder IoC Provee una manera de ‘alambrar’ los objetos juntos con sus dependencias para tenerlos disponibles en tiempo de ejecución. IoC libera al desarrollador de la responsabilidad de obtener una referencia a un objeto dependiente ORM Provee una abstracción adicional sobre SQL, permitiendo a los desarrolladores pensar acerca de su modelo de dominio en lugar de pensar como acomodar los datos en SQL
  • 9. Grails vive en el Ecosistema Java La grámaticaGroovy es derivada de Java 5, haciendo válido el código Java y el código Groovy Groovy comparte las misma API’s de Java Los objetos Groovy son objetos Java. A través del compilador de ensamble podemos tener referencias circulares entre Groovy y Java sin tener problemas de compilación Con Groovy podemos fácilmente usar las misma herramientas, las mismas herramientas de monitoreo y todas las existentes y futuras tecnologías Java
  • 10. Laboratorio 1 Instalación de Grails y creación de la primera aplicación
  • 11. Ventajas y características ORM con Cero-Configuración DependencyInjection Manejador de transacciones JNDI Internacionalización Web Flow Taglibraries Caching REST Layouts AJAX Servidor no necesita reiniciar(most cases) Desarrollo de pruebas en caliente Unit testing Integrationtesting Functiopnaltesting
  • 12. Clases de dominio Sirven como corazón de la aplicación y del concepto del modelo de negocio El atributo más significativo que diferencia a las clases de dominio de otros artefactos dentro de las aplicaciones Grails es que estas son persistentes y que Grailsautómaticamente mapea cada clase de dominio dentro de una tabla física en la base de datos configurada El acto de mapear las clases en la capa de una base de datos relacional es también conocido como mapeo objeto-relacional(ORM). El ORM de Grails es llamado GORM y esta construido sobre el framework de persistencia más usado: Hibernate
  • 13. Scaffolding Es una característica de Grails que permite rápidamente generar las interfaces para un CRUD para una clase de dominio existente. Ofrece varios beneficios, uno de ellos o tal vez el más destacado es que permite al desarrollador observar como interactúa Grails en todos sus elementos Importante: Grails NO es un framework para hacer CRUD. Y el scaffolding aunque es muy usado, no es el verdadero beneficio de usar Grails
  • 14. Scaffolding Viene en dos sabores: Dinámico En runtime Estático Manejado por templates
  • 15. Laboratorio 1.9 Instalación de plugin de seguridad
  • 16. Laboratorio 2 Creación de clases de dominio y uso de Scaffolding dinámico
  • 17. Scaffolding estático Podemos generar el código necesario del scaffolding, para estudiarlo, modificarlo, o eliminarlo… Nos ayudamos de: grailsgenerate-views grailsgenerate-controller grailsgenerate-all
  • 19. Configurando DataSources Donde se almacenan los datos actualmente??? Podemos cambiar el lugar donde se ubica la base de datos y hacer una diferenciación entre diferentes ambientes de desarrollo Lo definimos en un solo archivo DataSource.groovy Un datasource se ve: dataSource { pooled = true driverClassName = &quot;com.mysql.jdbc.Driver&quot; dialect = org.hibernate.dialect.MySQLInnoDBDialect username = &quot;root&quot; password = &quot;root&quot; }
  • 20. Datasource Lista de elementos que se pueden configurar: driverClassName username password url dbCreate pooled configClass logSql dialect
  • 21. Environments Grails me permite establecer la configuración para cada entorno en el cual se ejecute la aplicación, incluso permite abrir más ambientes, esto es: environments { development { dataSource { … } } test { dataSource { … } } production { dataSource { … } } }
  • 22. JNDI en Datasource Podemos configurar un recurso JNDI en el datasource de manera muy simple: production { dataSource { jndiName=“java:comp/env/jdbc/database” } }
  • 23. Entendiendo mejor las clase de dominio Las aplicaciones OO por lo general siempre involucran un modelo de dominio representando las entidades de negocio de la aplicación Grails hace mucho del trabajo ‘díficil’ Por default todos los atributos de la clase son persistidos a base de datos
  • 24. Validando las clases de dominio Muy seguramente encontremos reglas que obliguen a validar los valores de ciertas propiedades en una clase de dominio Reglas como estas deben ser expresadas claramente y solamente en un lugar Grails provee un mecanismo de validación a través de la interfaz Validation de Spring classPerson{ String propiedad staticconstraints = { propiedad(blank:false) } }
  • 25. Lista de restricciones para clases de dominio
  • 26. Otras restricciones min minLength minSize matches max maxLength maxSize notEqual Nullable range scale size
  • 27. Propiedades transitorias Por default cada propiedad es persistido en base de datos, sin embargo, hay veces que una propiedad no debe ser persistida por requerimiento funcional Grails provee un mecanismo muy sencillo para para especificar que propiedades pueden ser transitorias Se hace como sigue: classCompany{ String nombre BigDecimalsalarioPorDepartamento statictransients = [&apos;salarioPorDepartamento&apos;] }
  • 28. Personalizando el mapeo de base de datos Grails con el uso de convención sobre configuración mapea los nombres de las clases en nombres de campos definidos de la misma manera, sin embargo, puede que queramos saltarnos la convención por alguna necesidad especifica y establecer manualmente tanto el nombre de la tabla como los nombres de los campos, que no coinciden en la convención usada por Grails Con ayuda de un DSL Grails me permite cambiar este comportamiento
  • 29. Personalizando el mapeo de base de datos La clase: classPerson{ StringfirstName StrinlastName Integerage } Genera: Table: person Fields: idbigint,versionbigint, ageint, first_namevarchar(255),last_namevarchar(255) Supongamos que tenemos: Table: people Fields: person_idint, person_ageint, person_first_namevarchar(255), person_last_name(255)
  • 30. ¿Cómo lo mapeamos? classPerson{ StringfirstName StrinlastName Integerage staticmapping = { table &apos;person&apos; idcolumn:&apos;person_id&apos; firstNamecolumn:&apos;person_first_name&apos; lastNamecolumn:&apos;person_last_name&apos; agecolumn:&apos;person_age&apos; versionfalse } }
  • 31. Relaciones entre clases Típicamente tenemos clases que se relacionan entre sí para darle sentido al negocio Grails me ayuda a resolver estas relaciones con el uso de relaciones basadas en OO Composición Agregación Herencia Dependencia
  • 32. Probando las clases de dominio Automatizar las pruebas puede ser un proceso importante en la construcción de sistemas complejos Ayudan a confirmar que la funcionalidad requerida es valida y usable En los lenguajes dinámicos es una parte FUNDAMENTAL para desarrollar un software usable debido a la gran flexibilidad que dan estos, pues no es la misma respuesta que se da en compilación que en tiempo de ejecución o simulación Grails provee de una clase llamada GrailsUnitTestCase para realizar verdaderas pruebas de unidad Incluso cuando generamos una clase de dominio a través de la línea de comando vemos que nos genera la prueba de unidad respectiva para esa clase
  • 33. Laboratorio 5 Relaciones entre clases y pruebas de unidad
  • 34. Controllers Es la clase responsable de manejar el request que viene de la aplicación Los controllers reciben el request, potencialmente hacen algo con el request y finalmente deciden que debería pasar despues Ejecutar la acción de otro controller Renderear una vista Renderear información directamente al response Son singleton por lo cual no es necesario manejar las nuevas instancias creadas por request Proveen la entrada principal a las aplicaciones hechas con Grails Delegan a servicios o clases de dominio la lógica de negocio y hacen el render de las vistas
  • 35. Atributos del Request actionName actionUrl controllerName controllerUri flash log params request response session servletContext
  • 36. Alcances usando Controllers request Objetos puestos en el request son guardados durante la ejecución actual del mismo flash Los objetos almacenados en flash tienen una duración del request actual y del siguiente request solamente session Los objetos guardados en session son almacenados hasta que se invalida la sesión manualmente o expira servletContext Los objetos que se guardan aquí son vistos a lo largo de toda la aplicación, y vivirán todo el tiempo que permanezca arriba la aplicación
  • 37. Redireccionando un request Podemos hacer que una acción de cierto controller mande a otro controller o bien a alguna parte fuera de nuestra aplicación A través de redirect() lo podemos hacer y le podemos indicar: action controller id params uri url
  • 38. Renderear una vista Por convención un action dentro de un controller llama a la vista con el mismo nombre del action dentro del subdirectorio de views y la clase en cuestión, por ejemplo: classClienteController{ def show = { //do something } } En el ejemplo anterior se busca una vista dentro del directorio views/Cliente/ de nombre show.gsp (ya veremos más adelante las views) Ahora si queremos cambiar la convención y mostrar otra vista podemos hacer lo siguiente classClienteController{ def show = { render(view:&quot;display&quot;) } }
  • 39. Vista - GSP Las vistas en el ambiente web son un topico por demás interesante JSP permiten mezclar el tradicional HTML con código Java Incluso podemos usar las JSTL Para Grails existen las GSP Las GSP proveen un mecanismo para crear tags personalizados pero sin sacrificar la agilidad Las GSP son la manera Groovy en que Grails nos facilita la vida en el desplegado del modelo
  • 40. Atributos de las GSP application flash out params request response session
  • 41. GSP esta construido sobre tags Tagspre-empaquetadas Logicas: if, else, etc. Iterativas: while, each, findAll, etc Formulario: textField, checkBox, datePicker, etc Renderizado: layoutBody, paginate, etc Ajax: remoteField, submitToRemote, etc Y otras más Tags personalizadas Nombradas usando convención Su nombre termina con TagLib Se ubican en el directorio de taglib Implementadas como closures No hace falta TLD’s
  • 42. Laboratorio 7 Uso de tags