[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Quartz  XML
Forum Index -> Comentários Gerais
Author Message
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 ?
ricardojlrufino


[Avatar]

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

[WWW] [MSN]
Tomassoni



Joined: 07/02/2007 02:41:52
Messages: 134
Offline

Cara muito bem, obrigado pela força.
ricardojlrufino


[Avatar]

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

[WWW] [MSN]
robertinosantiago


[Avatar]

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
[Email] [MSN]
ricardojlrufino


[Avatar]

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

[WWW] [MSN]
robertinosantiago


[Avatar]

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
[Email] [MSN]
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.
robertinosantiago


[Avatar]

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
[Email] [MSN]
acarvalho



Joined: 10/07/2009 11:41:51
Messages: 5
Offline

Obrigado robertinosantiago,


Funcionou aqui !!!


t+

-----------
Anderson Carvalho
 
Forum Index -> Comentários Gerais
Go to:   
Powered by JForum 2.1.6 © JForum Team