Groovy

Usar Gradle Wrapper para evitar instalar Gradle

 

Gradle es una excelente herramienta de construcción. Podría ser en conjunto son SBT las mas avanzadas en Java. Durante los años se ha aprendido mucho de la experiencia de herramientas similares como Ant y Maven. Gradle y SBT han sabido aprovechar muy bien esta experiencia para beneficio de nosotros los desarrolladores.

Lenguaje para scripting: Scala o Groovy?

Ultimamente que he estado descubriendo varias de las bondades de Scala, me puse a pensar si también sería una buena opción para hacer scripting. Por "scripting" me refiero simplemente a hacer programas sencillos que se ejecutan una vez en la vida, o de manera muy esporádica, o como tarea periódica no interactiva.

Hay ocasiones en que los scripts de bash no son suficientes. El ejemplo típico es cuando te piden leer un archivo de texto en cierto formato, comparar los datos con lo que tengas en una base de datos, hacer un archivo de resultados y enviarlo por correo a ciertas personas. Sobre todo si ya tienes varias partes de esta lógica implementadas en un sistema que tienes hecho en Java.

Hacer scripting en Java es extremadamente tedioso. Para empezar, estrictamente lo que se dice scripting pues no se puede hacer. Obviamente puedes hacer una clase con un main y desde ahí invocar el código que necesitas, procesar datos, etc etc pero pues hay que compilarlo y luego ejecutarlo y para eso hay que ponerle un classpath probablemente bastante largo y es una lata. Simplemente el tener que estar compilando ya te lleva a que uses alguna herramienta para llevarlo como proyecto y, sin importar que uses Gradle/Ant/Maven/Ivy, ya se complicó demasiado el asunto.

DSL en Groovy : Builders

Groovy ofrece varias opciones para crear tu propio DSL, siendo una de ellas, y el tema de este artículo, los Builders ("Constructores").

Los builders permiten construir estructuras jerárquicas de manera natural, eliminando la complejidad de que el desarrollador administre la creación de la estructura al mismo tiempo que el código de negocio.

Groovy ofrece 3 opciones para que puedas crear tus propios builders:

  • extendiendo GroovyObjectSupport, es tu responsabilidad alambrar la lógica al sobreescribir invokeMethod/methodMissing principalmente
  • extendiendo BuilderSupport, la manera estandar de muchos builders que existen en la distribución de Groovy
  • extendiendo FactoryBuilderSupport, la manera mas moderna, aumenta los mecanismos provistos por BuilderSupport

Supongamos que necesitamos una clase que obtenga un SQL desde un archivo properties y que nos regrese una cadena con dicho SQL

Primero, debemos definir nuestro builder:

class DBBuilder {

    //Usamos ConfigSluprper, que nos ayudara cargar las propiedades desde el archivo indicado

Esta roto el link de groovy

Que pasa con la página de groovy?
o es mi enlace dsl?

404 Unknown page Home
/groovy.codehaus.org/Home was not found on this server.

Integración entre lenguajes JVM

En 2007 hice una biblioteca de software llamada j8583 y desde entonces la utilizo, actualizándola de vez en cuando con algunas optimizaciones o características nuevas.

Una de estas características nuevas se la agregué cuando comencé a utilizar j8583 en Groovy. Resulta que Groovy tiene azúcar sintáctica para realizar algunas operaciones, por ejemplo:

arreglo.add(elemento); //Java
arreglo << elemento //Groovy

outputStream.write(datos); //Java
outputStream << datos //Groovy

arreglo.get(5); //Java
arreglo[5] //Groovy

//Java
mapa.get("llave");
mapa.put("llave", valor);

//Groovy
mapa['llave']
mapa["llave"] = valor

Video podcast de ViveCodigo 00x07 - jAlarms

Desde el sitio de ViveCodigo.org se ha publicado el podcast con una entrevista con Enrique Zamudio(@chochosmx) donde nos habla de uno de sus proyectos: jAlarms (http://jalarms.sourceforge.net/) Un episodio muy divertido y entretenido, la liga original es en: http://vivecodigo.org/2011/08/01/podcast-7-de-la-temporada-0/ Si solo quieres escuchar el audio lo puedes hacer desde aquí:

El video con la entrevista:

Y el Screencast:

lbro sobre grails

Hay un artículo interesante sobre grails que ya se ha publicado bueno quiero compartirles el libro de Nacho Brito que esta en google book lo encuentran como manual de desarrollo web con grails.

Grails Parte 01, Introducción y cómo iniciar.

Veo que no ha habido aquí ningún artículo de introducción a Grails, por lo que me decidí a crearlo.

Esto pretende ser una serie de artículos al estilo de los que ya se han publicado aquí, como los de Tapestry de ezamudio o los de Play! de wishmaster, o como el de RTFS de luxspes... bueno como este último no.

Grails es un framework para desarrollo de aplicaciones web sobre la plataforma Java, escrito en el lenguaje Groovy, creado por Graeme Rocher y mantenido en un inicio por G2One, ahora parte de SpringSource.

La idea de Grails, es crear un marco de desarrollo que favorezca la productividad al crear aplicaciones web, integrando de facto configuraciones comunes a la mayoría de los escenarios, en resumen: convention over configuration.

Una de las características de Grails que han hecho que me llame la atención fuertemente, incluso para integrarlo como framework de desarrollo para proyectos en Sintel TI, es que funciona como una capa que debajo de sí misma integra tecnologías ya conocidas y de probada efectividad, como Spring (core, mvc) y Hibernate. Esto resulta conveniente al momento en el que Grails realiza de facto muchas cosas por nosotros, sin embargo si deseamos que alguna de éstas sea diferente existe la flexibilidad de modificar lo que convenga, ya que sabemos cómo funciona por debajo. No se trata solamente de un framework que es fácil, también es flexible y altamente configurable y extensible.

Algunas características aparte de la que mencioné que me han gustado sobre Grails son las siguientes:

  • Grails integra en un mismo framework lo que varios frameworks por separado cubren. Con la creación de un nuevo proyecto Grails, ya contamos con capacidades out-of-the-box para MVC basadas en Spring MVC, un completo ORM basado en Hibernate, unit testing basado en JUnit, taglibs, soporte para internacionalización, webservices, seguridad básica, soporte AJAX, layouts, etc, etc, etc... Normalmente esto es lo que se integra en muchos proyectos, la diferencia es que no tenemos que lidiar con implementar dicha integración o con los problemas que resulten a partir de ella, porque en Grails las partes integradas ya se hablan bien entre sí.
  • Lo que pudiera faltar a nuestro proyecto, es probable que ya está disponible mediante algún plugin, o se puede desarrollar como tal. Grails está diseñado para ser extensible mediante plugins que cubren determinada área. Por ejemplo, existen plugins para integrar Grails con Spring Security, Neo4j, Scala o para CAS. Existen plugins para muchos propósitos.
  • Un proyecto Grails ya está preconfigurado para switchear entre ambientes de desarrollo, pruebas y producción.
  • Al iniciar un proyecto Grails en ambiente de desarrollo, cuando hagamos cambios en el código, Grails hará live class reloading, lo que nos libra de tener que detener el servidor, hacer nuevamente el despliegue y volverlo a iniciar para ver el cambio reflejado. Grails actualiza incluso archivos de recursos, como messages.properties.
  • Grails integra para algunos tipos de clases métodos dinámicos, por ejemplo para clases de dominio (lo que serían entities en JPA) ya existen métodos que Grails integra a la metaclase para guardar, buscar, eliminar y esas cosas que regularmente tienen el mismo comportamiento en cualquier aplicación.
  • Seguramente hay muchas características relevantes más... si se les ocurre alguna siéntanse en confianza de señalarla en los comentarios.

Ahora sí...

Construcción de proyectos existentes en Gradle

En una ocasión anterior escribí acerca de Gradle, un sistema de automatización para construcción de proyectos, de manera muy básica. En esta ocasión quiero profundizar un poco sobre una de sus funciones, la cual nos atañe a todos en esta comunidad: construir un proyecto Java.

Gradle tiene una arquitectura de plugins muy buena, y varios plugins muy buenos, por ejemplo el plugin para Java. El plugin para Java permite construir proyectos de manera MUY sencilla si se siguen ciertos lineamientos (y de manera también sencilla si no se siguen dichos lineamientos, como veremos más adelante). Por ejemplo, tener la típica estructura mavenesca en un proyecto ayuda mucho porque son los defaults para construir un proyecto Java:

src/main/java
src/main/resources
src/test/java
src/test/resources

Grape: Manejo de dependencias en Groovy

El manejo de dependencias generalmente es una pesadilla, incluso cuando usamos herramientas como Maven o Ivy. Hay que crear archivos de configuración y de construcción de proyectos, y eso ayuda mucho para proyectos complejos, pero cuando tenemos un script en Groovy, un programita rápido, pensamos que no queda otra opción que poner las dependencias en la línea de comandos.

Pero no es así.

Groovy incluye un excelente mecanismo para manejo de dependencias, llamado Grape, y es muy simple de usar. Supongamos que queremos hacer un script para conectarse a una base de datos y procesar algunos registros, y enviar al final un correo (ah y por supuesto dejar todo en un log con SLF4J).

Distribuir contenido