Podemos decir que el mayor inconveniente para desarrollar aplicaciones web en java es la curva de aprendizaje y la cantidad de detalles técnicos de los cuales el desarrollador debe preocuparse. Esto es apenas entendible, si tenemos en cuenta que java y mas concretamente j2e es una plataforma para el desarrollo de aplicaciones industriales, donde garantizar la seguridad, rendimiento y escalabilidad es un criterio escencial. Estas premisas han hecho del desarrollo web en java una tarea pesada, tanto por la cantidad de configuraciones previas que hay que hacer como por las consideraciones en la arquitectura de la solucion. Para facilitar las cosas, se han creado varios frameworks Struts, Tapestry, Spring entre otros, y de este ultimo vamos a hablar en este post, incluso vamos a ir un poco mas lejos y hablaremos de Grails.
Que es Spring?
Spring es un framework que facilita el desarrollo web bajo el modelo vista controlador (MVC) y la inversion de control (IoC) (En otros post hablaremos de estos conceptos) entre otras funcionalidades que ahorran mucho tiempo a los desarrolladores. A pesar de todas las ventajas de Spring, el uso de este puede convertirse en un lastre a la hora de hacer cambios y mantenimiento tanto en la base de datos como en el funcionamiento de la aplicacion en general, a causa de esto los muchachos de Spring decidieron dar un paso mas alla y hacer una implementacion de Spring orientada al desarrollo Orientado por Convencion, de la misma forma que lo hace el famoso Ruby On Rails y otros frameworks modernos.
Que es Grails?
Teniendo en cuenta todos los problemas mencionados anteriormente, los muchachos de Spring decidieron hacer una implementacion, que permitiera de forma rapida y sencilla crear, mantener y probar aplicaciones web complejas. Y fue en este punto donde crearon Grails, que es basicamente Spring MVC, Hibernate y SiteMesh integrados en un solo framework, permitiendo a un desarrollador crear un sitio web con estas tres tecnologias integradas en menos de 5 minutos, saltandose la cantidad de configuracion previas que suelen darse en spring.
Grails se sirve del lenguage de Scripting Groovy, este es simplemente codigo java simplificado en cuanto a su sintaxis, todo esto con el objetivo de ahorrar tiempo de codificacion a los desarrolladores. Sin embargo, con grails podemos utilizar tanto java como groovy.
Manos a la obra
Pre-requisitos: Tener instalado el JDK 6 de java, y definida la variable JAVA_HOME, esto es necesario para que Grails pueda ejecutarse.
Para trabajar con Grails tenemos dos opciones, o trabajamos desde linea de comandos o simplemente descargamos una adaptacion de eclipse especialmente diseñada para el desarrollo con grails. En este tutorial nos iremos por la segunda opcion, asi que descargaremos el Groovy Grails Tool Suite version 3.3.0, esta es simplemente una version de eclipse adaptada para el desarrollo de aplicaciones grails, lo podemos encontrar en el siguiente enlace http://www.springsource.org/downloads/sts-ggts ,elegimos la version que mas nos convenga, en mi caso particular descargue "groovy-grails-tool-suite-3.3.0.RELEASE-e4.3-win32-x86_64-installer".
Una vez que descarguemos, procedemos a hacer la instalacion. Este proceso no es diferente que al de cualquier aplicativo windows, asi que omitire esta parte.
A penas tengamos instalado el IDE, debemos ir a la carpeta donde quedaron los archivos instalados, y una vez ahi podemos ver con atencion todo lo que instalamos.
Como podemos ver tenemos las siguientes carpetas instaladas:
- ggts-3.3.0.RELEASE: Contiene el ejecutable del IDE que vamos a utilizar.
- grails-2.2.3: Contiene los archivos de grails que va a utilizar el IDE.
- legal: Omitiremos este archivo.
- vfabric-tc-server-developer-2.9.2.RELEASE: Es la carpeta del servidor sobre el que correremos todas nuestras aplicaciones.
Accedemos a la carpeta ggts-3.3.0.RELEASE y ejecutamos el archivo GGTS, como se muestra en la imagen.
Luego seleccionamos el Workspace sobre el que vamos a trabajar, este puede ser cualquier ruta dentro de nuestra maquina.
Cuando el IDE cargue por completo, vamos a File -> New -> Grails Project
Al hacer esto el IDE nos guia a traves de un Wizard sobre el cual nosotros simplemente añadiremos el nombre de nuestro proyecto para por ultimo apretar "Finalizar".
El IDE simplemente crear el proyecto y al finalizar se vera lo siguiente:
Una vez nuestro proyecto este creado podemos ver en el lado izquierdo de la imagen anterior, la estructura que este tiene. Sin alguna vez han programado aplicaciones web en Java, notaran que la estructura de paquetes esta muy bien definidad, separando la funcionalidad de la siguiente manera:
- Dominios: Esta carpeta contiene todos los mapeos de la base de datos, es decir aca estaran todas las clases que representan a tablas de la base de datos.
- Controladores: Aca encontraremos las clases encargadas de recibir las peticiones de los usuarios, procesarlas y de redireccionarlas a las vistas.
- Vistas: En esta carpeta encontraremos todas las vistas de la aplicacion es decir, todos los .gsp(Versiones de jsps pero para Groovy).
- Servicios: En este directorio me gustaria ser mas enfatico, cuando nos referimos a servicios, nos referimos a el encapsulamiento de la logica de negocios de la aplicacion, es decir aqui estaran todas las clases encargadas de que el flujo de la aplicacion se cumpla correctamente.
Nota: Todos los conceptos que tal vez no entiendan sobre el desarrollo web, seran abordados en futuros post donde trataremos temas como el modelo MVC y conceptos sobre la Inversion de Control (IoC).
Bueno, sin ir mas lejos procederemos a crear un simple CRUD, con el que ilustraremos como se desarrolla con Grails.
Lo primero que debemos hacer es crear un Dominio, esto es basicamente la representacion orientada a objetos de una tabla que reside en la base de datos.
Despues de hacer, esto el IDE nos preguntara el nombre del dominio, y nosotros en este caso pondremos "Tabla1", luego apretamos finalizar y nuestro primer dominio estara creado.
Una vez el IDE termine el proceso de creacion del Dominio, este nos creara una clase Groovy, en la cual tendremos el codigo fuente vacio para nosotros empezar a configurar los atributos del dominio.
En este punto simplemente procedemos a añadirle atributos al dominio. Estos atributos se convertirán en los campos de la tabla "Tabla1" que se creara en el momento de ejecutar nuestra aplicación (Mas adelante ahondaremos en este tema).
package helloworld
class Tabla1 {
String nombre
int edad
static constraints = {
nombre size: 5..15, blank: false, unique: true
edad min: 18
}
}
static constraints = {
nombre size: 5..15, blank: false, unique: true
edad min: 18
}
Groovy es muy intuitivo y se puede ver perfectamente que "nombre", tiene una longitud minima de 5 y maxima de 15 (size: 5..15), no puede ser vacia(blank:false) y no puede ser repetida(unique:true). De la misma forma el campo "edad", limita los datos ingresados a numeros mayores o iguales a 18.
Una vez tengamos listo el dominio, procedemos a crear el controlador y las vistas. Este proceso se conoce como Scaffolding y consiste en la generacion automatica de codigo, en este caso grails se basa en el dominio para crear el controlador y las vistas encargadas de hacer el CRUD al dominio. Para lograrlo solo debemos hacer click derecho sobre el proyecto ir a Grails tools y seleccionar "Open Grails Command Prompt", como muestra la siguiente imagen.
Esto nos desplegara la siguiente ventana
Como podemos ver, nuestro IDE nos permite utilizar la consola de Grails, como pueden ver la consola tiene antepuesta la palabra "grails>", basicamente esto es una ayuda para que no tengamos que escribir grails para cada comando que hagamos a traves del IDE. El comando que se ejecuta en realidad es
grails generate-all helloworld.Tabla1
Luego de hacer esto, grails generara automaticamente el controlador encargado de procesar las peticiones, y las vistas encargadas de mostrar los datos y los formulario de creacion y actualizacion. En la siguiente imagen en la barra izquierda podemos ver resaltados los archivos que automaticamente genero grails. Estos archivos pueden ser modificados o incluso servir de base para el momento que creemos nuestros propios controladores.
Bueno, en este punto ya tenemos la primera funcionalidad de nuestra aplicacion de muestra, y aunque paresca mentira ya podemos ejecutar la aplicacion. Simplemente hacemos click derecho sobre el proyecto, vamos a Run As -> Grails command (run-app).
Una vez hacemos esto, grails desplegara la aplicacion y cuando en la consola aparesca lo siguiente, sabremos que desplego con exito.
El log de la aplicacion nos indica la url donde esta desplegada nuestra aplicacion, solo debemos copiar esta en nuestro browser favorito para ejecutarla. Cuando lo hagamos nos cargara la siguiente pantalla.
Bueno aqui, tengo que parar y explicar varias cosas que muy probablemente no esten muy claras. Escribimos un poco mas de 5 lineas de codigo, y al ejecutar nuestra aplicacion nos carga la aplicacion que vemos en la imagen anterior, es evidente que nada de lo que vemos en esa pantalla lo hicismo nosotros. Entonces, que es lo que vemos ahi?, que significa installed plugins?, a que se refieren con Available Controllers?
Grails mediante el scaffolding que acabamos de hacer, nos permite generar unos controladores y vistas. El acceso a estas vistas se hace a traves de el controlador que definimos, y para esto grails nos provee de una interfaz standard en la cual apenas ejecutemos nuestra aplicacion este nos mostrara la lista de controladores que creamos en los pasos anteriores, como se muestra en la siguiente imagen.
Si hacemos click sobre "helloworld.Tabla1Controller", este nos llevara a la primera vista que el controlador tenga definida para mostrar, que para estos casos es un listado de todos los registros guardados en la tabla "Tabla1". Como es la primera vez que lo ejecutamos la lista vendra vacia, como se muestra en la siguiente imagen:
Ya en este punto, podemos explorar nuestra aplicación creando un nuevo registro en la tabla "Tabla1", editandolo y borrandolo.
En el proximo tutorial, analizaremos con mas detalle el codigo del controlador, la vistas y las plantillas de sitemesh(Algo super importante!!!!!). Si tienen alguna duda o comentarios por favor me escriben.
: )









