Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como Sincronizar os DAOs

Possuo a classe:

@Entity
class Entidade{
    private double quantidade;

    public void adiciona(double quantidade){
        this.quantidade += quantidade;
    }
}

Como posso ter mais de uma instância Managed da Entidade (Me corrijam se eu estiver errado), Irei sincronizar o método adiciona() utilizando Threads. Mas é possível fazer de outra forma utilizando Spring ou Hibernate?

OBS: Estou utilizando Spring para injetar o EntityManager e gerenciar as transações.

1 resposta
solução!

Opa, em diferentes requests você realmente pode ter essa entidade carregada em diferentes entitymanagers, não se pode negar.

Você também pode ter problemas de concorrencias, essa é outra coisa que pode acontecer. Entretanto, minha dica é a seguinte: deixe rolar.

Dá uma olhada na annotation @Version(http://docs.oracle.com/javaee/6/api/javax/persistence/Version.html) da JPA. Caso duas threads peguem uma referencia para a mesma entidade, apenas uma vai concluir a transação com sucesso.. É o que eles chama de lock otimista.. Seu código vai continuar simples e vc vai ficar prevenido de qualquer inconsistência no sistema.