Sincronizar acesso a um ejb @Stateless

4 respostas
V

To com o seguinte problema: tenho um servidor glassfish onde tenho um ejb @Stateless, e vários clientes acessam esse servidor ao mesmo tempo.
Porém não estou conseguindo sincronizar para que não ocorra acesso simultaneo em um método, por exemplo:

@Stateless
public class VendaBean implements VendaRemote {

@PersistenceContext(unitName = "Siac-persistencia")
EntityManager em;

public boolean cadastrarVenda(Venda venda) {
    try {
        em.persist(venda);
        return true;
    } catch (Exception e) {
        return false;
    }
}

}

Os clientes acessam esse método ao mesmo tempo e não consegue cadastrar no banco corretamente.

Por favor, como consigo resolver isso, preciso urgentemente.

Obrigado!

4 Respostas

Eder_Peixoto

Synchronized serve?

Alexandre_Saudate

Pergunta básica… te ocorreu que, se o sistema é web, obviamente não se deve sincronizar acesso (já que, se você o fizer, o sistema não vai ser escalável, vai ser estupidamente lento, a operação de um usuário vai atrapalhar a de outro, etc…) ?

Já parou pra pensar que existem milhares de aplicações rodando com EJB´s e em nenhuma delas o “usuário tem problemas pra cadastrar errado” ? E que, se isso está acontecendo, existe algum erro de lógica aí?

V

Eder Peixoto, já o usei o Synchronized e não funcionou.

asaudate, o sistema nao é web é cliente/servidor, não tem como usar synchronized num sistema desses, a não ser só local? como acha q posso resolver isso?

Alexandre_Saudate

Sistemas web também são cliente/servidor… ou seja, mesmo assim, você não deveria sincronizar o acesso, mas sim, descobrir porque está tendo problemas na persistência e corrigir. Sincronizar o acesso seria corrigir um problema criando outro.

[]´s

Criado 9 de julho de 2010
Ultima resposta 9 de jul. de 2010
Respostas 4
Participantes 3