sesión 5: introducción a grails · grails-app/conf/sprint archivos de mapeado de spring...
TRANSCRIPT
![Page 1: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/1.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
Groovy & Grails: Desarrollo rápido de aplicaciones
Sesión 5: Introducción a Grails
© 2008-2011 Depto. Ciencia de la Computación e IA
![Page 2: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/2.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Introducción a Grails
• ¿Qué es?
• Arquitectura
• Instalación de Grails
• Scaffolding
Introducción a Grails-2
![Page 3: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/3.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
¿Qué es?
• Características de Grails
• Software de código abierto
Introducción a Grails-3
![Page 4: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/4.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
¿Qué es?
• “Grails es un framework para el desarrollo de aplicaciónes web basado en el lenguaje de programación Groovy, que a su vez se basa en la Plataforma Java”
• Se basa en los paradigmas convención sobre configuración y DRY (don’t repeat yourself)
Introducción a Grails-4
![Page 5: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/5.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
¿Qué es?
• Basado en el patrón Modelo Vista Controlador
• Modelo Clases de dominio
• Controladores
• Vista Páginas GSP (Groovy Server Pages)
Introducción a Grails-5
![Page 6: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/6.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
¿Qué es?
• El programador se olvida de determinados aspectos de configuración
• Grails acorta los tiempos de desarrollo
• Grails es un framework muy ágil
Introducción a Grails-6
![Page 7: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/7.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
¿Qué es?
• Grails no sólo es un framework de desarrollo web que sigue el patrón MVC, sino que es una plataforma completa de desarrollo • Contenedor web
• Gestor de base de datos
• Empaquetado de la aplicación
• Realización de tests
Introducción a Grails-7
![Page 8: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/8.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Características de Grails
• Convención sobre configuración
Se utilizan una serie de convenciones para evitar tener que escribir interminables archivos de configuración
Introducción a Grails-8
![Page 9: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/9.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Características de Grails
• Tests
• Tests unitarios (sin dependencias)
• Tests de integración (entorno completo)
• Tests funcionales (funcionalidad de la aplicación web)
Introducción a Grails-9
![Page 10: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/10.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Características de Grails
• Scaffolding
“Generación automática de código para las cuatro operaciones básicas de cualquier aplicación, que son la creación, lectura, edición y borrado”
Introducción a Grails-10
![Page 11: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/11.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Características de Grails
• Mapeo objeto-relacional
• GORM (Grails Object Relational Mapping)
• Uno a uno
• Uno a muchos
• Muchos a muchos
Introducción a Grails-11
![Page 12: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/12.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Características de Grails
• Plugins
• Seguridad
• AJAX
• Testeo
• Búsqueda
• Informes
• Servicios web
Introducción a Grails-12
![Page 13: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/13.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Software de código abierto
• Grails no sufre del síndrome Not Invented Here (NIH) e integra las mejores soluciones de software libre para conseguir un framework muy robusto
Introducción a Grails-13
![Page 14: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/14.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Software de código abierto
• Groovy • Lenguaje dinámico
• Potente y flexible
• Sintaxis sencilla
• Integración con Java
Introducción a Grails-14
![Page 15: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/15.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Software de código abierto
• Framework Spring
• Alto nivel de abstracción
• Declaración de transacciones mediante POJOs
Introducción a Grails-15
![Page 16: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/16.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Software de código abierto
• Hibernate
• Framework de persistencia objeto-relacional
• Es la base de GORM
• Mapea clases de dominio contra las tablas de una base de datos
Introducción a Grails-16
![Page 17: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/17.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Software de código abierto
• SiteMesh
• Renderizado HTML
• Patrón de diseño Decorator
• Componentes: cabecera, pies de página y sistemas de navegación
Introducción a Grails-17
![Page 18: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/18.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Software de código abierto
• Frameworks AJAX
• Script.aculo.us
• Rico
• Prototype
Introducción a Grails-18
![Page 19: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/19.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Software de código abierto
• Jetty y Tomcat
• Contenedor y servidor web
• No son los únicos sobre los que funciona Grails
Introducción a Grails-19
![Page 20: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/20.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Software de código abierto
• HSQLDB
• Gestor de base de datos
• Almacenamiento en memoria o en disco
Introducción a Grails-20
![Page 21: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/21.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Software de código abierto
• JUnit
• Framework para la realización de tests unitarios
• Muy extendido en Java
Introducción a Grails-21
![Page 22: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/22.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Arquitectura
Introducción a Grails-22
![Page 23: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/23.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Arquitectura
• Cuatro capas
• 1ª: Máquina Virtual de Java
• 2ª: Lenguajes Java y Groovy
• 3ª: Grails y otros frameworks
• 4ª: Aplicación siguiendo el MVC
Introducción a Grails-23
![Page 24: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/24.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Arquitectura
• Herramientas en línea de comandos
• Facilita la escritura de código
• Facilita la gestión de nuestros proyectos
• Basado en Gant, un sistema de automatización de tareas basado en Apache Ant
Introducción a Grails-24
![Page 25: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/25.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Arquitectura
• Ejecución de un proyecto Grails
Introducción a Grails-25
![Page 26: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/26.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Instalación de Grails
1. Descargar la última versión de Grails
2. Descomprimir el archivo 3. Crear la variable de entorno GRAILS_HOME 4. Agregar el directorio GRAILS_HOME/bin al
PATH del sistema
Introducción a Grails-26
![Page 27: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/27.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Instalación de Grails
• Prerrequisito
• Tener instalado al menos el JDK 1.4
• Variable de entorno JAVA_HOME
Introducción a Grails-27
![Page 28: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/28.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Scaffolding
• “Construcción automática de aplicaciones a partir del esquema de la base de datos”
• Cuatro operaciones básicas (CRUD): • Creación (Create)
• Lectura (Read)
• Actualización (Update)
• Borrado (Delete)
Introducción a Grails-28
![Page 29: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/29.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Scaffolding
• Descripción de la aplicación ejemplo
• Creación del proyecto Grails
• Creación de las clases de dominio
• Creación de controladores
Introducción a Grails-29
![Page 30: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/30.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Scaffolding
• Aplicación ejemplo: biblioteca de un instituto • Gestión de usuarios (administrador, bibliotecario,
profesor o socio)
• Administradores se encargan de la gestión de usuarios
• Bibliotecarios de la gestión de libros y préstamos
• Profesores y socios podrán realizar reservas
• Imposición de multas por retraso en la devolución
Introducción a Grails-30
![Page 31: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/31.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Scaffolding
Introducción a Grails-31
![Page 32: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/32.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Scaffolding
• Esquema reducido
• Operación
• Usuario
• Libro
Introducción a Grails-32
![Page 33: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/33.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación del proyecto Grails
grails create-app biblioteca
Introducción a Grails-33
![Page 34: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/34.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación del proyecto Grails
• Estructura de directorios Directorio Descripción grails-app/conf Ficheros de configuración de la aplicación grails-app/conf/hibernate Archivos de mapeado de Hibernate grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las
peticiones grails-app/domain Clases de dominio del modelo grails-app/i18n Mensajes para la internacionalización de la aplicación grails-app/services Servicios grails-app/taglib Librerías de etiquetas dinámicas
Introducción a Grails-34
![Page 35: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/35.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación del proyecto Grails
Directorio Descripción grails-app/views Archivos GSP grails-app/views/layout Archivos de diseño de las páginas web lib Archivos JAR de terceras partes, tales como
controladores de bases de datos scripts Scripts GANT para el automatizado de tareas src/java Archivos fuente adicionales en Java src/groovy Archivos fuente adicionales en Groovy test/integration Tests de integración test/unit Tests unitarios
Introducción a Grails-35
![Page 36: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/36.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación del proyecto Grails
Directorio Descripción web-app Artefactos web que finalmente serán comprimidos a un
WAR (Web Application Archive) web-app/css Hojas de estilo web-app/images Imágenes de la aplicación web-app/js Javascript web-app/WEB-INF Archivos de configuración para Spring o SiteMesh
Introducción a Grails-36
![Page 37: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/37.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación del proyecto Grails
• Archivos de configuración de proyecto para diferentes editores
• Eclipse
• Textmate
• NetBeans
Introducción a Grails-37
![Page 38: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/38.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación del proyecto Grails
• Proyecto con NetBeans
Introducción a Grails-38
![Page 39: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/39.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación del proyecto Grails
grails run-app
Introducción a Grails-39
![Page 40: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/40.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación del proyecto Grails
• http://localhost:8080/biblioteca
• Se crea una instancia del servidor web Tomcat
Introducción a Grails-40
![Page 41: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/41.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio
grails create-domain-class libro
Introducción a Grails-41
![Page 42: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/42.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio
• Se crea una clase de dominio llamada Libro
package biblioteca
class Libro { static constraints = { }
}
Introducción a Grails-42
![Page 43: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/43.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio
• Por cada clase de dominio creada, se crea un test unitario
• Debemos copiar este test unitario al directorio correspondiente a los tests de integración
Introducción a Grails-43
![Page 44: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/44.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio package biblioteca import grails.test.*
class LibroTests extends GrailsUnitTestCase { protected void setUp() { super.setUp() }
protected void tearDown() { super.tearDown() }
void testSomething() {
} }
Introducción a Grails-44
![Page 45: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/45.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio
• El método setUp() se ejecuta antes que cualquier otro método que empiece con la palabra test
• El método tearDown() se ejecuta una vez que se han ejecutado todos los tests de la clase
• El método testSomething() es un método ejemplo
Introducción a Grails-45
![Page 46: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/46.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio package biblioteca import grails.test.*
class LibroTests extends GrailsUnitTestCase { protected void setUp() { Libro.list()*.delete() }
protected void tearDown() { super.tearDown() } …. }
Introducción a Grails-46
![Page 47: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/47.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio class LibroTests extends GrailsUnitTestCase { …. void testPersiste() { new Libro(titulo:'La colmena', anyo:1951, ...').save() new Libro(titulo:'La galatea', anyo:1585…).save() new Libro(titulo:'El ingenioso hidalgo …', anyo:1605, …).save() new Libro(titulo:'La dorotea', anyo:1632, …).save() new Libro(titulo:'La dragontea', anyo:1602, …).save() assert 5 == Libro.count() } void testToString(){ def libro = new Libro(titulo:'Groovy in action', anyo: 2007, …) assertToString(libro, 'Groovy in action') } }
Introducción a Grails-47
![Page 48: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/48.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio
• El método setUp() deja vacía de datos la clase Libro con el método delete()
• El método testPersiste() inserta 5 libros en la base de datos con el método save()
• El método testToString() comprueba que de la clase Libro se devuelve el título del mismo
Introducción a Grails-48
![Page 49: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/49.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio
grails test-app
Introducción a Grails-49
![Page 50: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/50.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio
• Se crea un directorio llamado test-reports bajo el directorio target
• Ambos tests han fallado
• Debemos terminar de crear la clase de dominio Libro
Introducción a Grails-50
![Page 51: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/51.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio package biblioteca
class Libro { String isbn String titulo String autor String editorial Integer anyo String descripcion Date fecha
…. }
Introducción a Grails-51
![Page 52: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/52.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio class Libro { ….
static constraints = { isbn(blank:false) titulo(blank:false) autor(blank:false) editorial() anyo() fecha(nullable:true) descripcion(maxSize:1000,nullable:true) } …. }
Introducción a Grails-52
![Page 53: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/53.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio class Libro { …. String toString(){ titulo } }
Introducción a Grails-53
![Page 54: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/54.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio
• No es necesario especificar una clave primaria gracias a las propiedades id y version
• Con ellas se garantiza la integridad de los datos y el bloque de las tablas cuando sea necesario
• Las restricciones se añaden en la variable constraints
Introducción a Grails-54
![Page 55: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/55.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de controladores
grails create-controller libro
Introducción a Grails-55
![Page 56: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/56.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de controladores
• Los controladores se encargan de gestionar las peticiones que llegan a cada clase de dominio
• Se encarga también de gestionar la interacción entre la vista y las clases de dominio
Introducción a Grails-56
![Page 57: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/57.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de controladores
• Con el comando grails create-controller libro se crea un nuevo controlador en grails-app/controller llamado LibroController.groovy
package biblioteca
class LibroController { def index = { } }
Introducción a Grails-57
![Page 58: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/58.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de controladores
• Definiendo el scaffolding sobre la clase Libro
package biblioteca
class LibroController { def scaffold = Libro }
Introducción a Grails-58
![Page 59: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/59.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de controladores
Introducción a Grails-59
![Page 60: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/60.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de controladores
• El orden de los elementos del formulario coincide con el orden en el que se indicaron las restricciones
• Al especificar un tamaño máximo en la propiedad descripción se crea un textarea en lugar de un text
• Si se incumple alguna restricción, se muestra el error correspondiente
Introducción a Grails-60
![Page 61: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/61.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de controladores
grails test-app
Introducción a Grails-61
![Page 62: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/62.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de controladores
Introducción a Grails-62
![Page 63: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/63.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio
grails create-domain-class usuario
grails create-domain-class operacion
Introducción a Grails-63
![Page 64: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/64.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio package biblioteca
class Usuario { String login String password String nombre String apellidos String tipo
static hasMany = [operaciones:Operacion]
…. }
Introducción a Grails-64
![Page 65: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/65.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio class Usuario { …. static constraints = { login(size:6..20, blank:false, unique:true) password(size:6..20, blank:false,password:true) nombre(blank:false) apellidos(blank:false) tipo(inList:["administrador", "bibliotecario", "profesor", "socio"]) }
String toString(){ "$nombre $apellidos" } }
Introducción a Grails-65
![Page 66: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/66.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio package biblioteca
class Operacion { String tipo Boolean estado Date fechaInicio Date fechaFin Usuario usuario Libro libro
static belongsTo = [Usuario,Libro]
…. }
Introducción a Grails-66
![Page 67: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/67.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio class Operacion { ….
static constraints = { tipo(inList:["prestamo", "reserva"]) estado() fechaInicio(nullable:false) fechaFin(nullable:false) }
String toString() { "$tipo ($estado) [$fechaInicio - $fechaFin]" } }
Introducción a Grails-67
![Page 68: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/68.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de clases de dominio package biblioteca
class Libro { ….
static hasMany = [operaciones:Operacion]
….
}
Introducción a Grails-68
![Page 69: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/69.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de controladores
grails create-controller usuario
grails create-controller operacion
Introducción a Grails-69
![Page 70: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/70.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Creación de controladores package biblioteca
class UsuarioController {
def scaffold = Usuario }
package biblioteca
class OperacionController {
def scaffold = Operacion }
Introducción a Grails-70
![Page 71: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/71.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Inserción de datos con BootStrap.groovy
• El archivo BootStrap.groovy servirá para realizar acciones al arrancar y al finalizar la aplicación
• Utilizaremos este fichero para insertar datos de ejemplo en la aplicación
Introducción a Grails-71
![Page 72: Sesión 5: Introducción a Grails · grails-app/conf/sprint Archivos de mapeado de Spring grails-app/controllers Controladores de la aplicación que gestionan las peticiones grails-app/domain](https://reader033.vdocuments.site/reader033/viewer/2022053014/5f13515eeeeb4631780bf912/html5/thumbnails/72.jpg)
Groovy & Grails: Desarrollo rápido de aplicaciones
© 2008-2011 Depto. Ciencia de la Computación e IA
Inserción de datos con BootStrap.groovy class BootStrap { def init = { servletContext -> new Usuario(login:'frangarcia',password:'mipassword’,…).save() new Usuario(login:'pablomarmol',password:'marmol’,…).save() new Usuario(login:'pedropp',password:'picapiedra’,…).save() new Usuario(login:'wilmapp',password:'picapiedra2’,…).save() new Usuario(login:'bettymarmol',password:'marmol2’,…).save() new Libro(titulo:'La colmena', anyo:1951,…).save() new Libro(titulo:'La galatea', anyo:1585,…).save() new Libro(titulo:'El ingenioso hidalgo …', anyo:1605,…).save() new Libro(titulo:'La dorotea', anyo:1632,…).save() new Libro(titulo:'La dragontea', anyo:1602,…).save() } def destroy = { } }
Introducción a Grails-72