Bem pessoal consegui resolver o meu problema com uma dica de um outro amigo na web…
Segue a dica dele abaixo!
Bom, a princípio, você não deveria ter que sincronizar EJBs stateless, mas, vamos lá…
Como você usou o synchronized? na declaração do método? Isso não funciona, pois é o mesmo de synchronized(this) {}, portanto, sincroniza usando a própria instância do bean como lock (cada instância terá seu próprio lock, portanto, rodam paralelamente).
O que você poderia fazer aqui é criar um objeto estático (atributo de classe), e sincronizar os métodos sobre este objeto. Algo do tipo (não compilei, não testei, use por sua conta e risco:)):
Código:
class Bean … {
private static final Object LOCK = new Object();
public void metodo1() {
synchronized (LOCK) {
//do your stuff here
}
}
public void metodo2() {
synchronized (LOCK) {
//do your stuff here
}
}
}
Mas só avisando, a sincronização só vale na mesma JVM. Se você for rodar isso em um ambiente em cluster, isso não vai impedir que duas instâncias em máquinas diferentes rodem ao mesmo tempo.
Dependendo, isso não é problema, mas você deve saber exatamente o que está fazendo Smile. Apenas nunca tente substituir transações por synchronized.
Link da Ajuda!
http://www.javafree.com.br/forum/viewtopic.php?t=10444