Pergunta

Meu empregador acabou de me pedir para executar um processo em lote cronometrado em um aplicativo Java EE WebSphere que eles estão executando.É suposto haver uma determinada aula às 23h30 todos os dias.

Não estou muito familiarizado com Java EE nem com o servidor WebSphere (ou Tomcat, no ambiente de desenvolvimento) e estive pesquisando, mas tudo que encontrei é sobre a classe de timer java, mas não como configurá-la ou invocá-la .

Parece que a edição do arquivo web.xml também é necessária.

Qualquer ajuda será apreciada!

Foi útil?

Solução

Você deve olhar para o código aberto Biblioteca de quartzo do OpenSymphony.Muito fácil de usar e perfeito para esse tipo de coisa.

TimerTasks são mais adequados para executar algo em um curto espaço de tempo no futuro.Mas para uma execução repetida em um período de tempo grande como este, o Quartz é excelente.Você pode até manter sua lista de tarefas futuras em armazenamento persistente, como um arquivo ou banco de dados, para que os próximos trabalhos cronometrados não sejam perdidos se seu aplicativo for reiniciado.

Além disso, há uma abstração fantástica para Quartz na estrutura Spring.

Outras dicas

No WebSphere, você pode usar o Scheduler Service para acionar a execução de um método em uma classe java.O agendador fornece um calendário para agendar a execução de jobs (semelhante ao cron) ou você pode desenvolver o seu próprio.

Aqui está um link para a página que descreve o planejador na documentação do WAS 6.1:

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp

O EJB 3.1 terá serviços de timer aprimorados, bem como ganchos de ciclo de vida de aplicativos que eliminam a necessidade de usar servlets para iniciar tarefas sem interação do usuário.

Isso pode responder ao título da pergunta, mas para a pergunta "real" relativa a um aplicativo legado (escrito há mais de 6 meses;)) em execução no websphere, recomendo usar o servlet de inicialização e o serviço de timer EJB.

Serviço de temporizador em J2EE 1.4 (EJB 2.1)

Para EJB 3.0 (e 3.1 assim que disponível), existem algumas anotações interessantes;)

Eu não apresentaria outro biblioteca a menos que você REALMENTE precise.O serviço de timer deve ser suficiente para realizar um trabalho arbitrário diariamente.

HTH,
Martinho

No seu web.xml você pode configurar um servlet para carregar na inicialização.
Sintaxe:

u003Cservlet servlet-name='hello'n servlet-class='test.HelloWorld'>
<carregar na inicialização/>
</servlet>

Faça isso, então no método init do servlet você pode configurar um Timer/TimerTask para fazer o que for necessário.TimerTasks são como Threads, exceto que você pode agendá-los quando forem executados.

O Quartz faz parte da distribuição padrão do JBoss 4.2.x.

E é uma biblioteca muito boa, que sem muito trabalho você também pode definir fluxos de trabalho simples.

Não há suporte para planejamento no WebSphere.

Se você estiver no Unix, poderá usar o crontab para agendar uma solicitação para uma página do seu aplicativo Websphere.Suponho que no Windows também exista a possibilidade de agendar uma solicitação para uma página.No meu crontab eu agendo uma solicitação para uma página da web todos os dias às 8h45

45 8 * * * OBTER http://www.domain.com/myBatch?securitykey=verysecret

Agora todas as manhãs o servlet myBatch é chamado e lá posso fazer o que for preciso naquele momento.Para evitar que outras pessoas chamem esta página e iniciem o lote, adicionei o parâmetro securitykey.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top