Usando Grails para construir um sistema batch simples

Inspirado pela discussão sobre ‘Como eu carregaria um job Quartz a partir de um script’ e baseando-me na postagem sobre o ‘Tiny GroovyServ’, resolvi implementar um sistema batch simples usando Grails e os plugins quartz, spring-security-core e batch-launcher.

O batch-launcher foi adotado porque, na empresa na qual trabalho, os ambientes para aplicações online (web) e batch são segregados. Dessa forma, no ambiente exclusivo a aplicações batch não há Tomcat, WebLogic ou qualquer Web Container ou Application Server. Nesse contexto, as aplicações batch são responsáveis por todo processamento massivo e assíncrono, principalmente aquele necessário à integração de dois ou mais sistemas.

Basicamente foi criada uma aplicação composta por serviços e tarefas agendadas cuja invocação síncrona ou assíncrona pode ser feita através de um cliente de SSH. O passo-a-passo para teste:

  1. Efetuar download do arquivo simple_batch_system-0.1.zip (o arquivo possui, aproximadamente, 25 MBytes e contém todas as dependências necessárias à execução da aplicação)
  2. Descompactar o arquivo em um diretório qualquer
  3. Iniciar a aplicação (o único pré-requisito para esse passo é ter uma JRE instalada e o java estar disponível no PATH)

    [daniel@techdm simple_batch_system-0.1]$ ./simple_batch_system.sh

    ou

    simple_batch_system.bat

  4. Disparar a execução de serviços ou tarefas agendadas, como admin0 (a senha é admin):

    ssh -p 8123 admin0@localhost task1Job,task3Service

Algumas observações importantes:

  • Para os casos onde não há segregação dos ambientes online (web) e batch, uma abordagem semelhante pode ser adotada na implementação de aplicações Grails “comuns” (web). O código-fonte, para a execução dos comandos ssh, pode ser encontrado aqui;
  • O plugin spring-security-core é opcional e foi utilizado somente para a criação de um modelo de domínio conhecido de usuários e perfis;
  • O mecanismo de chaves públicas e privadas pode ser adotado como alternativa de autenticação. Isso combinado a um ssh-agent eliminaria a necessidade da troca de senhas, sem reduzir a segurança da solução;
  • É possível implementar uma sessão SSH interativa, para a execução dos comandos;
  • Durante qualquer desenvolvimento usando batch-launcher, os comandos de maior destaque são ‘grails batch-run-app’, ‘grails interactive’ (combinado com ‘batch-reload-app’) e ‘grails batch-war’.

Projeto no gitbub.
Download do código-fonte.

3 Responses to Usando Grails para construir um sistema batch simples

  1. Excelente post!

    Para agendamento em Grails você pode utilizar o Spring 3 @Scheduled ao invés de Quartz.

    Algo que você pode fazer pra melhorar ainda mais o desempenho é utilizar GPars, caso o processamento em lote possa ser paralelizado.

    A propósito, para a arquitetura em lote, você tentou avaliar o uso de Spring Batch?

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*


3 × = vinte quatro

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>