Provavelmente é uma duplicata de um assunto, mas não consigo encontrar uma resposta no google. (Provavelmente usando palavras erradas)
Estou trabalhando em uma API REST Java e tenho dois objetos java armazenados em meu banco de dados. Um compromisso e uma disponibilidade. Para marcar uma consulta, preciso verificar se meu usuário está disponível.
public void addAppointment(Date startDate, Date endDate, User user)
{
if(availabilityService.isAvailable(startDate, endDate, user)
dao.addAppointment(startDate, endDate, user);
}
Tudo está bem se eu tiver apenas uma instância dos meus serviços. Mas e se eu tivesse duas instâncias e elas verificassem ao mesmo tempo meu método antes de armazenar o novo compromisso?
Como gerenciar a simultaneidade com objetos que estão armazenados em meu banco de dados?
Não tenho ideia se isso vai mudar alguma coisa, mas estou planejando usar o Google App Engine ou AWS para implantar meu aplicativo.
THX.
A maneira típica de lidar com esse problema é controlando a versão dos registros. Uma estratégia chamada bloqueio otimista. Quando você lê o usuário, deve haver uma versão para esse usuário. Em seguida, você faz as alterações desejadas. Quando você for escrevê-lo, se os números da versão não corresponderem, você saberá que outra pessoa atualizou o registro desde que você o leu. A gravação falha. Você relê o registro para obter as atualizações e tenta novamente (se fizer sentido com os novos dados).
Muitas bibliotecas para lidar com bancos de dados terão isso integrado:
Para AWS Dynamo DB: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html
Se você planeja trazer seu próprio banco de dados, o hibernate é um ORM java que implementa este tipo de bloqueio: http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#entity-pojo-optlock
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras