Quartz e Tomcat  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Alguém já usou o quartz integrado com o tomcat? Funciona legal?
Alguém teria algum material para recomendar?

www.bau-de-dev.com
foxpv
JavaEvangelist
[Avatar]

Membro desde: 11/04/2006 09:35:56
Mensagens: 343
Offline

Vc ta falando do quartz em alguma aplicação que roda no tomcat?
Se for é bem tranquilo, eu uso a integração do quartz com o spring, mas já usei ele sozinho também e funcionou legal .
Da uma olhada na documentação que ela é bem legal também.
[url]
http://www.opensymphony.com/quartz/
[/url]

SCJP 1.5
lilikadias
Debugger

Membro desde: 01/02/2007 15:53:24
Mensagens: 52
Offline

Já fiz uma aplicação Web onde um servlet iniciava o Quartz. Então, quando subia o Tomcat, ele iniciava o Servlet que chamava o scheduller do quartz. Muito tranquilo. Deu super certo.
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

lilikadias wrote:Já fiz uma aplicação Web onde um servlet iniciava o Quartz. Então, quando subia o Tomcat, ele iniciava o Servlet que chamava o scheduller do quartz. Muito tranquilo. Deu super certo.


Poderia colocar um exemplo? Como você configurou o quartz e o tomcat?

www.bau-de-dev.com
lilikadias
Debugger

Membro desde: 01/02/2007 15:53:24
Mensagens: 52
Offline

No meu caso eu tinha uma aplicação Web, só coloquei um .jar dentro da pasta lib com as classes que o quartz utliza para fazer meu agendamento, por exemplo, fiz uma classe DisparaJobScheduler com os dados do agendamento e uma classe DisparaJob que tem o método execute com a lógica a ser executada.
No web.xml configurei o Servlet normalmente:


Isso faz com que, assim que o Tomcat seja iniciado, ele leia essa classe Scheduler faça o agendamento. Depois do agendamento, é disparado o Job no intervalo e horário que vc configurou no Scheduler.

Não precisa de nenhuma configuração no Tomcat. Só colocar a lib dentro de uma webapp. =)

Abraços!
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Muito obrigado pela dica, vou fazer isso...
Agora uma ooutra dúvida se o tomcat cair todos os processos que estavam agendados são perdidos? E se ficar agendando muitos processos, a aplicação corre o risco de ficar mais lenta e fica consumindo mais memória?

www.bau-de-dev.com
lilikadias
Debugger

Membro desde: 01/02/2007 15:53:24
Mensagens: 52
Offline

Sim, se o tomcat cair pára todos os processos e quando ele subir novamente ele reagenda tudo. Isso é ruim porque se vc tem um processo rodando de hora em hora e o tomcat cair, ele só vai subir no horário configurado pra depois continuar de hora em hora. Com isso seu processo pode ficar 23 horas sem rodar.

Quanto a consumir mais memória eu não tenho certeza, mas acredito que sim.
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

E é preciso configurar alguma coisa? Ou já agendando o processo o tomcat já "salva" o agendamento?

www.bau-de-dev.com
lilikadias
Debugger

Membro desde: 01/02/2007 15:53:24
Mensagens: 52
Offline

Não precisa configurar, o Tomcat vai ler os dados de agendamento na classe Scheduler e vai executando o Job de acordo com as informações setadas nessa classe. Por exemplo:


Vc pode deixar essas informações de hora de disparo, intervalo, etc configuráveis no web.xml.
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

O problema é que o usuário pode setar o horário que o processo vai rodar.
Eu pego as informações do banco e agendo.

www.bau-de-dev.com
lilikadias
Debugger

Membro desde: 01/02/2007 15:53:24
Mensagens: 52
Offline

Entendi, então na classe Scheduler vc pega as informações do banco toda vez que o Tomcat for iniciado para fazer o agendamento.

Quanto ao usuário setar o horário, terá uma aplicação Web onde ele irá setar isso?

Se sim, vc pode gravar no bd os novos dados do agendamento e chamar o método: sched.rescheduleJob(...).
Isso vai reagendar as triggers do quartz.

Att.
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Entendi, vou fazer isso...... só mais uma coisa o BD aonde ficam guardados as informações dos agendamentos, veio com o quartz.
Os agendamentos dos usuários ficam em outro BD, toda vez que um usuário insere um agendamento no banco eu agendo um processo relacionando com as configurações do usuário. Ai se alguém parar o tomcat ou a aplicação os agendamentos são gravados no BD do quartz(uma funcionalidade do quartz).

Se sim, vc pode gravar no bd os novos dados do agendamento e chamar o método: sched.rescheduleJob(...).


Chamando este método ele acessa o BD do quartz e reagenda tudo?

E mais uma dúvida como eu coloco uma trigger para rodar diariamente começando em um determinado horário e sendo finalizada em um outro horário ou no próximo dia?
Dei uma olhada na CronTrigger, mas acho que ela não resolve o meu problema, ou eu que não soube fazer a expressão......

This message was edited 2 times. Last update was at 11/03/2009 09:59:49


www.bau-de-dev.com
lilikadias
Debugger

Membro desde: 01/02/2007 15:53:24
Mensagens: 52
Offline

Chamando este método ele acessa o BD do quartz e reagenda tudo?


Chamando esse método ele atualiza a memória do quartz e reagenda sim... Na verdade, com esse método vc informa uma nova trigger que será utitlizada no lugar da trigger com o agendamento anterior. Olha a API:

rescheduleJob(String triggerName, String groupName, Trigger newTrigger)
Remove (delete) the Trigger with the given name, and store the new given one - which must be associated with the same job (the new trigger must have the job name & group specified) - however, the new trigger need not have the same name as the old trigger.

E mais uma dúvida como eu coloco uma trigger para rodar diariamente começando em um determinado horário e sendo finalizada em um outro horário ou no próximo dia?


Nunca fiz isso. Se eu descobrir algo te aviso.
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Bom tentei de tudo quanto é maneira fazer o meu Job para de rodar através da trigger, a única solução que eu pensei para solucionar isso é o meu próprio job ficar verificando o tempo se chegar no tempo determinado ele mesmo se mata.
Agora alguém saberia como matar o Job? hehehhhe

www.bau-de-dev.com
lilikadias
Debugger

Membro desde: 01/02/2007 15:53:24
Mensagens: 52
Offline

Pra matar é só dar um sched.shutdown();


 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team