Scheduler do JBoss rodando uma hora depois do configurado

Nós passamos por um problema curioso no projeto que eu estou trabalhando aqui no UOL. Nós tinhamos
um processo batch que estava configurado para rodar todos os dias as 3:00 da manhã. Esse processo
batch era iniciado via scheduler do Jboss. O problema é que surpreendentemente o processo ao invez
de rodar as 3:00 da manhã, começpi a rodar as 4:00 da manhã sem nenhum motivo aparente.

A configuração estava feita da seguinte forma:

<mbean code="org.jboss.varia.scheduler.Scheduler"
name="jboss.docs:service=MyScheduler">
<attribute name="TimerName">jboss:service=MyTimer</attribute>
<attribute name="SchedulableClass">br.com.uol.MyScheduler</attribute>
<attribute name="StartAtStartup">true</attribute>
<attribute name="DateFormat">dd/MM/yyyy HH:mm</attribute>
<attribute name="InitialStartDate">01/01/2006 03:00</attribute>
<attribute name="SchedulePeriod">86400000</attribute><!-- Roda uma vez por dia -->
<attribute name="InitialRepetitions">-1</attribute>
<depends>administration:custom=MyJMX</depends>
<depends>
<mbean code="javax.management.timer.Timer"
name="jboss:service=MyTimer"/>
</depends>

</mbean>

Foram levantadas hipóteses que o horário da máquina estava configurado errado, que o timezone estava errado, que
o horário de verão estava configurado errado etc. A gente investigou uma por uma e tudo estava OK.

Até que começou a fase do desespero, de começar a etapa de tentar resolver o problema por tentativa e erro, e dessa
forma, descobrimos o problema.

Por uma razão desconhecida, se o campo “InitialStartDate” é configurado para alguma data dentro do horário de verão,
ele só inicia no horário correto quando estamos no horário de verão. Para resolver esse problema, nós apelamos
e mudamos este campo para 01/09/2006, e finalmente o scheduler começou a rodar conforme esperado, as 3:00 da manhã.

Fica aí a dica para caso alguém também passe por este problema. A versão do JBoss usada é 4.0.4_GA.

É impressionante como horário de verão sempre traz problemas, mesmo a cada ano a gente cercando cada vez mais, sempre
tem algum efeito colateral!

[]‘s e até a próxima.

Tags: ,

One Response to “Scheduler do JBoss rodando uma hora depois do configurado”

  1. Edson says:

    Olá…

    Muito interessante esse caso, realmente algumas coisas intrigam a gente. Eu mesmo tenho um problema, que seria muuuuuito simples de resolver, não sei se vc pode me ajudar nessa.
    Ainda sobre timers, configurá-lo de tal forma que ele seja sincrono, ou seja, eu tenho um timer que roda a cada 5 segundos, por questão de performance preciso desse tempo curto, para que os processos não demorem a ser processados. No entanto, quando o onTimeout é disparado percebi que o timer ainda fica contando em memória, e se por acaso eu ainda não terminei o processo dentro do onTimeout, o novo onTimeout entra novamente no processo.

    Isso é ruim, porque acaba “encavalando” um processo em cima do outro. O ideal, seria que a thread desse uma parada, até que eu terminasse o processo anterior.

    Hoje, eu faço uma gambi… enorme. Dentro do Timer EJB, no método onTimeout() eu faço um cancel do timer, e antes de sair do método eu recrio ele novamente, mas acho isso muito feio.

    O que vc me recomendaria, nesse caso de timer sincrono ?

    Att.
    Edson.

Leave a Reply