Sleep em um Stateless Bean

10 respostas
E

Como eu poderia fazer para congelar a execução de um método de um Stateless Bean por 1 segundo?

10 Respostas

Foxlol
Thread.currentThread().sleep(1000);
T

Só por curiosidade, porque vc iria querer isto?

E

Foxlol:
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?

E

Tecnoage:

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.

Foxlol

eliflavio:
Foxlol:
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

E

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.

C

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…

sergiotaborda

eliflavio:
Tecnoage:

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.

Foxlol

Realmente, a especificação diz:

Ou seja, até funciona se você só tiver instâncias do EJB em apenas uma VM.

Flw

E

sergiotaborda:
eliflavio:
Tecnoage:

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.

Criado 17 de novembro de 2009
Ultima resposta 29 de nov. de 2009
Respostas 10
Participantes 6