JSF Controle de alteração multi-usuários

Eai pessoal

Estou analisando um problema e gostaria de ver se alguém tem uma solução melhor para a situação.

Temos uma aplicação JSF onde vários usuários acessam ao mesmo tempo, digamos que duas pessoas entrem no mesmo pedido e façam alterações diferentes, o que está acontecendo é, a alteração de quem clicou primeiro salva no banco, mas logo em seguida a segunda sobrepõe.

Gostaria de algo, tipo, se um usuário abriu algo para alterar, outro usuário, pode apenas visualizar, não pode alterar, até que seja liberado para alteração.

Pensei em fazer algo assim, colocar um flag no pedido como EM ALTERAÇÃO e se alguém tentar abrir para alterar, exibirá a mensagem, usuário tal está alterando, quando esse usuário alterar, retorna o flag para LIBERADO, problema que eu vejo nisso é, se o usuário simplesmente fechar o browser, ele ficará com o acesso do pedido e outra pessoa ficará bloqueada, então pensei em criar algo para um gestor conseguir liberar a alteração caso alguém faça isso.

Vocês já passaram por isso, tem opção melhor?

O correto é usar o lock otimista do JPA … se estiver usando JPA claro …
Dai vc terá um campo inteiro anotado com @Version, e se alguém tentar atualizar sem ver as alterações da primeira pessoa o JPA disparará um erro…

Opa, resolve sim, facil facil rsrs vlw