[quote=“cv”]
Qual a maneira mais segura, robusta, testavel, elegante, etc, etc, etc, de se montar um Timer, numa aplicacao J2EE 1.3, sem depender do appserver?[/quote]
hahahaha
Vc não quer 1 doce? A mais facil é comprar uma solução de scheduling como o quartz. Caso contrario vc ta ferrado…
Bom, de forma simples e que atenda suas necessidades:
-Stateless Session Bean que vai ser a fachada pro teu sistema de timer.
-Entity Bean para representar cada TimerTask.
-Serviço que cria 1 background thread e fica fazendo pooling por Tasks expiradas.
Teu SB permite registrar 1 EJB que implemente a interface TimerTask para ser notificado a cada X minutos.
Alem disso ele tem uma função de pooling que verifica por todos TimerTask expirados, invoca eles e reagenda, se necessario.
O resto dos métodos são arroz com feijão e não vou me explicar.
Teu EB simplesmente guarda uma referencia pro EJB a ser invocado, os parametros de agendamento e a próxima hora de execução.
Usando Entity Beans vc resolve o problema da persistencia dos timers, mas a performance da operação de pooling e retirada da sua fila pode não ficar ótima.
Vc pode resolver isso usando BMP e implementando algum tipo de heap para os tasks. Mas isso pode dar bastante trabalho ate.
Isso supoe que voce tenha todos nodes do teu appserver com sincronização razoavel de relogio. Oque deveria ser muito comum.
Devem existir alguns problemas que eu não tou prevendo aqui, mas como não são meus…