Pessoal… tenho pesquisado bastante na net, inclusive aqui no fórum, porém ainda tenho algumas dúvidas sobre Tratamento de Concorrência com JPA.
Ainda não conseguir ver a diferença entre os Dois.
No fórum encontrei um link de um breve tutorial, que diz:
[quote]Otimista - Quando é criado mecanismos para versionar o dado, no momento em que o banco vai efetivar sua operação sua versão é checada para garantir que você está com um dado que não foi alterado.
Pessimista - O banco simplesmente trava o dado e só aquele que tem a trava consegue trabalhar com os dados.[/quote]
Pelo que eu entendi, Otimista é quando vc usa o @version para controle de versão, e deixa que a implementação JPA cuide do resto
Quanto a Pessimista eu tenho algumas dúvidas, quando diz que o “banco trava o dado” qual é o scopodo dessa “trava”, posso travar um objeto, mandar ele pra interface e só esse usuário pode fazer alterações no mesmo e depois persistir? e quando outro processo for tentar persistir esse objeto que ta travado, ela vai dar a mensagem de erro??
ou
Eu só travo esse objeto entre o meu “transaction.begin()” até o meu “transaction.commit()”. Digamos que tenho um processo na minha camada de persistencia que leva um certo tempo para processar, e posso ter concorrencia com outros usuários, ai usaria esse tipo de lock?
Se sim, o meu lock Otmista tambem não ia cuidar disso? Imagina esse meu processo demorado, tenho uma concorrência nele, não será um processo por vez q vai chegar ao meu commit? e quando chegar o próximo processo o meu lock Otmista não vai propagar uma exceção?
Ou pode ocorrer de dois processos paralelos passarem no meu commit ao mesmo tempo?? e seria ai que o lock Pessimista entraria em ação?
Por favor, vi tem que um pessoal que conhece bem de Controle de concorrência aqui no fórum, quem puder me ajudar eu ficarei muito grato…
Bom, é isso… valew galera