Boa noite.
Bom, a princípio minha dúvida pode parecer ser esclarecida com uma resposta simples: Timer.
Pois bem, explicarei o problema e o cenário que me levantou dúvidas quanto a essa estratégia.
Seguinte, quando acontece um determinado tipo de evento no meu sistema preciso gerar um alerta na aplicação em tempo real a cada, digamos, meia hora. Caso ocorra um outro evento essa geração de alerta deve ser abortada.
Pensei da seguinte maneira, quando acontecer esse evento eu lanço um timer que a cada meia hora registra essa ação desejada. Quando ocorrer outro evento que cuminaria na finalização desse evento simplesmente cancelo o timer. Até aí tudo bem.
O problema é que esse tipo de evento é lançado para cada usuário do sistema múltiplas vezes por dia (estamos falando na ordem de centenas de usuários, quiçá milhares).
Daí eu cairia num problema grave de agendar um timer pra cada um, onde em um teste de estresse que fiz hoje não se mostrou nada bem (no caso de TimerService persistente deu pau com 100 Timers, não-persistente chegou a algo próximo de 4200 até ter um OutOfMemory).
Uma solução encontrada seria criar um único timer em polling para verificar esse evento sempre (em um tempo menor de agendamento, pra aumentar a precisão), mas isso não me parece muito inteligente…
Espero ter conseguido explicar a minha situação e o por quê da minha dúvida.
A claro, os recursos disponíveis consistem em JBoss 4.2.3 e JDK 1.5 (não me perguntem por que) e quem sabe mais algum framework (tipo quartz).
Qual seria uma aproximação de algo que vocês escolheriam como solução candidata?!
Obrigado!