| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/03/2007 18:24:05
|
Rodrigo Manhães
JavaGuru
![[Avatar]](/images/avatar/3e9f7c16bd1cdea78f8e2eea72dfdfbe.png)
Membro desde: 14/07/2005 17:07:07
Mensagens: 242
Localização: Campos dos Goytacazes/RJ
Offline
|
Tenho um sistema com interface desktop acessando um servidor JBoss gerenciando a dobradinha EJB+Hibernate.
O problema está na utilização de lazy loading. Todas as sessions Hibernate estão no servidor. Quando um objeto chega ao cliente e eu tento obter algum objeto do grafo que tenha que ser carregado eu obtenho um LazyInstantiatonException. Só consegui resolver o problema setando lazy-loading para false em todos os mapeamentos. Só que, como o modelo é bastante complexo, uma grande quantidade de informações é enviada ao cliente, a ponto de deixar o sistema lento, mesmo em rede local.
Como trazer a lógica de acesso ao cliente está fora de cogitação (pois também temos sistemas com interface web compartilhando lógica), há como contornar isto no próprio Hibernate?
|
https://github.com/rodrigomanhaes
http://programacaoradical.blogspot.com |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/03/2007 12:22:52
|
amhfilho
JavaTeenager
Membro desde: 26/01/2005 08:23:41
Mensagens: 167
Localização: São José dos Campos - SP
Offline
|
De alguma forma você deve estar fechando a Session quando faz a leitura do objeto no banco. Para aplicações desktop é interessante abrir uma session no início da aplicação e fechá-la somente na saída, você poe configurar um listener para isso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2007 18:25:41
|
mister__m
Virtual Machine Man
![[Avatar]](/images/avatar/89b9c689a57b82e59074c6ba09aa394d.jpg)
Membro desde: 18/03/2005 16:13:17
Mensagens: 736
Offline
|
Muito provavelmente a solução seria fazer fetch join nas suas queries ou initialize(Object) nos objetos requeridos na outra ponta da aplicação. Em alguns outros cenários, em que somente se o usuário fizer alguma ação um bean será acessado, você deve realizar outra query contra o servidor.
|
Michael Nascimento Santos, aka Mister M
Summa Technologies do Brasil - http://www.summa-tech.com/
genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
Líder da JSR-310 - Date and Time API
Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
JSR Community @ java.net - http://community.java.net/jsr
Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80
Twitter - @mr__m |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2007 18:52:22
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
mister__m wrote:Muito provavelmente a solução seria fazer fetch join nas suas queries ou initialize(Object) nos objetos requeridos na outra ponta da aplicação. Em alguns outros cenários, em que somente se o usuário fizer alguma ação um bean será acessado, você deve realizar outra query contra o servidor.
resposta perfeita. so para dar minha opiniao nessas 3 possibilidades que o michael deu, minha ordem de preferencia:
1- fazer outra query: fica sem magica e fica explicito que uma query sera executada.
2- fetch join é bem elegante. e com isso voce faz override da opcao default de suas colecoes
3- eu acho feio ficar chamando o initialize...
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2007 19:25:48
|
keller
GUJ Master
![[Avatar]](/images/avatar/f410588e48dc83f2822a880a68f78923.jpg)
Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline
|
Adotamos a maneira feia aqui.
|
Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2007 20:08:14
|
LuizAvila
JavaTeenager
![[Avatar]](/images/avatar/5c3b99e8f92532e5ad1556e53ceea00c.png)
Membro desde: 07/11/2004 22:35:12
Mensagens: 189
Localização: Florianópolis
Offline
|
Paulo Silveira wrote:
mister__m wrote:Muito provavelmente a solução seria fazer fetch join nas suas queries ou initialize(Object) nos objetos requeridos na outra ponta da aplicação. Em alguns outros cenários, em que somente se o usuário fizer alguma ação um bean será acessado, você deve realizar outra query contra o servidor.
resposta perfeita. so para dar minha opiniao nessas 3 possibilidades que o michael deu, minha ordem de preferencia:
1- fazer outra query: fica sem magica e fica explicito que uma query sera executada.
2- fetch join é bem elegante. e com isso voce faz override da opcao default de suas colecoes
3- eu acho feio ficar chamando o initialize...
Guilherme Keller wrote:Adotamos a maneira feia aqui. 
E no caso do uso com JPA? Apenas as api's da especificação, o initialize é especifico do Hibernate?
Ou seja em uma eventual adoção da api JPA, esta abordagem geraria um prolema, existe o equivalente do initializa para JPA?
|
Luiz Ávila
GU Java SC
http://www.gujava.org.br
http://www.baixoacoplamento.blog.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2007 12:15:56
|
keller
GUJ Master
![[Avatar]](/images/avatar/f410588e48dc83f2822a880a68f78923.jpg)
Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline
|
Cara nao sei te dizer se initialize é especifico do hibernate.
Negocio é que abraçamos o hibernate e vamos com ele..
|
Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/04/2007 08:08:35
|
dias.rodolfo
Smalltalk
Membro desde: 11/04/2007 07:46:00
Mensagens: 3
Offline
|
Existe um framework chamado DataSlim http://code.google.com/p/dataslim/ que trata especificamente de Lazy Loading, segundo o que pude ver do seu problema ele trata bem isso.
|
|
|
 |
|
|