Olá, tenho que executar um método acada 5 ou 10 minutos em um projeto java JSF, alguém tem uma dica de como fazer isso?
Executar método em um intervalo de tempo definido
15 Respostas
O Java oferece a classe abstrata TimerTask para você especializar a sua classe com a rotina e o intervalo entre ciclos de execuções.
Veja um exemplo em http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/timer.html
wiliamps
Com JSF tem esse cara que é muito simples de usar: http://www.primefaces.org/showcase/ui/poll.jsf
Nossa, tô a um bom tempo trabalhando com JSF já e não conhecia esse cara (valeu pela dica). Ele é novo?
Nossa, tô a um bom tempo trabalhando com JSF já e não conhecia esse cara (valeu pela dica). Ele é novo?Não sei te falar com precisão quando esse componente foi criado, mas sei que é bastante útil para esse tipo de requisito.
Ah sim, agora se ele precisar que essa ação seja executada mesmo enquanto ele navega, pode ser melhor utilizar um TimerService, né? Se ele estiver usando EJBs.
Ah sim, agora se ele precisar que essa ação seja executada mesmo enquanto ele navega, pode ser melhor utilizar um TimerService, né? Se ele estiver usando EJBs.Uhum.
O único problema que vejo seria integra-lo com a view. No saco desse componente do JSF caso a página fosse fechada ele não seria mais executado. Sem a página estar aberta o timer seria disparado. Outras soluções para rodar a rotina sem precisar da página aberta é o próprio timer citado acima, o timer do ejb (que você falou) ou até mesmo o quartz. Conhece o quartz?
Vê se é isso que vc quer!
public static void main(String[] args) throws ParseException {
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println(new Date());
}
};
Timer t = new Timer();
t.schedule(task, 1, 2000);//executa a task passada como argumento 1 ms após iniciar a cada 2 seg;
}
P.S.: Ahahahaha to com sono e não li que era em JSF :oops:, sei que o A4J, agora richfaces também possui algo parecido!
Uhum.O único problema que vejo seria integra-lo com a view. No saco desse componente do JSF caso a página fosse fechada ele não seria mais executado. Sem a página estar aberta o timer seria disparado. Outras soluções para rodar a rotina sem precisar da página aberta é o próprio timer citado acima, o timer do ejb (que você falou) ou até mesmo o quartz. Conhece o quartz?
Já ouvi falar do Quartz sim, mas como eu trabalho com EJBs, sempre achei mais fácil usar diretamente o TimerService que já vem junto 
Já que estamos em um post sobre o assunto, você tem alguma preferência entre os 2?
Se estiver usando EJB (Que seria uma das melhores formas de se fazer), você pode usar a anotação @Schedule.
Exemplo:
@Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
public void tarefa(){
System.out.println("Executando a cada 10 segundos");
}
Cara um tem sua vantagem e desvantagem:Uhum.O único problema que vejo seria integra-lo com a view. No saco desse componente do JSF caso a página fosse fechada ele não seria mais executado. Sem a página estar aberta o timer seria disparado. Outras soluções para rodar a rotina sem precisar da página aberta é o próprio timer citado acima, o timer do ejb (que você falou) ou até mesmo o quartz. Conhece o quartz?
Já ouvi falar do Quartz sim, mas como eu trabalho com EJBs, sempre achei mais fácil usar diretamente o TimerService que já vem junto
Já que estamos em um post sobre o assunto, você tem alguma preferência entre os 2?
- Quartz: É uma api pequena mas muito funcional. Toda vez que o servidor for iniciado as tarefas serão iniciadas. Pode rodar com qualquer servidor.
- EJB: É boa e já permite integração com as transações do banco de dados. O problema é que não roda em qualquer servidor.
Então, mas ele disse que usa EJB, não deve ser algo bobinho, e já que usa EJB, @Schedule nele !! rsrsrs
Então, mas ele disse que usa EJB, não deve ser algo bobinho, e já que usa EJB, @Schedule nele !! rsrsrsEle quem?
Ele falou que usa JSF, não EJB
Ele falou que usa JSF, não EJB
Hehehehe eu li o Rodrigo falando que usa EJB e acabei confundindo as pessoas, desculpem 
Ai galera obrigado pelas dicas ai vou começar a testa elas aqui. Estou usando o primeface mas vou testa o poll que Hebert Coelho indicou e o time e classe TimerTask que wiliamps indicou, esse método tem que continuar rodando mesmo se o navegador for fechado. Valeu pela ajuda.