[RESOLVIDO] Mesma tela aberta em dois PCs diferentes...problema ao salvar

Estou com um problema…
Seguindo a situação …
Num sistema em rede que possui uma tela para registro de vendas e pagamentos…
Esta tela está aberta em 2 pcs para a mesma venda…
O problema que estou passando seria que o usuario do primeiro pc dá baixa na venda (efetua o recebimento e salva ) enquanto isso o segundo PC está com a venda aberta em modo de edição… depois de um tempo, o segundo PC resolve fechar e salva a venda…portanto…o recebimento efetuado no primeiro PC desaparece…

Como devo proceder nestes casos? fazer uma espécie de bloqueio de edição?

Olá, passei por este problema, e consegui resolver facilmente, porem utilizando hibernate, se você não utilizar hibernate nem perca tempo lendo abaixo, hehe

voce pode utilizar um atributo em sua classe que verifica a versão do registro

adicione na classe do pedido ou em qualquer uma que precisar dessa verificação um atributo como o abaixo:


@Version
@Column
private int version

e o hibernate irá gerenciar se o registro está sendo editado, se a primeira pessoa fizer uma alteração e clicar em salvar, ele impedirá que a segunda salve, é possível até mesmo retornar essa mensagem ao usuário capituando a OptimisticLockException

qualquer duvida da 1 toque

Você deve definir a política. Mas o mais comum é o pessoal fazer assim:

  1. Criar um campo de versão na venda;
  2. Ao carregar a venda na tela, carregue a versão;
  3. Antes de salvar, verifique se a versão ainda é a mesma. Caso não seja, dê uma mensagem de erro, dizendo que alguém já salvou e impeça a ação de salvar. Normalmente o processo de verificação e salvamento deve ser realizado numa transação, para garantir a atomicidade da operação.
  4. Após salvar, some 1 ao número da versão.

É o que a tag @Version do Hibernate e do JPA fazem.

Tópico movido para o fórum de persistência.

Ow…galera…obrigado pelas respostas…
Estou usando sim o hibernate porém…não estou usando ainda os annotations… e sim o xmls direto… tem como definir esse “@Version” no xml?
Vou dar uma pesquisada sobre isso…
Caso não tenha como fazer isso, vou seguir a idéia do ViniGodoy que também é uma boa saída…

Mais uma vez , Obrigado

Olá…como me foi sujerido utilizei a tag version contida no hibernate, só que como não utilizo annotations, pesquisei e utilizei essa tag no xml mesmo
que ficou mais ou menos assim no arquivo xml da tabela em questão

  <version  name="versao_registro">
        <column default="1"  name="VERSAO_REGISTRO" />
    </version> 

depois para verificar se ocorreu o problema, basta buscar a exception ocorrida no hibernate do tipo
org.hibernate.StaleObjectStateException … se aconteceu essa exception, é sinal que ocorreu o problema que postei no início do tópico…
Obrigado!