[Resolvido]Ajuda com Quartz

Boa Galera!!

To com um problema utilizando o quartz…

é +ou- assim:

Defini o agendador pra executar a cada 5 segundos, cada vez q ele executa era pra ele exibir uma posição diferente do array por exemplo na primeira vez a posição 0, na segunda a posição 1 e por assim vai…

segue os codigos

Agendador


public class Agendador {
	
	public static final String NOME_JOB = "job";

	public static void agendar(){
		
		try {
			
			Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
			
			if(scheduler.getJobDetail(NOME_JOB, Scheduler.DEFAULT_GROUP) == null){
				
				JobDetail jobDetail = new JobDetail(NOME_JOB, Scheduler.DEFAULT_GROUP, Tarefa.class);
				
				jobDetail.getJobDataMap().put("position", 0);
								
				Trigger trigger = TriggerUtils.makeSecondlyTrigger(5);
				trigger.setName(NOME_JOB);
				trigger.setStartTime(new Date());
								
				scheduler.scheduleJob(jobDetail, trigger);
				
				scheduler.start();						
			
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
}

Tarefa


public class Tarefa implements Job {
	
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {

		JobDataMap dataMap = context.getJobDetail().getJobDataMap();
		Integer parametro  = (Integer) dataMap.get("position");

		int[] lista = {1, 2, 3, 4, 5};
				
		System.out.println("Parametro " + lista[parametro]);
	}
	
}

Se alguem puder me ajudar!

vlw!!

e qual o problema? qual o erro? stracktrace?

att,

Então cara não dá erro… funciona perfeitamente o problema é q sempre apresenta o valor da posição 1

ps. desculpa esqueci de colocar o problema!

jobDetail.getJobDataMap().put("position", 0);  

não falta incrementar isso aqui ? rs

att,

então eu imaginei q o erro estivesse ae…

mas qndo coloco dentro do for ele executa tudo de uma vez e eu só quero q na primeira vez q chamar o trigger ele mostre a primeira posição, na segunda vez a segunda posição e assim por diante…

[quote=pedruhenrik]jobDetail.getJobDataMap().put("position", 0);

não falta incrementar isso aqui ? rs

att,[/quote]

acho q vc esta sempre setando no map para a chave position o valor 0, ai a Tarefa sempre recupera o valor 0 nesse trecho:

Integer parametro  = (Integer) dataMap.get("position");  

acho q de alguma maneira vc tem q incrementar o valor de position.

att,

a questão é que o quartz, a cada execucao é uma nova thread e ele executa como uma nova chamada e de fato ele vai ler a posicao 0, pois é como se fosse um novo request para o quartz. qdo um job termina ele nao sabe que outro rodou, mas se vc olhar na api vc pode criar jobs que se comunicam e dai vc vai saber que o job1 rodou o que tava na posicao 0 e ficou aguardando um novo ok, para continuar, dar uma olhada na documentacao, ela eh uma das melhores.

flw.

Obrigado pedruhenrik e LPJava

Na Sexta mesmo eu consegui resolver… foi isso mesmo que o LPJava falou, eu criei diferentes jobs paras as ações que eu queria e funcionou perfeitamente, não sei se é a maneira mais adequada… mas resolveu meu problema…

segue o código como ficou…

mais uma vez obrigado aos 2 pela atenção!

	public static void agendar(){
		
		try {

			Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

			if(scheduler.getJobDetail(NOME_JOB, Scheduler.DEFAULT_GROUP) == null){

				JobDetail jobDetail = new JobDetail("job0", Scheduler.DEFAULT_GROUP, Tarefa.class);
				
				CronTrigger trigger = new CronTrigger("job0", Scheduler.DEFAULT_GROUP);
				trigger.setCronExpression("0 57 17 * * ?");
								
				scheduler.scheduleJob(jobDetail, trigger);				
				
				
				
				
				jobDetail = new JobDetail("job1", Scheduler.DEFAULT_GROUP, Tarefa.class);
				
				jobDetail.getJobDataMap().put("position", 1);
				
				trigger = new CronTrigger("job1", Scheduler.DEFAULT_GROUP);
				trigger.setCronExpression("10 57 17 * * ?");
								
				scheduler.scheduleJob(jobDetail, trigger);
				
				
				
				jobDetail = new JobDetail("job2", Scheduler.DEFAULT_GROUP, Tarefa.class);
				
				jobDetail.getJobDataMap().put("position", 2);
				
				trigger = new CronTrigger("job2", Scheduler.DEFAULT_GROUP);
				trigger.setCronExpression("20 57 17 * * ?");
								
				scheduler.scheduleJob(jobDetail, trigger);
				
				
				
				
				
				jobDetail = new JobDetail("job3", Scheduler.DEFAULT_GROUP, Tarefa.class);
				
				jobDetail.getJobDataMap().put("position", 3);
				
				trigger = new CronTrigger("job3", Scheduler.DEFAULT_GROUP);
				trigger.setCronExpression("30 57 17 * * ?");
								
				scheduler.scheduleJob(jobDetail, trigger);
				
				
				
				
				
				jobDetail = new JobDetail("job4", Scheduler.DEFAULT_GROUP, Tarefa.class);
				
				jobDetail.getJobDataMap().put("position", 4);
				
				trigger = new CronTrigger("job4", Scheduler.DEFAULT_GROUP);
				trigger.setCronExpression("40 57 17 * * ?");
								
				scheduler.scheduleJob(jobDetail, trigger);
				scheduler.start();
				
				
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}