Vraptor 3 - Serializar objetos em XML + Hibernate e JPA  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
vitor.valerio
HelloWorld

Membro desde: 16/11/2007 23:31:22
Mensagens: 13
Offline

Olá a todos,

estou com um problema ao serializar meus objetos através do VRaptor.



Se no JPA o relacionamento entre funcionario e setor for LAZY

o VRaptor serializa o objeto setor mas como um proxy do hibernate

Alguém sabe como resolver isso sem que seja definir o relacionamento como EAGER?

Desde já obrigado
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 5632
Offline

vc vai ter que forçar o load da coleção...

ou chamando funcionario.getSetor();, ou se vc estiver usando HQL, vc pode forçar:

não testei essa query, mas é algo do tipo.. talvez vc não precise da palavra fetch

--
Caelum
www.caelum.com.br

vitor.valerio
HelloWorld

Membro desde: 16/11/2007 23:31:22
Mensagens: 13
Offline

Olá Lucas,

Está OK. Obrigado.

Nem precisei forçar o hibernate buscar no banco.

Fazendo os testes de serialização de objetos pelo XStream e Vraptor percebi um problema:

o XSTream usa getters e setters, correto!?

no entanto, fiz um teste assim:


e ele sempre retorna "atributo". Ele não deveria usar o método getLocal?

desde já obrigado
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 5632
Offline

por padrão o XStream usa fields... se vc quiser que ele use getters e setters vc precisa registrar o converter JavaBeanConverter:


--
Caelum
www.caelum.com.br

Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

a proxima versão do vrpator deve solucionar esse problema do lazy ^^

na verdade a que esta no snapshot já resolve...

só falta alguns detalhes pra ficar 100% =x

Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
vitor.valerio
HelloWorld

Membro desde: 16/11/2007 23:31:22
Mensagens: 13
Offline

Lucas,

consegui fazer isso LOCAL, sem usar o Vraptor... quando uso o Vraptor nada é serializado...

eu já criei uma classe chamada CustomXMLSerialization para retornar o XStream com o registro do converter

sabe oq pode estar acontecendo?
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 5632
Offline

essa CustomXMLSerialization estende XStreamXMLSerialization? ela sobrescreve o método getXStream? ela está anotada com @Component?

--
Caelum
www.caelum.com.br

vitor.valerio
HelloWorld

Membro desde: 16/11/2007 23:31:22
Mensagens: 13
Offline

Sim.

está tudo ok.

segue abaixo o código:



Esse component está sendo usado pelo Vraptor... o único problema é o JavaBeanConverter... quando eu registro ele... nada é serializado...

quando executo ele local funciona normalmente

pesquisei no google mas não encontrei uma solução...

cheguei a implementar o método canConverter e canHandle mas não mudou nada.

This message was edited 1 time. Last update was at 09/04/2010 13:30:50

vitor.valerio
HelloWorld

Membro desde: 16/11/2007 23:31:22
Mensagens: 13
Offline

Lucas,

consegui.


Estava fazendo o canConvert retornar true quando o tipo era o tipo do retorno do atributo e não da classe.

Erro meu.

Obrigado pela ajuda.
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4154
Localização: São Paulo
Offline

O VRaptor serializa a proxy justo porque o XStream usa os atributos. Como ele acessa um atributo diretamente, se seu objeto é uma proxy (o session.load devolve proxy, apenas o .get faz uma requisicao direta sempre) ele vai serializar um monte de nulls e atributos especiias.

O Vitor e o Lavieri perceberam muito bem isso.

Vitor, pra ser sincero, eu havia tentado sua solução há algum tempo atrás, e tive o mesmo problema, tanto em testes com vraptor ou diretamente com o XStream. Em outras palavras, acho que o JavaBeanConverter nao esta mais funcionando como deveria.

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
vitor.valerio
HelloWorld

Membro desde: 16/11/2007 23:31:22
Mensagens: 13
Offline

Olá a todos,

havia esquecido de colocar a solução aqui.

A conclusão que eu cheguei é que o XStream não funciona corretamente quando você não especifica as classes que vão ser utilizadas pelo JavaBeanConverter mas, quando você especifica ele funciona direito.

Não fui atrás para saber o porque mas segue a solução abaixo:


Assim ele funciona corretamente e, não lendo a partir do field, ele não pode retornar o proxy do Hibernate.

Obrigado a todos
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4154
Localização: São Paulo
Offline

oi vitor

a versao 3.1.2, que deve sair na semana que vem, ja vem com uma correcao para o problema.

paulo

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2673
Localização: Porto Alegre
Offline

Paulo Silveira wrote:a versao 3.1.2, que deve sair na semana que vem, ja vem com uma correcao para o problema.


O que foi feito para corrigir o problema?

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 5632
Offline

basicamente foi inicializar os proxies antes de serializar... o lavieri que fez =)

--
Caelum
www.caelum.com.br

Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

Lucas Cavalcanti wrote:basicamente foi inicializar os proxies antes de serializar... o lavieri que fez =)



Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team