| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/08/2007 18:13:48
|
andre_a_s
GUJ Ranger
![[Avatar]](/images/avatar/3328bdf9a4b9504b9398284244fe97c2.jpg)
Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline
|
Opa!
Senhores, estou tendo muitos problemas com a famosa LazyInitializationException.
Pelo que vi, uma forma de contornar esse erro é sempre manter a Session aberta. OK. Funciona, mas qual a melhor forma de fazer isso?
Pensei no seguinte:
Assim que o usuário se logar, jogo o objeto Session na sessão http dele e sempre pego de lá.
Existe algum problema com isso? Corro o risco de alguém pegar o objeto Session errado?
Outra alternativa seria sempre chamar o método HibernateUtil.getSession() e nunca fechá-lo.
No caso dessa alternativa, posso ter problemas de memória? Ou o Hibernate mata a Session que ficou aberta e está sem uso?
Toda ajuda é bem vinda
|
Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/08/2007 18:23:11
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
eu não vou te ajudar muito mas só pra dar uma luz....
num curso q fiz na caelum lembro do instrutor explicar uma classe que servia como filtro de servlets....
ou seja toda vez que sua app fizesse uma requição ela passaria por esse filtro....e lá nesse filtro vc criaria sua session...
lembro q para criar tinha que implementar alguma coisa....
desculpe a falta de informação mas não lembro muito bem
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/08/2007 18:46:14
|
Eduardo Bregaida
Moderador
Membro desde: 13/11/2003 14:11:35
Mensagens: 2416
Localização: São Caetano do Sul - SP
Offline
|
Giulliano wrote:eu não vou te ajudar muito mas só pra dar uma luz....
num curso q fiz na caelum lembro do instrutor explicar uma classe que servia como filtro de servlets....
ou seja toda vez que sua app fizesse uma requição ela passaria por esse filtro....e lá nesse filtro vc criaria sua session...
lembro q para criar tinha que implementar alguma coisa....
desculpe a falta de informação mas não lembro muito bem
Tenho 1 exemplo desse filtro aki no Blog:
http://javawora.blogspot.com/2007/06/tutorial-parte-1.html :D
|
Blog - Java Anywhere
@bregaida - Twitter
Flickr - Fotos
Cursos de Java?
"Você poderia me dizer, por favor, qual caminho eu devo seguir?"
"Isto depende muito de onde você deseja chegar."
-Lewis Carroll, Alice no País das Maravilhas |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/08/2007 18:46:55
|
marcelo_mococa
Virtual Machine Man
![[Avatar]](/images/avatar/90248d0a98105fa534cf2b0696ddd12f.jpg)
Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline
|
pesquise sobre OpenSessionInView.
|
Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/08/2007 18:56:08
|
cleriston
JavaGuru
![[Avatar]](/images/avatar/f4e4b6af8c2d1b0e2111b045201aebc3.jpg)
Membro desde: 06/02/2007 10:54:37
Mensagens: 234
Offline
|
Cara eu apanhei muito com isso já....
É o seguinte, veja o código abaixo :
depois da ultima linha você nao consegue mesmo "mexer" com o meuObjeto.
Para isso no mapeamento do MeuObjeto você tem que fazer
com o "lazy="false"" você pode "mexer" com o objeto depois q a sessao foi fechada...
Na realidade quando o "lazy="true"" ele só "traz" a informação do banco para seu objeto quando você precisa. (Obs.: Lazy=preguiçoso, ou seja, só traz qdo realmente precisar). Como sua session estava fechada, ele nao conseguia mais ir lah no banco e falar : "me dá o objeto que estou precisando agora"
Você colocando "lazy="false"" no momento q vc dá um load, ele fala pro banco "me dá o objeto q eu vou ficar com ele mesmo depois q cair a minha ligação com você"
Conseguiu entender?? Td ok?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/08/2007 19:09:48
|
andre_a_s
GUJ Ranger
![[Avatar]](/images/avatar/3328bdf9a4b9504b9398284244fe97c2.jpg)
Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline
|
Senhores, aparentemente o OpenSessionInView resolve meus problemas, vou implementar ele aqui
Cleriston, entendi o que você disse, mas não posso deixar como lazy="false". O sistema é muito grande, com muitos relacionamentos e com muitos acessos simultâneos, isso iria deixá-lo muito lento.
Assim que implementar o esquema do OpenSessionInView coloco aqui se ficou tudo certo
Obrigado pela ajuda.
|
Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/08/2007 15:03:44
|
andre_a_s
GUJ Ranger
![[Avatar]](/images/avatar/3328bdf9a4b9504b9398284244fe97c2.jpg)
Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline
|
Senhores, implementei tudo e aparentemente está tudo funcionando
Mas estou com um problema...
Tenho uma listagem de orcamentos, com um link em cada uma para exclusão, quando mando excluir ele executa o seguinte metodo:
Depois da execução ele cai na mesma página de listagem e o registro excluído não aparece mais na lista.
Antes de implementar o OpenSessionInView, funcionava perfeito, agora não funciona.
Entendo o porque. Ele faz isso porque ele monta a página ANTES de comitar a transação que excluiu o meu objeto. Sendo assim, quando executo o método que popula minha lista de orcamentos, o cara que excluí ainda está lá.
Alguma sugestão de como resolver esse problemas
*Se eu voltar a página com um "back" e depois retornar na pagina de orcamentos a lista está correta, sem o orcamento excluído.
|
Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2007 12:10:20
|
PANIC
Entusiasta Java
![[Avatar]](/images/avatar/1d04bcd683377838580d82db48fb5c87.jpg)
Membro desde: 13/08/2007 13:00:22
Mensagens: 20
Offline
|
saudações,
nao conheço OpenSessionInView porem o seu primeiro problema poderia ter sido resolvido se voce buscasse o objeto fazendo join no relacionamento, ou fazendo o seguinte no mesmo método após o q.list() ou q.uniqueResult:
assim ele nao daria erro de LazyInitializationException.
e a principio o seu método de remoção voltaria a funcionar...
espero ter ajudado
|
|
|
 |
|
|