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

Problemas com Commit no Spring

Não sabia onde abrir exatamente esta dúvida, apesar de envolver o Threads e JPA, decidi abrir aki, pois se trata de como o Spring gerencia o TransactionEntityManager!

Tenho uma tabela que representa o estoque disponível e quando efetuo uma transação, é retirado do estoque a quantidade informada.

Quando há 2 transações simultâneas, só é descontado do estoque o valor da última transação. O que acontece é que a transação 1 busca a quantidade que tem no estoque, depois debita o estoque com o valor informado e não faz o update no banco, depois vem a transação 2 e aproveita a busca de quantidade da transação 1 e finalmente debita a quantidade da transação 2, como não há mais nada a ser feito, aí sim faz o update. Gostaria de mudar este comportamento, que ele fizesse o update após a Thread 1 finalizar.

1 resposta
solução!

Resolvi o problema! Eu estava sincronizando o acesso dentro do método, sendo que deveria sincronizar do "lado de fora", ou seja, a CHAMADA do método! Como a thread conseguia chamar o método, o entitymanager estava sendo usado em 2 "lugares", logo o entitymanager não era fechado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software