/*
* Sistema de Ouvidoria: um canal através do qual os usuários
* podem encaminhar suas reclamações, elogios e sugestões.
*
* Copyright (C) 2011 SERPRO
*
* Este programa é software livre; você pode redistribuí-lo e/ou
* modificá-lo sob os termos da Licença Pública Geral GNU, conforme
* publicada pela Free Software Foundation; tanto a versão 2 da
* Licença como (a seu critério) qualquer versão mais nova.
*
* Este programa é distribuído na expectativa de ser útil, mas SEM
* QUALQUER GARANTIA; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM
* PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais
* detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU,
* sob o título "LICENCA.txt", junto com esse programa. Se não,
* acesse o Portal do Software Público Brasileiro no endereço
* http://www.softwarepublico.gov.br/ ou escreva para a Fundação do
* Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston,
* MA 02111-1301, USA.
*
* Contatos através do seguinte endereço internet:
* http://www.serpro.gov.br/sistemaouvidoria/
*/
package br.gov.serpro.ouvidoria.agendador;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.impl.StdSchedulerFactory;
import br.gov.serpro.ouvidoria.dao.DaoFactory;
import br.gov.serpro.ouvidoria.model.ConfiguracoesOrgao;
import br.gov.serpro.ouvidoria.util.Constants;
/**
*
* @author SERPRO
* @version $Revision: 1.1.2.3 $, $Date: 2011/10/18 17:39:43 $
*
*/
public final class OuvidoriaScheduler {
// Fabrica para criar instancia de Scheduler
protected static StdSchedulerFactory schedFactory = new StdSchedulerFactory();
public static Scheduler sched;
private static Logger log;
protected DaoFactory daoFactory;
public static void init(HttpServletRequest request) throws Exception {
try {
sched = schedFactory.getScheduler();
// JobDetail utilizado para configurar as definições da Tareja(Job)
getLog().info(
"---------------- Criando Tarefa EnviarAlerta ----------------");
JobDetail job = new JobDetail("EnviarAlertaJob",
Scheduler.DEFAULT_GROUP, EnviarAlertaJob.class);
// Obter parametros a serem utilizados no agendamento
String osessionId = (String) request.getSession().getAttribute(
Constants.ID_SESSAO_ORGAO);
job.getJobDataMap().put(EnviarAlertaJob.ID_ORGAO, osessionId);
String url = request.getScheme() + "://" + request.getServerName()
+ ":" + request.getServerPort() + request.getContextPath();
job.getJobDataMap().put(EnviarAlertaJob.URL, url);
ConfiguracoesOrgao configuracoes = (ConfiguracoesOrgao) request
.getAttribute("configuracoes");
String[] horaMinuto = configuracoes.getHoraEnvioNotificacao()
.split(":");
String hora = horaMinuto[0];
String minuto = horaMinuto[1];
// Criar Trigger para enviar emails de alerta diaramente no horário
// parametrizado.
getLog().info("---------------- Criar Gatilho ----------------");
CronTrigger enviarAlertaTrigger = new CronTrigger(
"EnviarAlertaTrigger", Scheduler.DEFAULT_GROUP,
"EnviarAlertaJob", Scheduler.DEFAULT_GROUP, "0 " + minuto
+ " " + hora + " * * ?");
// Confirgura o Job e a Trigger com o Agendador(Scheduler)
getLog().info(
"---------------- Fazer Agendamento do Envio de Alerta ----------------");
java.util.Date ft = sched.scheduleJob(job, enviarAlertaTrigger);
getLog().info(
job.getFullName() + " Foi programado para funcionar em: "
+ ft + " e repete baseado na expressão: "
+ enviarAlertaTrigger.getCronExpression());
// Iniciar execução do Agendador
OuvidoriaScheduler.sched.start();
} catch (Exception e) {
getLog().info(
"---------------- Erro ao tentar iniciar OuvidoriaScheduler ----------------");
getLog().error(e.getMessage(), e);
}
}
public static void restart(HttpServletRequest request) {
try {
if (OuvidoriaScheduler.sched == null) {
sched = schedFactory.getScheduler();
}
OuvidoriaScheduler.sched.shutdown(true);
init(request);
} catch (Exception ex) {
getLog().error("Erro ao tentar reiniciar as tarefas");
getLog().error(ex.getMessage(), ex);
}
}
protected static Logger getLog() {
if (log == null) {
log = Logger.getLogger("OuvidoriaScheduler ------> ");
}
return log;
}
}