FACULTAD DE INGENIERA ELECTRNICA Y TELECOMUNICACIONES INGENIERA DE SISTEMAS UNIVERSIDAD DEL CAUCA 25 DE SEPTIEMBRE DE 2014
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
INTRODUCCIN
Grails es un framework para aplicaciones web libre desarrollado sobre el lenguaje de programacin Groovy (el cual a su vez se basa en la Java platform). Grails pretende ser un marco de trabajo altamente productivo siguiendo paradigmas tales como convencin sobre configuracin o no te repitas (DRY), proporcionando un entorno de desarrollo estandarizado y ocultando gran parte de los detalles de configuracin al programador. 1
Este tutorial va a permitir al usuario socializarse con la herramienta permitindolo establecer una conexin con la base de datos (en este caso con postgresql, pero grails permite conectar con mltiples gestores de bases de datos), creacin de tablas y manejo de restricciones de las mismas, tambin se implementar un CRUD (esta implementacin la realiza la herramienta con la opcin de scaffold 2 o scaffolding) y adems, se va a guiar paso a paso sobre la instalacin y configuracin del entorno de desarrollo (Netbeans IDE 3 ).
1 Wikipedia La Enciclopedia Libre, art. Grails 2 Wikipedia La Enciclopedia Libre, art. Scaffold 3 Netbeans.org, Netbeans IDE
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
TABLA DE CONTENIDO
1. INTRODUCCIN
2. TUTORIAL 2.1. Configurando el entorno. 2.2. Creando una aplicacin Grails en NetBeans IDE. 2.3. Conectando la aplicacin con PostgreSQL 2.4. Ejecutando la aplicacin 2.5. Listar, agregar, eliminar y modificar. 2.6. Buscar
3. CONCLUSIONES
4. REFERENCIAS
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
TUTORIAL
Una vez hemos terminado con las descargas de las herramientas, procedemos a instalarlas una a una y a configurar nuestra mquina. Grails, no es un instalable, es un empaquetado que contiene un conjunto de libreras que junto con javac (el compilador de java) nos permitirn desarrollar las aplicaciones, estas dos herramientas deberemos instanciarlas en nuestras variables de entorno del sistema. 1. Configurando el entorno. 1.1. Abrimos el panel de control. 1.2. Entramos en Sistema. 1.3. Vamos a configuracin avanzada del sistema. 1.4. En la ventana de propiedades del sistema, escogemos variables de entorno. 2. Agregamos dos nuevas variables del sistema, una para java y la otra para grails. 2.1. En la ventana de variables de entorno, escogemos la opcin Nueva 2.2. En la opcin nombre de la variable, ponemos: GRAILS_HOME 2.3. En la opcin valor de la variable, ponemos la ruta en la que est el paquete descomprimido de Grails. 2.4. Escogemos aceptar. 2.5. Repetimos los pasos 2.1, 2.2 y 2.3 pero, en este caso ponemos como nombre JAVA_HOME y como valor, la ruta donde est instalado el SDK de java. 3. Editamos la variable Path de nuestro sistema y le agregamos la ruta de los ejecutables de las dos herramientas (Java y Grails) 3.1. En la ventana de variable de entorno, buscamos una cuyo nombre es Path. 3.2. Una vez ubicada, la seleccionamos y escogemos Editar. 3.3. En la opcin, valor de la variable, nos situamos al final de la lnea y escribimos: ;%GRAILS_HOME%\bin;%JAVA_HOME%\bin 3.4. Una vez terminamos esto, aceptamos y cerramos las ventanas. 4. Probamos que todo est funcionando como se debe. 4.1. Abrimos una terminal de consola. 4.2. Escribimos el comando: javac versin y miramos que funcione y nos d el valor de la versin de nuestro compilador de java. 4.3. Luego, escribimos el comando: grails version y miramos que funcione y nos d el valor de la versin de grails que hemos descargado.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Anexo video (en ingls) de como instalar la herramienta grails en windows:
Para instalar grails en otros sistemas operativos: Linux: http://www.grailsexample.net/installing-a-grails-development-environment- on-linux/ Mac OS: http://www.grailsexample.net/installing-a-grails-development- environment-on-os-x/
Una vez hemos terminado con la instalacin procedemos a configurar grails para que trabaje con NetBeans, cabe destacar que grails se puede usar con Eclipse 4 y con consola de comandos o terminal, tambin con TextMate e IntelliJ IDEA 5 . Por comodidad, yo voy a usar NetBeans IDE, puesto que netbeans provee un plug-in (Groovy/Grails) que reconoce automticamente los proyectos de Grails.
4 Grails.org, art. STS Integration 5 Grails.org, art. Getting Set Up in an IDE
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
5. Creando una aplicacin Grails en NetBeans IDE. 5.1. Abrimos netbeans. 5.2. Vamos a Archivo y escogemos la opcin Proyecto Nuevo. 5.3. En la ventana, escogemos en categora Groovy y en Proyectos Grails Application, despus escogemos siguiente. 5.4. En la ventana de la nueva aplicacin grails, escogemos el nombre, en este caso se va a llamar Ejemplo, como es la primera vez que vamos a usar grails, debemos configurar el entorno. 6. Configurando Grails (opcional: aadir la documentacin de grails) 6.1. (opcional) Vamos a la pgina de Grails, descargamos la documentacin, despus de descargarla, la descomprimimos, entramos a la carpeta descomprimida y ubicamos el archivo index.html. 6.2. (opcional) copiamos la direccin del archivo index.html en la opcin Groovy Doc de la ventana de Opciones de NetBeans. 6.3. En la opcin Grails Home ponemos la ruta en la cual tenemos instalado Grails. 6.4. Aceptamos y continuamos con la aplicacin Ejemplo. 7. Una vez configurado Grails escogemos la opcin terminar y esperamos a que se creen los archivos y carpetas de nuestro proyecto.
Imgenes del proceso:
Imagen 1: Creando nuevo Proyecto en NetBeans IDE.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 2: Seleccionando Groovy/Grails en NetBeans IDE.
Imagen 3: Asignando el nombre al nuevo proyecto, iniciar configuracin.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 4: Ingresando la ruta de la documentacin (opcional) y la ruta del paquete de Grails. (Estas son las rutas de mi caso, no es necesario ubicarlas en el mismo sitio).
Imagen 5: Terminar el proceso de configuracin.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 6: El nuevo proyecto se ha creado. 8. Creando una clase de dominio 8.1. Damos clic derecho sobre el paquete Domain Classes. 8.2. Nos deslizamos hasta nuevo y escogemos Grails Domain Class 8.3. En la ventana de la nueva clase, escogemos el nombre. 8.3.1. El nombre de la clase es, el nombre que le vamos a dar a la tabla de la base de datos (Grails trabaja bajo el paradigma CoC convencin sobre configuracin, es decir que nos ahorrar la configuracin si mantenemos un orden en la sintaxis), para este caso, vamos a llamarla Empleado, aceptamos y esperamos. 8.4. Una vez creada la clase Empleado, pasaremos a poner los atributos de dicha clase, en Grails, los atributos representan los campos de la tabla; Para este ejemplo pondremos cinco: cdigo, nombres, fecha de nacimiento, una referencia al departamento en el que labora y el salario del empleado. 8.4.1. Por convencin, Grails agrega a cada tabla dos campos, id y versin, estos campos son la llave primaria de la tabla y la versin en la que va la tabla respecto a sus modificaciones; Como en nuestro caso no nos interesa saber las modificaciones, quitamos el campo versin, adems Grails nos permite estilizar nuestro modelo. 8.4.2. Para realizar la estilizacin, debemos agregar una propiedad a nuestra clase Empleado, dicha propiedad es conocida como mapping 6 y nos permitir configurar la forma en la que Grails mapea las clases dominio a la base de datos.
6 Grails.org, art. mapping
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
8.4.3. Tambin debemos agregar ciertas restricciones a los datos que el usuario va a ingresar, para esto utilizaremos la propiedad constraints 7
y agregar la respectiva referencia entre Empleado y Departamento. 8.5. Despus de crear la clase Empleado, pasaremos a crear la clase Departamento, con el atributo: nombre del departamento, aprovecharemos que Grails nos crea la llave primaria para las tablas, en este caso, la llave se va a llamar cdigo. 8.6. Ahora, con las clases dominio, podemos generar automticamente los controladores y las vistas, para esto nos situamos sobre la clase dominio y damos clic derecho, escogemos la opcin Generate-All y esperamos.
Imagen 7: Seleccionando nueva Clase Dominio.
7 Grails.org, art. constraints
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 8: Nombrando la nueva clase.
Imagen 9: Clase Empleado creada.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 10: Clase Empleado implementada.
Imagen 11: Clase Departamento implementada.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 12: Seleccionando la opcin de generar todo (vistas y controladores), para la clase dominio Empleado.
Imagen 13: Seleccionando la opcin de generar todo para la clase Departamento.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 14: Controlador EmpleadoController generado automticamente (implementa las opciones bsicas del CRUD para Empleado).
9. Conectando la aplicacin con PostgreSQL. 9.1. Abrimos la carpeta Configuration del proyecto. 9.2. Abrimos el archivo DataSource.groovy
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
9.3. Cambiamos los valores de las lneas driverClassName, username y password, por: "org.postgresql.Driver", el nombre de usuario de la base de datos, para mi caso "postgres", y la contrasea que hemos definido para el usuario, en mi caso "9011". 9.4. En el entorno enviroments vamos a la propiedad dbCreate y cambiamos su valor por "update" (se refiere a que cada vez que se inicie o apague el servidor, la base de datos no se va a eliminar y cada vez que se realicen cambios, dichos cambios se van a actualizar, tambin, nos crea las tablas si estas no existen.) y cambiamos el valor de la propiedad url por "jdbc:postgresql://localhost:puerto/base_de_datos", para mi caso ser "jdbc:postgresql://localhost:5432/postgres". 9.5. Repetimos el paso anterior para los otros dos entornos faltantes (test y production). 9.6. Procedemos a agregar el JDBC de postgresql a nuestro CLASSPATH. 9.6.1. Vamos a la ubicacin en donde est el JDBC de postgresql. 9.6.2. Una vez situados en el archivo, le damos copiar. 9.6.3. Abrimos nuestro entorno de programacin NetBeans IDE y nos ubicamos sobre la carpeta libraries de nuestro proyecto y le damos pegar.
Imagen 16: Configurando la conexin.
10. Ejecutando la aplicacin. 10.1. Damos clic derecho sobre nuestra aplicacin Ejemplo y escogemos la opcin Compile y esperamos.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
10.2. Una vez haya terminado de compilar, damos clic derecho sobre la aplicacin y escogemos la opcin Run y esperamos. 10.3. Las vistas se renderizarn de forma automtica y la aplicacin iniciar en el explorador web (Browser) que tengamos predeterminado en nuestro sistema, Grails nos ofrece una pgina inicial donde encontramos cuatro enlaces, los que nos interesan a nosotros son dos: ejemplo.DepartamentoController y ejemplo.EmpleadoController, estos enlaces nos llevaran a la pgina donde podremos acceder a las opciones del CRUD de departamento o de empleado.
Imagen 17: Ejecutando la aplicacin Ejemplo.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 18: Pgina de inicio de la aplicacin.
Imagen 19: Pgina de inicio del controlador de Empleado.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 20: Pgina de inicio del controlador de Departamento.
11. Listar, agregar, eliminar y modificar. 11.1. Como pudimos observar, grails nos lista los elementos que tenemos ingresados en nuestra base de datos, el orden de los campos depender del orden que hayamos definido en nuestra estilizacin y la lista viene con paginacin, por defecto nos mostrar los 10 primeros elementos. 11.2. Para agregar un nuevo elemento a la base de datos, basta con seleccionar el icono de Nuevo Nombre_Elemento, donde el nombre del elemento depender de que controlador hemos escogido. 11.2.1. Despus de haber elegido la opcin Nuevo Nombre_Elemento, nos aparecer la vista del formulario con los campos importantes a ser llenados, los datos dependern tambin de la estilizacin que hayamos hecho, para mi caso, los datos son necesarios y no pueden ser vacos (exceptuando la referencia a Departamento en la clase Empleado) y el valor de cdigo de la clase Empleado debe ser nico. 11.2.2. Una vez hemos terminado de elegir los datos, damos clic en Crear y nos desplegar la vista show con los datos del elemento junto con un mensaje indicando que todo ha sido ingresado correctamente. 11.3. La opcin de eliminar es simple, damos clic sobre el elemento que queremos eliminar y nos despliega la vista show, en ella encontramos la opcin de eliminar o editar. 11.3.1. Damos clic en la opcin de eliminar y nos aparecer un mensaje de confirmacin, aceptamos y listo, nos devuelve a la vista
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
index y nos mostrar un mensaje diciendo que el elemento ha sido eliminado. 11.4. Para editar, hacemos lo mismo que en el paso 11.3, solo que esta vez damos clic en la opcin de editar. 11.4.1. El controlador nos enviar a la vista edit, donde se muestran los datos del elemento a ser editado, para editar solo basta con cambiar los datos del formulario y dar clic en la opcin de actualizar. 11.4.2. Una vez ha terminado, nos devuelve a la vista show para ver los nuevos valores y nos muestra un mensaje que nos dice que el elemento ha sido actualizado.
Imagen 21: Agregar un nuevo Empleado.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 22: Formulario de Empleado.
Imagen 23: Crear elemento.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 24: Error, el cdigo de Empleado debe ser nico.
Imagen 25: Cambiando datos.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 26: Empleado agregado correctamente.
Imagen 27: Volviendo a la lista de Empleados.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 28: Seleccionando al Empleado a eliminar.
Imagen 29: Seleccionando la opcin Eliminar.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 30: Aceptando la confirmacin.
Imagen 31: Elemento eliminado correctamente.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 32: Editando un elemento.
Imagen 33: Cambiando datos y seleccionando Actualizar.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 34: Edicin realizada correctamente.
12. Buscar 12.1. Para las bsquedas, Grails ofrece una manera dinmica y sencilla de generarlas. 12.2. Primero, vamos a ir a crear en nuestro controlador una accin que se llama bsqueda, abrimos el controlador y Grails nos habr creado para cada accin un mtodo que se llama por convencin igual que las vistas que renderiza (show, index, etc), lo creamos con def busqueda = { }. 12.3. Una vez creemos la accin, pondremos las sentencias de bsqueda, Grails utiliza una convencin para las bsquedas, en nuestro caso, como no sabemos exactamente cuntos datos van a regresar de la consulta usaremos el mtodo findAll 8 que nos retornar una lista de elementos del dominio que cumplan una restriccin. 12.4. Para este caso, haremos lo ms simple posible la consulta, pondremos un campo de texto (en la vista) que va a recibir los parmetros a buscar y usaremos una bsqueda por cdigo y por nombre, usaremos findAllBy 9 de la siguiente manera: def Busqueda = Empleado.findAllByCodigoLikeOrNombresLike que recibe dos parmetros, estos parmetros son los que llegan desde la vista, para acceder a ellos, usaremos la estructura params 10 que contiene todos los datos que son enviados al controlador desde la vista, para este caso pondremos como parmetros:
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
"%"+params.inputBusqueda+"%","%"+params.inputBusqueda+"%", ya que el usuario en nuestra vista va a ingresar una sola consulta pero, ser buscada tanto por cdigo como por nombres (los % representan la bsqueda por like del SQL, el elemento inputBusqueda es un elemento de un formulario de la vista, esto lo crearemos ms adelante). 12.5. Ya con los elementos obtenidos, debemos renderizar la vista, para esto usaremos el mtodo ModelAndView 11 que nos va a permitir renderizar una vista en base a un modelo, este mtodo nos permite retornar los dos de manera simultnea, para retornarlo lo haremos de la siguiente forma: return new ModelAndView("/empleado/index", [empleadoInstanceList: Busqueda]) Este cdigo nos dice que nos va a renderizar la vista index poniendo los datos de la bsqueda en empleadoInstanceList. 12.6. Con esto termina la programacin de la clase controlador de empleado, el mtodo findAllByCodigoLikeOrNombresLike, no est definido, pero Grails lo crea dinmicamente, ahora solo nos queda crear el campo de texto que va a utilizar el usuario en nuestra vista, para esto, vamos a la carpeta Views and Layouts o views y dentro encontraremos dos carpetas, una de empleado y la otra de departamento. 12.7. Abrimos la carpeta de empleado y vamos a la vista index.gsp, dentro de este archivo encontraremos todo el cdigo que se va a mostrar en la pgina web; crearemos un formulario con nombre bsqueda y method post y dentro de este formulario pondremos el texto Buscar Empleado y agregaremos una etiqueta que capture el texto y otra que nos permita enviar los datos al controlador, esto lo haremos de la siguiente manera: <form name="busqueda" method="post"> <span class="menuButton"> Buscar Empleado <g:textField name="inputBusqueda" value="${inputBusqueda}"/> </span> </form> 12.8. Ya con esto hemos terminado de crear un buscar por nombre y por cdigo, solos nos queda guardar y esperar que NetBeans IDE compile de nuevo las clases modificadas; Despus de esto ya podremos ver la pgina de empleados con la caja de texto y el Buscar Empleado. Para mi ejemplo, he cogido una nueva pgina que llam busqueda.gsp y agregu ciertos mensajes para que la bsqueda se vea mejor, adems, he
11 Grails.org, art. modelsAndViews
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
modificado las otras pginas agregndoles un enlace que los lleva a la pgina de bsqueda.
Imagen 35: Implementacin de bsqueda en el controlador.
Imagen 36: Implementacin de bsqueda en la vista.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 37: Seleccionando la opcin de buscar en la vista index.
Imagen 38: Buscando empleado por cdigo.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 39: Empleado por cdigo, encontrando.
Imagen 40: Buscando por parte del cdigo, once elementos encontrados.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 41: Buscando por parte del nombre, encontrados dos elementos.
Imagen 42: Buscando un elemento inexistente.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
Imagen 43: Paginacin en la lista de empleados, pgina uno.
Imagen 43: Paginacin de la lista de empleados, pgina dos.
Link de mi aplicacin Ejemplo: OneDrive - CristianErazo - Publico - Ejemplo
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.
CONCLUSIONES
Grails es un framework de desarrollo gil que ayuda en gran medida al programador en la generacin de cdigo de forma dinmica, y lo logra gracias a Groovy.
Grails es una herramienta de desarrollo pesada ya que requiere cargar una gran variedad de plug-in y por esto requiere de una buena mquina para poder ejecutarla.
Grails es una herramienta que facilita mucho cdigo al programador, pero carece de herramientas para la parte del front-end de la aplicacin.
Grails permite configurar distintos ambientes o entornos de ejecucin, ya sea para realizar pruebas o trabajar con diferentes bases de datos.
Grails est pensado para ser una herramienta de desarrollo web gil que oculta al programador parte de la lgica y configuracin que hay por debajo de la aplicacin para que l se enfoque en su objetivo.
Recomendara usar Grails en aplicaciones que requieren ser desarrolladas de manera rpida, puesto que Grails nos permite enfocarnos en el problema sin pensar mucho en cmo realizar ciertos detalles como por ejemplo la obtencin de datos, este framework posee mucha documentacin, la mayora en ingles pero su poder yace en que implementa muchas tecnologas que se sabe que son tiles y lo hace de forma transparente.
Cristian Camilo Erazo Agredo Ingeniera De Sistemas Universidad Del Cauca.