| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2010 16:52:49
|
yuripodho
JavaTeenager
Membro desde: 20/08/2009 08:24:13
Mensagens: 160
Offline
|
Pessoal, quero manter um objeto em lock com o hibernate de modo que uma outra aplicação que utiliza a mesma base de dados não consiga utilizar ele enquanto estou na minha aplicação.
Ok, utilizo o comando meuDAO.get(id,true) e fica em lock. O problema é quando termina o meu método o objeto perde o estado e não sei como manter em lock depois de terminar o método.
|
cada um, cada um. Mas tem cada um... |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2010 17:01:30
|
Hebertbc
JavaChild
![[Avatar]](/images/avatar/4a91f7314e289f078ec79edba82bc972.jpg)
Membro desde: 07/11/2008 20:27:15
Mensagens: 113
Localização: Campo Grande / MS
Offline
|
Não seria pq vc esta fechando a sessão....
|
C'est la vie monsieur excentrique... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2010 17:08:43
|
peerless
GUJ Master
![[Avatar]](/images/avatar/5b2a8f2b014bb326fd82ee313704e78c.jpg)
Membro desde: 22/01/2007 14:52:26
Mensagens: 1391
Localização: Porto Alegre / RS
Offline
|
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/transactions.html#transactions-locking
|
follow me
pitacos
"The most problems that teams face are about communication, and all the others are too." - Dan North
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2010 17:18:12
|
yuripodho
JavaTeenager
Membro desde: 20/08/2009 08:24:13
Mensagens: 160
Offline
|
Não estou fechando a sessão no código, mas quando termina o método o VRaptor já dá todos os commits e tal. E aí perde o estado do meu objeto.
Estou com o livro do hibernate aqui do meu lado, mas até agora não saí do lugar
|
cada um, cada um. Mas tem cada um... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2010 18:05:51
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
Entao.. quando acontece esses comits e tal.. a sessao é fechada...
Acho que vai ser meio complicado manter a sessao.. e ainda o lock abertos por tanto tempo.. parece que vc quer retornar o html pro cara.. e só depois quando o usuario resolver a vida dele.. é que que vai fechar a sessao e lock.. se for isso mesmo.. sua aplicacao vai ter sérios problemas.. pense em outra solucao
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 10:21:38
|
yuripodho
JavaTeenager
Membro desde: 20/08/2009 08:24:13
Mensagens: 160
Offline
|
Tem alguma sugestão? É um webservice que enquanto está rodando, uma outra aplicação que utiliza a mesma base não pode usar o registro
|
cada um, cada um. Mas tem cada um... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 10:26:29
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
A situacao é assim:
- Cliente faz chamada no web service
- Servidor pega o registro e dá lock
- Servidor faz o processamento
- Servidor termina o processamento e libera o lock
- Cliente recebe os dados..
A sequencia é essa?
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 10:32:40
|
yuripodho
JavaTeenager
Membro desde: 20/08/2009 08:24:13
Mensagens: 160
Offline
|
Analisando aqui o problema vai ser um pouco maior.
- Cliente faz a chamada no webservice.
- Servidor pega o registro e dá lock e retorna xml para o cliente com os dados.
- Cliente altera dados na aplicação e faz outra chamada no webservice para salvar os dados alterados.
- Salva os dados e libera o lock
Essa é a situação real que acontece
|
cada um, cada um. Mas tem cada um... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:00:12
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
É... entao é o jeito mais complicado mesmo...
Voce poderia pegar o lock.. e alterar o valor de uma coluna chama emuso por exemplo.. e colocar valor true nela
Quanto o cliente for salvar e terminar com o registro coloca valor false..
Mas nao to achando essa solucao muito interessante de qualquer forma nao...
Mesmo porque.. se o cliente nao retornar com a chamada aquele registro vai ficar com true pra sempre.. se vc nao fizer outro mecanismo de timeout ...
Nao daria pra na tentativa de salvar os dados.. caso outra pessoa tivesse alterado.. soltar uma exceção nao?
This message was edited 1 time. Last update was at 12/03/2010 11:00:56
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:02:49
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
De qualquer jeito.. funcionalmente nao to achando muito interessante essa funcionalidade..
Imagina..
Um cliente pegou o registro
Um segundo cliente tenta pegar o registro mas nao consegue porque ele está em uso por outra pessoa
O segundo cliente vai ter que esperar a boa vontade do primeiro para poder alterar o registro...
O segundo acho que vai ficar puto..
Num fica uma funcionalidade boa.. entende?
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:04:12
|
Java Lover
Debugger
![[Avatar]](/images/avatar/b2fedcd622d9e09cf0e3ac7343f82b2f.jpg)
Membro desde: 24/02/2010 16:27:05
Mensagens: 62
Localização: Belo Horizonte / MG
Offline
|
yuripodho wrote:Analisando aqui o problema vai ser um pouco maior.
- Cliente faz a chamada no webservice.
- Servidor pega o registro e dá lock e retorna xml para o cliente com os dados.
- Cliente altera dados na aplicação e faz outra chamada no webservice para salvar os dados alterados.
- Salva os dados e libera o lock
Essa é a situação real que acontece
E se no momento que o cliente altera os dados na aplicação...
Ele morreu de infarto Caiu a conexão da internet Deu apagão na luz Resolveu sair pra almoçar Foi dar uma xeretada no site do GUJ
Ninguém mais tem acesso ao banco ...
DEADLOCK neles
|
Dúvida solucionada ?
Acrescente ao nome do tópico [RESOLVIDO].Explique a falha e como resolveu.Agradeça a dica. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:10:16
|
yuripodho
JavaTeenager
Membro desde: 20/08/2009 08:24:13
Mensagens: 160
Offline
|
Concordo...
Porém a solicitação foi essa mesma, o que estava acontecendo era de vários usuários estarem alterando o mesmo registro ao mesmo tempo. Então se um usuário estiver alterando deve lançar uma exception para os outros saberem que já está sendo utilizado.
|
cada um, cada um. Mas tem cada um... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:12:03
|
mario.fts
GUJ Ranger
![[Avatar]](/images/avatar/9e96d422fba85185a33829439f5df09d.jpg)
Membro desde: 14/05/2008 09:41:06
Mensagens: 817
Localização: São Paulo - ZL
Offline
|
Complexo. Se vc colocar o status como boolean, e o cara desistir da edição, vc fica com o registro travado no banco.
O que vc pode fazer é quando um usuário solicita edição do registro, vc verificar se há outro usuário editando esse mesmo registro, e retornar ele somente leitura.
Ao invés de usar o boleano para travar o registro, usava um date, e configurava um timeout , sei lá, 5 mim para edição, depois diso já era, pode editar de novo.
Se o primeiro usuário passar do tempo de edição, (demorar 6 minutos por exemplo) invalida a operação com um erro de timeout. ou melhor ainda, checa se alguém tentou editar o registro ao mesmo tempo, se sim dá timeout, se não confirma a alteração.
Mas é só uma idéia, acho que deve haver jeitos melhores pra solucionar isso.
|
Mário Amaral Gonçalves
"Ciência da computação tem tanto a ver com o computador como a Astronomia com o telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas." - Edsger Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:16:42
|
Java Lover
Debugger
![[Avatar]](/images/avatar/b2fedcd622d9e09cf0e3ac7343f82b2f.jpg)
Membro desde: 24/02/2010 16:27:05
Mensagens: 62
Localização: Belo Horizonte / MG
Offline
|
Eu estava escrevendo uma sugestão pra vc...
Mas fiquei na dúvida...
A base de dados é acessada por vários aplicativos ?Vários aplicativos acessam seu aplicativo que acessa a base de dados ?Usuários acessam o seu aplicativo que acessa a base de dados ?
|
Dúvida solucionada ?
Acrescente ao nome do tópico [RESOLVIDO].Explique a falha e como resolveu.Agradeça a dica. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:25:23
|
yuripodho
JavaTeenager
Membro desde: 20/08/2009 08:24:13
Mensagens: 160
Offline
|
Sim, são vários aplicativos (em Delphi) utilizando a mesma base. Uma delas consome o meu webservice. As aplicações em Delphi já colocam em lock, ou seja, se um deles está usando o meu webservice não consegue pegar o registro. Agora tem que fazer o contrário, quando acessa pelo webservice, as outras aplicações não podem usar esse registro.
|
cada um, cada um. Mas tem cada um... |
|
|
 |
|
|