Muitos usuários ao mesmo tempo Java/JSF e Tomcat

3 respostas
B

Salve!!

Uma pergunta sobre método sincronizado em aplicações JSF, digamos que eu não queira que duas pessoas executem um método ao mesmo tempo, porque ambas irão fazer alterações no banco de dados e poderia dar algum problema, colocar o método como synchronized resolve isso ou tem outra estratégia?

Vlw!!

3 Respostas

V

Se você tem que ler alterar/processar alguma coisa e gravar novamente então use os conceitos de transação(select for update, commit, @transaction, etc), usar synchronized neste caso pode até funcionar mas creio que não seria indicado.

confuso

Geralmente o próprio banco de dados cuida dessa tarefa de concorrência, mas teria entender melhor o que o método tá fazendo.

Uso o synchronized, por exemplo, quando tem muita thread alterando um único objeto, em memória, e quero que esse objeto não esteja inconsistente.

B

Como é um assunto que estou pesquisando ainda não tenho nenhum código para demonstrar, mas vou tentar exemplificar uma situação que me veio a cabeça aqui.

Primeira situação, duas pessoas pesquisam o mesmo cliente para alterar seus dados, como é um sistema JSF, será aberta uma página para alterar o que for necessário, depois de alguns minutos ambos clicam no botão alterar.
Nos meus testes, sem nenhum controle, aquele que clicou por ultimo vai ter suas modificações feitas e a do primeiro será descartada.

Se utilizar o lock otimista @Version do Hibernate/JPA, aquele que clicou por último recebe uma exception.

Mas ao meu ver isso é desagradável, fiquei pensando aqui, e se for algo grande, que os usuários levem muito tempo e no final acaba perdendo tudo, creio que o ideial seria algo como, quem clicou primeiro, consegue alterar, o segundo em diante, não conseguiria até o primeiro terminar

Criado 19 de março de 2019
Ultima resposta 21 de mar. de 2019
Respostas 3
Participantes 3