martes, 30 de julio de 2013

Desarrollo rapido de aplicaciones web con Grails Parte 1

Introduccion

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
    }
}


Basicamente estamos definiendo dos campos, "nombre" y "edad", y les estamos definiendo los constraints, que son las caracteristicas que deben tener cada dato que se va a guardar en cada campo.

    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.


: )

lunes, 22 de julio de 2013

Configurar Grails y Heroku

Introduccion al desarrollo en la nube


Hace unos dias estuve buscando un servicio cloud para desplegar mis aplicaciones y mostrarselas a mis clientes de forma rapida y sobre todo GRATIS. En mi busqueda me tope con varios productos que ofrecian a precios muy competitivos la posibilidad de desplegar en la nube cualquier tipo de desarrollo. Despues de investigar me llamo mucho la atencion Heroku, y sobre todo la facilidad para integrarlo con Grails, el framework de desarrollo rapido de Spring. El panorama no podria ser mas alentador asi que procedi a configurar mi ambiente para hacer despliegues en heroku de la siguiente manera:
Prerequisitos: Instalar Grails 2 .3

Crear cuenta en Heroku:

 Simplemente, se registran utilizando su correo electronico, en la siguiente url. https://id.heroku.com/signup, heroku enviara un correo electronico y a partir de este deberan seguir un wizard para poder completar la creacion y activacion de la cuenta.

Descargar Heroku Toolbelt:

 Esta herramienta les permetira comunicarse con la plataforma de heroku a traves de la linea de comandos. Puede ser descargada desde https://toolbelt.heroku.com/

Descargar e instalar el git: 

Las herramientas de heroku ya traen incorporado un cliente Git, sin embargo mas adelante veremos por que es importante. 

Una vez realizemos todas las instalaciones, procedemos a crear una clave publica, esta nos permitira autenticarnos con el servidor de Heroku de forma mas segura, para hacer esto abrimos el git bash. e introducimos en el siguiente comando:

ssh-keygen -t rsa -C "direccion de email"



Creacion clave publica/privada con ssh-keygen



Luego de hacer esto, se preguntara por la palabra clave con la que el usuario va a acceder a la clave privada, esto es                                   básicamente la contraseña con la que haremos los despliegues.  Después de hacer esto el "ssh-keygen" generara un archivo con         extensión *.pub, el cual sera detectado por Heroku Toolbet a la hora de comunicarse con el servidor.   Como podemos ver en                 la  imagen anterior, se creo un archivo llamado "id_rsa.pub" en la ruta por defecto donde se almacenan las claves publicas y privadas.
Una vez la clave privada este creada, debemos añadirla al heroku toolbet, mediante el siguiente comando

heroku keys:add


Finalizado todo el proceso de configuracion de seguridad, vamos a crear una aplicacion Grails.

grails createApp HerokuTest


CreacionProyectoGrails

cd HerokuTest

Despues de crear el proyecto Grails, debemos hacer la habilitacion git para este proyecto, de la siguiente manera:
grails integrate-with --git
git init
HabilitacionGit
git add .
GitAdd
git commit -m init
Luego creamos el proyecto en el repositorio de heroku, de esta forma:
heroku create --stack cedar
CreateCedar

Despues de crear el proyecto en Heroku, debemos hacer el despliegue de la aplicacion mediante el siguiente comando.
git push heroku master

Ejecutando este comando hacemos deploy en el servidor de Heroku, cuando finaliza el despliegue se puede ver al final una url, esta contiene la aplicación que acabamos de desplegar.


ResultadoDeploy

Bueno, esto es todo espero que les sirva, si tienen alguna duda o sugerencia por favor me la hacen llegar.

Felicidad para todos!

Bienvenid@s

Hola a todos, en este blog pongo todos mis apuntes relacionados con tecnologia(Java, Grails, MyBatis.etc), tutoriales, recomendaciones tecnologicas, y experiencias en el mundo del desarrollo de software.

Disfrutenlo!

Widget Facebook y twitter.