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