Scheduler

De BIS Wiki
Revisão de 13h16min de 20 de outubro de 2020 por Rodrigogml (discussão | contribs) (Rodrigogml moveu Scheduler-V2 para Scheduler sem deixar um redirecionamento: reverter)
Ir para navegação Ir para pesquisar

O Scheduler é o serviço de agendamento do framework BISCore. Ele é carregado na inicialização do container (deploy do EAR), e é responsável por disparar as atividades programadas na hora certa.

Requisitos

  • As tarefas do Scheduler poderão definir uma coleção de propriedades, similares ao SystemProperties. Essas propriedades serão passadas para a tarefa na sua execução e poderão ser retornadas no método. Estas serão persistidas e serão passadas durante sua próxima execução. Retornar o valor NULL significa que não houve alteração, enquanto que retornar uma coleção de propriedades vazias indica que o sistema deve excluir todas as propriedades da tarefa.
  • Toda tarefa tem uma data e hora para ser executada.
  • Toda tarefa terá um Identificador (que não o do banco de dados) que pode ser definido pelo seu plugin owner, este identificador será único entre todas as tarefas. Tem a finalidade de permitir que o plugin encontre um agendamento sem que tenha seu ID de banco associado. Como por exemplo um agendamento genérico de manutenção do plugin.
  • A tarefa terá o nome completo da classe que executará a tarefa. Esta deverá implementar a interface de tarefas do BIS que define os métodos para execução (BISTask).
  • As tarefas deverão manter a data da sua última execução.
  • As tarefas poderão ter um padrão de repetição ou re-agendamento automático após sua última execução conforme descrito abaixo:
    • TIMED (Temporizado): A atividade é iniciada no horário programado e re-executada após períodos fíxos a partir da data de início. Por exemplo, repetir a cada 15 minutos a partir de 01/01/2011 15:32:25. Caso no próximo horário de repetição a atividade ainda esteja sendo executada não será iniciada outra execução da mesma atividade, o horário será pulado e a atividade será executada somente no próximo horário de repetição definido.
  • As tarefas agendadas poderão ter uma data fim para finalizar as repetições. Isto é, caso seu novo agendamento passe a data fim ela não será mais re-agendada.
  • As tarefas devem ter um atributo que define o que fazer em caso de atraso na execução. Este atraso refere-se apenas nos casos em que o sistema esteja desligado durante o horário que a tarefa devia ser executada, e quanto o sistema iniciar novamente qual o procedimento adotado com esta tarefa atrasada. Podendo definir as seguintes situações:
    • Neste atributo podemos definir um tempo máximo de atraso aceito para que a tarefa seja executada;
    • Definir que a tarefa deve ser executada de imediato, não importando o quanto atrasado esteja;
    • Não executar atrasada, dar continuidade no agendamento. Se a tarefa tem repetição será agendada para o próximo horário conforme suas definições, ou, se for uma tarefa que não se repete, esta não será mais executada.
    • O Scheduler deve ouvir os eventos de alteração/inclusão/exclusão de agendamentos para que possa processa-las a medida que forem feitas e não apenas quando o sistema iniciar.

Scheduler Component (GUI)

Para configurar o agendamento de uma tarefa o próprio serviço oferece um componente para ser usado na camada de apresentação que receberá o SchedulingVO e o manipulará de acordo com as escolhas que o usuário fizer na GUI. Este componente estará sempre atualizado com a tela, pois poderá ser solicitado a qualquer momento, ou mesmo já estar em uso simultâneo.

Agendando uma Nova Task

Um passo à passo para criar uma nova task:

  1. Crie uma nova classe (lembre-se de usar o sufixo "Task" de acordo com Padrão de Nomes (descrito em Formatação e Escrita de Código), e implemente a interface BISTask.
  2. Dentro do método definido pela interface, implemente as operações necessárias, para detalhes sobre o método (parâmetros e retornos) leia o tópico BISTask.

Depois de implementada a task, precisamos definir como e quando ela será executa para criar o SchedulerVO. Para saber como popular o SchedulerVO utilize a descrição dos campos no JavaDoc. Uma vez que o objeto esteja criado, basta salvar o agendamento no BISCore através da sua fachada que a tarefa será processada e já passará a funcionar automaticamente.