Bloqueio otimista em um aplicativo RESTful

No trabalho, estamos desenvolvendo um aplicativo RESTful em que a camada de dados será tratada pelo Hibernate. Mas não temos certeza de como lidar com atualizações de entidades.

Planejamos fazer o seguinte:

1) o cliente solicita uma entidade por ID
2) O Hibernate carrega a entidade, os campos solicitados (sempre com a versão) são copiados para um DTO que é convertido em JSON e enviado ao cliente
3) O cliente gerencia alguns campos e envia a entidade (com número da versão) de volta ao servidor.
4) O servidor recebe o JSON que é convertido em um DTO.
5) A entidade correspondente é carregada do Hibernate e os objetos do DTO são copiados para a entidade.

=> A entidade sempre é substituída, mesmo que o número da versão do cliente tenha sido definido. Isso significa que sempre precisamos verificar o número da versão do cliente em relação ao número da versão da instância carregada por nós mesmos, em vez de o Hibernate fazer isso?

Em um aplicativo regular com sessões, a instância desanexada é salva no HttpSession. Sempre que o cliente atualiza a entidade, a instância é recuperada do HttpSession e alguns atributos são atualizados. Sempre que o Hibernate confirmar a atualização, uma ObjectStaleException será lançada se o número da versão for <o número da versão atual.

O problema aqui é que não temos nenhuma sessão Http porque estamos tentando ser RESTful.

Existe uma solução genérica para lidar com o bloqueio otimista em aplicativos RESTful em vez de verificar os números de versão por nós mesmos?

questionAnswers(2)

yourAnswerToTheQuestion