[vraptor3] Dúvida (CGLib)

4 respostas
lscosta

Buenas!

Me surgiu uma dúvida no trecho de código abaixo:

@Path("/activity/{activityId}/delete_section/{section.id}")

	public void deleteSection(Long activityId, Section section) {

		Activity activity = repository.findById(activityId);

		(...)

Ao debugar, o que tenho para a variável ‘activity’ é:

activity = Activity$$EnhancerByCGLIB$$159a84f9 (id=122)
          CGLIB$BOUND = true
        > CGLIB$CALLBACK_0 = CGLIBLazyInitializer (id=128)
          CGLIB$CALLBACK_0 = null
          CGLIB$CONSTRUCTED = true
          description = null
          id=null
          sections = null

Por que ocorre isso? O que preciso para obter meu objeto ‘puro’?

4 Respostas

Ataxexe

Isso significa que você está usando um framework que usa a biblioteca CGlib para algumas funcionalidades (como LazyLoad).

O que você tem quando depura a aplicação é uma instância de uma classe filha de Activity. Se quiser fazer um teste, declare Activity como “final” pra ver o que acontece.

Eu não conheço algum meio de você obter uma instância de Activity e, caso exista, você perderá funcionalidades do framework.

lscosta

Esse código é parte de um controller padrão…

Dentro de “CGLIB$CALLBACK_0” há uma propriedade “target” que parece ser o que preciso.

Quero obter um registro da base, dado seu id.

G

Esse comportamento não tem relação alguma com o Vraptor, mas sim com o Hibernate. Quando você faz o load de uma entidade o hibernate traz para você um proxy ao invés da entidade verdadeira. Em tempo de execução esse proxy é criado para adicionar algumas funcionalidades a mais na entidade, como exemplo, lazy load como já citado.

Quando você faz o debug você enxerga uma representação diferente do objeto, porém ele tem todos os comportamentos do seu objeto. Se você tentar trabalhar com esse objeto você vai notar que ele possui todos os comportamentos do seu objeto Activity. Ou seja, você nunca terá seu objeto puro.

Abraços

lscosta

Pô, não costumo usar o debugger, não havia percebido isso ainda… =s

Obrigado e Bom Natal a todos!

Criado 23 de dezembro de 2009
Ultima resposta 24 de dez. de 2009
Respostas 4
Participantes 3