| Author |
Message |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2009 14:34:25
|
Tomassoni
Joined: 07/02/2007 02:41:52
Messages: 134
Offline
|
Galera to de volta...
Preciso usar o Quartz para agenda tarefas na minha aplicação. Nunca utililzei ele, preciso fazer algo no aplicationContext.xml ?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2009 21:50:19
|
ricardojlrufino
![[Avatar]](/images/avatar/a760880003e7ddedfef56acb3b09697f.jpg)
Joined: 30/03/2008 20:07:28
Messages: 227
Location: Teresina PI
Offline
|
Tomas, eu tou utilizando o Quartz e prefiro usar um listener no web.xml, pois evita alguns probleminhas na fase de desenvolvimento...
Lá eu inicio um thread que faz o agendamento das tarefas...
No web.xml:
Code:
<listener>
<listener-class>
br.com.linkzsistemas.espacolazer.agendamento.AgendadorTarefaServetListener
</listener-class>
</listener>
O Listener:
Code:
public class AgendadorTarefaServetListener implements ServletContextListener {
private static Logger logger = LoggerFactory.getLogger(AgendadorTarefaServetListener.class);
private static boolean debug = logger.isDebugEnabled();
private AgendadorTarefaThread thread;
@Override
public void contextInitialized(ServletContextEvent event) {
logger.info("-------- contextInitialized -------- ");
thread = new AgendadorTarefaThread();
thread.start();
}
@Override
public void contextDestroyed(ServletContextEvent event) {
logger.info("-------- contextDestroyed -------- ");
thread.shutdownScheduler();
}
}
A Thread que faz o agendamento.
Code:
/**
* Thread usada para iniciar o Agendamento de Tarefas, ele deve ser startado
* quando o Contexto da Aplicação for Inicializado.
*
*
* @author Ricardo JL Rufino (ricardo@linkzsistemas.com.br)
* @date 19:04:30 25/04/2009
* @update
* @since 1.0
*/
public class AgendadorTarefaThread extends Thread{
private static Logger logger = LoggerFactory.getLogger(AgendadorTarefaThread.class);
private static boolean debug = logger.isDebugEnabled();
private static Scheduler scheduler;
/** Tempo em que a thread fica em espera para mostrar as estatísticas */
private long sleepTime;
@Override
public void run() {
try {
logger.info("-------------- Incializando ------------------- (ThreadID = " + this.getId() + ")");
// Inicializar o Agendador (Scheduler)
SchedulerFactory sf = new StdSchedulerFactory();
scheduler = sf.getScheduler();
logger.info("------- Agendando Jobs ----------------");
Trigger triggerDiaria = TriggerUtils.makeDailyTrigger(12, 0);
triggerDiaria.setName("triggerDiariaAs12h-1");
Trigger triggerDiaria2 = TriggerUtils.makeDailyTrigger(12, 0);
triggerDiaria2.setName("triggerDiariaAs12h-2");
JobDetail jobCancelamento = new JobDetail("CancelamentoAutomaticoJob", Scheduler.DEFAULT_GROUP, CancelamentoAutomaticoJob.class);
JobDetail jobBaixaAutomatica = new JobDetail("BoletoBaixaAutomaticaJob", Scheduler.DEFAULT_GROUP , BoletoBaixaAutomaticaJob.class);
// Agentar tarefa.
scheduler.scheduleJob(jobCancelamento, triggerDiaria);
scheduler.scheduleJob(jobBaixaAutomatica, triggerDiaria2);
logger.info("------- Starting Scheduler ----------------");
// All of the jobs have been added to the scheduler, but none of the jobs
// will run until the scheduler has been started
scheduler.start();
logger.info("------- Started Scheduler -----------------");
while(scheduler.isStarted()){
try {
logger.info("------- Colocando a Thred em Estado de Espera --------- (ThreadID = " + this.getId() + ")");
SchedulerMetaData metaData = scheduler.getMetaData();
logger.info("------- Estatisticas --------- ");
logger.info("{} tarafas executadas desde: {}",metaData.numJobsExecuted(), DateUtils.formatDateTime(metaData.runningSince()));
String[] triggers = scheduler.getTriggerNames(Scheduler.DEFAULT_GROUP);
for (String triggerName : triggers) {
Trigger trigger = scheduler.getTrigger(triggerName, Scheduler.DEFAULT_GROUP);
logger.info(trigger.getName() + ": prox. execução: {}", DateUtils.formatDateTime(trigger.getNextFireTime()));
}
Thread.sleep(sleepTime);
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Finalizar o Agendador de Tarefas
* @author Ricardo
* @since 1.0
*/
public void shutdownScheduler() {
try {
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new AgendadorTarefaThread().start();
}
}
É isso aew...
|
Ricardo JL Rufino <ricardo.jl.rufino@gmail.com> < UNYK > :: Q4Soft :: Teresina - PI
"Existe apenas um bem, o saber, e apenas um mal, a ignorância" - Sócrates
"Devemos julgar um homem mais pelas suas perguntas que pelas respostas" - Voltaire
Mentawai Developer
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2009 18:54:07
|
Tomassoni
Joined: 07/02/2007 02:41:52
Messages: 134
Offline
|
Cara muito bem, obrigado pela força.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/07/2009 22:10:15
|
ricardojlrufino
![[Avatar]](/images/avatar/a760880003e7ddedfef56acb3b09697f.jpg)
Joined: 30/03/2008 20:07:28
Messages: 227
Location: Teresina PI
Offline
|
Beleza, tamu aew pra isso ...
|
Ricardo JL Rufino <ricardo.jl.rufino@gmail.com> < UNYK > :: Q4Soft :: Teresina - PI
"Existe apenas um bem, o saber, e apenas um mal, a ignorância" - Sócrates
"Devemos julgar um homem mais pelas suas perguntas que pelas respostas" - Voltaire
Mentawai Developer
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2009 12:11:19
|
robertinosantiago
![[Avatar]](/images/avatar/62889e73828c756c961c5a6d6c01a463.jpg)
Joined: 31/10/2009 11:50:22
Messages: 4
Offline
|
Olá pessoal..
Queria fazer com que o Quartz fizesse uma consulta no banco de dados através do hibernate.. porém.. estou usando ioc e di.. dai quando tento fazer acesso aos meus DAOs ou ao Session dá NullPointerException..
Alguém já tentou fazer isso?
Obrigado
t+
|
-----
Robert
robertinosantiago@gmail.com
tiorobert@hotmail.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2009 12:00:07
|
ricardojlrufino
![[Avatar]](/images/avatar/a760880003e7ddedfef56acb3b09697f.jpg)
Joined: 30/03/2008 20:07:28
Messages: 227
Location: Teresina PI
Offline
|
Cara, entendi só não sei se é possivel (ou facil) pq no Exemplo que passei o Quartz roda fora do contexto do mentawai e as dependencias, como session, dao, etc... eu satisfaço manualmente.
A solução seria vc estudar como é que funciona o IoC do Mentawai e fazer no braço, usando os componentes corretos... Não sei se vai ser facil.. mas...
|
Ricardo JL Rufino <ricardo.jl.rufino@gmail.com> < UNYK > :: Q4Soft :: Teresina - PI
"Existe apenas um bem, o saber, e apenas um mal, a ignorância" - Sócrates
"Devemos julgar um homem mais pelas suas perguntas que pelas respostas" - Voltaire
Mentawai Developer
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/11/2009 17:45:32
|
robertinosantiago
![[Avatar]](/images/avatar/62889e73828c756c961c5a6d6c01a463.jpg)
Joined: 31/10/2009 11:50:22
Messages: 4
Offline
|
É.. usei o hibernate fora do contexto do mentawai mesmo..
não sei se é o mais certo a ser feito.. mas funcionou..
t+
|
-----
Robert
robertinosantiago@gmail.com
tiorobert@hotmail.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2010 09:12:16
|
acarvalho
Joined: 10/07/2009 11:41:51
Messages: 5
Offline
|
Olá robertinosantiago,
Estou com o mesmo problema que você, poderia postar o código com a solução que você encontrou?
Obrigado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2010 10:07:45
|
robertinosantiago
![[Avatar]](/images/avatar/62889e73828c756c961c5a6d6c01a463.jpg)
Joined: 31/10/2009 11:50:22
Messages: 4
Offline
|
Fiz da seguinte maneira..
criei um Servlet Listener
Code:
public class EnviadorServletListener implements ServletContextListener {
private EnviadorThread thread;
public void contextInitialized(ServletContextEvent sce) {
thread = new EnviadorThread();
thread.start();
}
public void contextDestroyed(ServletContextEvent sce) {
thread.shutdownScheduler();
}
}
Thread do Quartz
Code:
public class EnviadorThread extends Thread {
private static Scheduler scheduler;
@Override
public void run() {
try {
scheduler = StdSchedulerFactory.getDefaultScheduler();
Trigger triggerEnviador = TriggerUtils.makeMinutelyTrigger(2);
triggerEnviador.setName("TriggerEnviador");
triggerEnviador.setStartTime(new Date());
JobDetail jobEnviador = new JobDetail("jobEnviador", null, JobEnviador.class);
scheduler.scheduleJob(jobEnviador, triggerEnviador);
scheduler.start();
} catch (SchedulerException ex) {
ex.printStackTrace();
}
}
public void shutdownScheduler() {
try {
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new EnviadorThread().start();
}
}
O job do Quartz
Code:
public class JobEnviador implements Job {
private Session session;
private Transaction txn;
public JobEnviador() { }
public void execute(JobExecutionContext arg0) throws JobExecutionException {
session = HibernateUtil.getSession();
//sua logica
session.close();
}
}
E no web.xml
Code:
<listener>
<listener-class>EnviadorServletListener</listener-class>
</listener>
acho que é só..
t+
|
-----
Robert
robertinosantiago@gmail.com
tiorobert@hotmail.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/03/2010 07:53:10
|
acarvalho
Joined: 10/07/2009 11:41:51
Messages: 5
Offline
|
Obrigado robertinosantiago,
Funcionou aqui !!!
t+
-----------
Anderson Carvalho
|
|
|
 |
|
|