Scheduling

O jmine-tec-scheduling é o módulo do Jmine que lida com agendamento de tarefas, isto é feito, de uma forma geral, utilizando banco de dados, sendo possível ativar ou desativar agendamentos através de páginas que possuem este propósito.

Estrutura Geral

Para criarmos uma tarefa usando o componente do Jmine, precisamos cadastrar no banco uma ScheduledTask, entidade básica do módulo e que guarda os dados básicos de uma tarefa para execução no período definido. Os campos, de uma forma simplificada, são:

  • Mnemônico: identificador único para a tarefa, será utilizado nas páginas que permitem visualizarmos as tarefas agendadas
  • Descrição: descrição amigável do que a tarefa faz
  • Status: se a tarefa está ativa ou não
  • Expressão Cron: define a periodicidade da tarefa, Veja este artigo para mais informações. Note que esta sintaxe difere daquela da crontab<http://en.wikipedia.org/wiki/Cron>. Exemplo: “0 15 10 * * ? 2015” equivale a “execute a tarefa no ano de 2015, não importa o dia da semana, todos os meses, todos os dias, as 10 horas, 15 minutos e 0 segundos.”
  • Bean de condição: um bean que implementa a interface Condition que definirá em que condições a tarefa deve ser executada
  • Bean de Ação: caso a condição seja satisfeita, este é o bean que executará a tarefa em questão
../../_images/Scheduling-fluxo.png

De uma forma geral, quando uma tarefa é cadastrada ela possui duas condições:

  • Condição de tempo
  • Condição específica

Toda vez que a condição de tempo for atingida (ou seja, for o momento de executar uma tarefa), a condição específica da tarefa será validada, se ela também passar, a ação atrelada à tarefa será executada. Todas as tarefas agendadas podem ser vistas, editadas ou executadas na página ListScheduledTaskPage (módulo jmine-tec-web-pages)

Ações

Uma ação, representada pela interface jmine.tec.scheduling.Action diz o que a tarefa deve fazer. Se você quiser agendar uma tarefa será necessário implementar esta interface.

Já fornecidas

O Jmine já possui um conjunto de ações disponíveis para uso:

  • NoOperationAction: implementação básica, não faz nada
  • ScriptAction: executa um script, basta informar seu mnemônico

Condições

Uma condição, representada pela interface jmine.tec.scheduling.condition.Condition, valida se a tarefa deve ou não ser executada.

Já fornecidas

O módulo também possui implementações de condições default:

  • AlwaysExecuteCondition: como o nome diz, seu resultado vai ser sempre verdadeiro
  • OnlyMasterNodeCondition: só executará se o nó atual seja considerado o mestre

Execution

Toda vez que uma ExecutionTask é executada, uma entidade ScheduledTaskExecution é criada na base de dados. Ela contém informações sobre o que aconteceu durante a execução da tarefa, seu status e o trace de execução. Caso tenha ocorrido alguma exceção, ela também será logada. Estas informações podem ser verificadas na página ListScheduledTaskExecutionPage (módulo jmine-tec-web-pages).

Configuração

Assim como o Cluster, é possível utilizar qualquer framework de Scheduling com o jmine-tec-scheduling, porém o JMine já fornece uma configuração que utiliza o Quartz, do Spring. Para isto é necessário importar o arquivo jmine-tec-scheduling-config-quartz.xml:

<import resource="classpath:jmine-tec-scheduling-config-quartz.xml" />

Exemplo

Para um exemplo prático de como utilizar a camada jmine-tec-scheduling, verifique o exemplo Scheduling-Example em nosso repositório. Nele, nós mostramos como configurar e agendar tarefas simples com condições fornecidas pelo módulo.