viernes 28 de agosto de 2009

Ejecutando Scripts Groovy con Grails

Necesito (Quiero) poder hacer scripts Groovy que serán ejecutados desde un controlador en Grails para analizar la base de datos y crear gráficos estadísticos.

La idea es no tener que tocar el código para poder crear nuevos informes, simplemente añadiendo el archivo en su carpeta correspondiente la aplicación los mostrará y nos permitirá ejecutarlos.

La primera dificultad ha sido averiguar como ejecutar un script externo. Para hacerlo nos debemos servir de la clase GroovyShell como descubrí en este sitio.

El otro reto, era disponer de la conexión a la base de daos en el script, la solución la encontré aqui.

No tengo experiencia suficiente con Grails como para saber si hay una forma mejor de hacerlo, pero por ahora mi solución ha sido...

NOTA: Todavía no esta terminado, lo iré ampliando según lo vaya resolviendo.


import groovy.sql.Sql

class StatsController {
javax.sql.DataSource dataSource

def index = {
Binding binding = new Binding();
binding.setVariable("dataSource",dataSource)
GroovyShell shell = new GroovyShell(binding)
File file = new File("src/stats/test.groovy")
Object value = shell.evaluate(file)
...


El contenido del archivo test.groovy podría ser algo parecido a...


import groovy.sql.Sql

def sql = new Sql(dataSource)
def valor_campo = new String(sql.firstRow("select campo from tabla").campo)
println valor_campo


Continuara...

domingo 16 de agosto de 2009

Grails - WebFlow - Serializable Error

Primero... un buen sitio por donde empezar .

El caso es que estoy intentando hacer un registro de usuarios que comprende varias página, así que necesito pasarme la Domain Class de User durante el flujo. Para eso se supone que tenemos el contexto "flow"


...
def u=new User(params)
flow.user=u
...


El tema es que cuando llegaba aquí me lanzaba la excepción "Could not serialize flow execution; make sure all objects stored in flow or flash scope are serializable"

Pues no desespereís! solo teneis que ir a la clase User y definirla como "serializable"


class User implements Serializable {
...

Grails

Ahora estoy investigando Grails un estupendo framework para Java, si a esto, le unimos mis pocos conocimientos del lenguaje y del paradigma MVC pues imaginaros el dolor de cabeza con el que termino cada vez que le dedico uno de los pocos ratos libres que tengo.

Utilizaré este mismo blog, como block de notas, donde iré apuntando las cosas que considere me vendrán bien recordar en el futuro, o que pueden servir a otros para salir de un atasco, que nadie se haga ilusiones!