Como eu poderia fazer para congelar a execução de um método de um Stateless Bean por 1 segundo?
Sleep em um Stateless Bean
10 Respostas
Thread.currentThread().sleep(1000);
Só por curiosidade, porque vc iria querer isto?
Thread.currentThread().sleep(1000);
Então, já tinha visto este comando, mas entendo exatamente como um EJB funciona, será que este sleep não vai congelar todas as instâncias do meu EJB?
Só por curiosidade, porque vc iria querer isto?
Eu criei um controle de processos, para evitar que 2 processos concorrentes sejam executados simultaneamente. Pode ser que o processo já esteja bloqueado e por isso preciso aguardar um pouco antes de tentar novamente.
Thread.currentThread().sleep(1000);Então, já tinha visto este comando, mas entendo exatamente como um EJB funciona, será que este sleep não vai congelar todas as instâncias do meu EJB?
Não, só a thread atual.
Flw
Não é por nada não, mas dependendo do seu container, provavelmente Thread.sleep gere uma exceção de segurança em vez de dormir. Veja as configurações de segurança do seu container EJB.
Uma coisa: um EJB Singleton não resolveria o seu problema?
Apesar de eu achar uma coisa assim uma aberração, os containers costumam liberar umas coisas assim…
Só por curiosidade, porque vc iria querer isto?Eu criei um controle de processos, para evitar que 2 processos concorrentes sejam executados simultaneamente. Pode ser que o processo já esteja bloqueado e por isso preciso aguardar um pouco antes de tentar novamente.
Mas não é dando sleep que vc evita concorrência!
Além disso em EJB vc está proibido de fazer sleep ou invocar qq outro comando que interfira com a threads.
Para evitar que dois processos sejam executados simultaneamente vc precisa de uma fila.
Realmente, a especificação diz:
Ou seja, até funciona se você só tiver instâncias do EJB em apenas uma VM.
Flw
Só por curiosidade, porque vc iria querer isto?Eu criei um controle de processos, para evitar que 2 processos concorrentes sejam executados simultaneamente. Pode ser que o processo já esteja bloqueado e por isso preciso aguardar um pouco antes de tentar novamente.
Mas não é dando sleep que vc evita concorrência!
Além disso em EJB vc está proibido de fazer sleep ou invocar qq outro comando que interfira com a threads.Para evitar que dois processos sejam executados simultaneamente vc precisa de uma fila.
Eu entendo como funciona uma fila, mas não consigo visualizar na prática como poderia usá-la para evitar concorrência de processos que não podem ser executados simultaneamente. Atualmente eu fiz uma classe que controla isto armazenando informações no banco de dados.