[VRaptor 3.X] Acessando objeto na Sessão pelo DefaultSaveOrUpdateEventListener do Hibernate

Pessoal,

Boa noite! Estou batendo cabeça a um tempo tentando resolver um impasse em um Listener do Hibernate.

Essencialmente o que estou tentando fazer é acessar o UserInfo, um componente @SessionScoped, em uma classe que extende o DefaultSaveOrUpdateEventListener do Hibernate. Como não posso alterar o construtor do meu listener tentei injetar com o Spring o UserInfo, mas não obtive sucesso.

Por acaso alguém teria uma luz?

não dá pra fazer isso, pq não é o Vraptor ou o Spring que vão instanciar o listener, e sim o hibernate…

vc só consegue pegar um objeto qqer usando algum tipo de acesso estático, infelizmente…

vc pode criar o seu próprio, ou usar um que o VRaptor tem (não use em casos normais)

UserInfo info = (UserInfo) VRaptorRequestHolder.currentRequest().getRequest().getSession().getAttribute("userInfo");

(a request atual, e pegando o userInfo a partir da session diretamente)

só cuidado que se vc usar esse listener fora de um request o currentRequest vai vir null

Interessante…

Lucas, com VRaptorRequestHolder é possível obter qualquer objeto gerenciado pelo VRaptor?

não, só escopo de request e de session (geralmente é o nome da classe com a primeira minúscula, num atributo de request ou session)…

Muito bom saber, isso é o tipo de coisa que tem que ter um aviso “Use com moderação”. :smiley:

[quote=Lucas Cavalcanti]não dá pra fazer isso, pq não é o Vraptor ou o Spring que vão instanciar o listener, e sim o hibernate…

vc só consegue pegar um objeto qqer usando algum tipo de acesso estático, infelizmente…

vc pode criar o seu próprio, ou usar um que o VRaptor tem (não use em casos normais)

UserInfo info = (UserInfo) VRaptorRequestHolder.currentRequest().getRequest().getSession().getAttribute("userInfo");

(a request atual, e pegando o userInfo a partir da session diretamente)

só cuidado que se vc usar esse listener fora de um request o currentRequest vai vir null[/quote]

Funcionou! Muito obrigado @Lucas :wink:

NO VRAPTOR 4 O “VRaptorRequestHolder” FOI REMOVIDO. O QUE DEVO FAZER PARA PEGAR INFORMAÇÕES DA SESSÃO AGORA?