Primeiro, antes de entenderem a minha duvida, voces terao de entender o cenario (que nao tem como mudar).
Tenho uma aplicacao desenvolvida sobre RMI, sendo que a GUI eh swing e o server eh java + hibernate + mysql, mais ou menos assim:
LADO CLIENTE LADO SERVIDOR
GUI SWING <--------------------- RMI -----------------------> SERVER JAVA <-> HIBERNATE <->MYSQL
A aplicacao é ultra rápida nas buscas, edições, salvamentos, etc. Porém estou com um problema estrutural que é o seguinte:
- Usuário fulano abre o cadastro de um cliente para edição (um cliente que ja estava na base)
- fulano faz alteraçoes no cadastro
- Enquanto fulano ainda estava alterando os dados do cliente, outro usuario (cilano) abre o mesmo cliente para edição.
- Usuário fulano salva o registro que estava em edição.
- Usuário ciclano salva o registro que estava em edição.
Moral da história, o usuário fulano perdeu o serviço, pois os dados que vão prevalecer são os do último salvamento.
A pergunta é a seguinte: Há alguma forma de travar o objeto no banco de dados usando o hibernate mesmo depois de session.close()? Porque hoje pra cada chamada RMI é criada uma sessão, executado o procedimento e a sessão é fechada.
Então, ao ler um Cliente, logo em seguida a sessão é fechada. Ai quando vamos salvar o cliente, uma nova sessão é criada, salva-se o Cliente e fecha-se a sessao.
Este cenário de sessões eu nao posso mudar.
Alguém tem alguma sugestão?
Obrigado