Executar um método uma única vez ao dia

Olá, preciso executar um método uma ÚNICA vez ao dia…

Encontrei um link sobre o assunto http://mballem.wordpress.com/2011/06/01/agendamento-de-tarefas-com-timertask/ utilizando as classes TimerTask e Timer, porém deparei-me com a seguinte situação… quem garantirá que o sistema estará em uso na hora que eu determinar?

Também poderia mandar rodar todo dia após as 00:01 e persistir a data da última atualização no banco a fim de não executar o método novamente no mesmo dia.

Não há outra maneira mais clássica de resolver isso?

cara,

da uma olhada no quartz.

t+

[quote=alissonvla]cara,

da uma olhada no quartz.

t+[/quote]

usar o quartz é uma boa o/*

[quote=darkan666][quote=alissonvla]cara,

da uma olhada no quartz.

t+[/quote]

usar o quartz é uma boa o/*[/quote]

Dei uma olhada, mas não entendi como ele vai saber se o job já foi executado ou não naquele dia…

ele nao vai saber se foi ou nao executado, ele vai executar na regra que vc passou para ele.
se vc quer saber se foi executado, vc vai ter que implentar alguma forma de log, salvar num arquivo, bd e por vai.

t+

[quote=alissonvla]ele nao vai saber se foi ou nao executado, ele vai executar na regra que vc passou para ele.
se vc quer saber se foi executado, vc vai ter que implentar alguma forma de log, salvar num arquivo, bd e por vai.

t+[/quote]

cria uma tabela pra armazenar os logs, ou aproveita uma tabela ja existente :wink:
mas ainda seria legal usar o quartz para futuras necessidades relacionadas
a executão de rotinas com hora marcada…

O quartz tem uma opção nas suas triggers que é o ‘recovery’: se o sistema não estava up no momento em que a trigger devia ter sido disparada, ou se houve erro, ele executa assim que possível, ou seja, quando voltar à execução, subir o server, etc.
E o agendamento diário é feito com base em cron, não tem erro; vai executar uma vez por dia e era isso.
Abraço!

[quote=leoramos]O quartz tem uma opção nas suas triggers que é o ‘recovery’: se o sistema não estava up no momento em que a trigger devia ter sido disparada, ou se houve erro, ele executa assim que possível, ou seja, quando voltar à execução, subir o server, etc.
E o agendamento diário é feito com base em cron, não tem erro; vai executar uma vez por dia e era isso.
Abraço![/quote]

poxa, bacana! mas como ele sabe se já foi executado sem usar algum tipo de persistência?

Não sabe. Ele usa persistência hehe
O quartz tem tabelas “próprias” que ele usa pra isso. Não podes usar banco de dados?
Abraço!

[quote=leoramos]Não sabe. Ele usa persistência hehe
O quartz tem tabelas “próprias” que ele usa pra isso. Não podes usar banco de dados?
Abraço![/quote]

até posso, mas queria saber se existe alguma solução mais clássica pra isso… porém acredito q, no meu caso, seria um problema arquitetural… veja esse tópico q abri no fórum de arquitetura de sistemas, vc vai entender pq tanta discussão… http://www.guj.com.br/java/257268-atualizacao-de-dados-num-bd-compartilhado

O quartz possui uma série de Listeners, assim você pode caputurar o evento

Dê uma lida no javadoc

Na verdade, não faz diferença o fato d’ele ser acessado por diversos sistemas. O problema é se cada sistema estiver rodando num servidor de aplicação (ou instãncia de) diferente. Daí vais ter que pôr o quartz pra funcionar em cada um desses sistemas, ia ficar meio redundante. Funciona, mas não acredito que seja a melhor opção.
Não sei qual é a atualização que tens que fazer nesse campo, mas eu usaria o próprio Scheduler do SQLServer. O bichão funciona bem, não tem muito o que errar.
Abraço!

[quote=leoramos]Na verdade, não faz diferença o fato d’ele ser acessado por diversos sistemas. O problema é se cada sistema estiver rodando num servidor de aplicação (ou instãncia de) diferente. Daí vais ter que pôr o quartz pra funcionar em cada um desses sistemas, ia ficar meio redundante. Funciona, mas não acredito que seja a melhor opção.
Não sei qual é a atualização que tens que fazer nesse campo, mas eu usaria o próprio Scheduler do SQLServer. O bichão funciona bem, não tem muito o que errar.
Abraço![/quote]

vc tem razão, o agente não funcionaria se uma das aplicações estivesse rodando num servidor diferente, que não é o caso aqui, mas pode ser que um dia seja!

funciona sim, pois quartz tem suporte a cluster, por exemplo aqui tenho 2 jboss servers rodando a mesma applicacao e o quartz funciona perfeitamente