#Vraptor - Como injetar as dependencias em um listener HttpSessionListener?
8 respostas
B
Buchler
Pessoal,
Preciso acessar um dao dentro do meu listener HttpSessionListener e não estou conseguindo. Alguem tem alguma idéia de como posso fazer isso? Eu montei singletons de session e do factory e inclusive alterei para usar essas classes no provider, para tentar pegar a sessão, atribuir ao dao e usar. Porém, ele não pega o contexto…
O grande problema é que ai o vraptor nao entra, voce ta usando diretamnte a api de servlets (é como em uma servlet, o spring nao vai injetar nada nela, bem, no servlets 3 a historia muda com CDI).
Voce precisa entao acessar a api interna do Spring e pegar o container diretamente.
B
Buchler
Entendi,
com o override do vraptor, tem uma maneira mais rápida para fazer isso? Alguem já precisou fazer isso e q tenha algum exemplo?
Valeu
Lucas_Cavalcanti
vc precisa fazer algo só no começo da sessão, ou algo tb no final?
G
garcia-jj
Aproveitando o tópico, como funciona o ciclo de vida dos objetos anotados com @SessionScope?
No caso se eu tiver um UserSession anotado como session, sempre que eu pedir ao vraptor a injeção via construtor o mesmo irá construir a classe e adicionar na session. E quando eu quiser remover da session semelhante ao session.removeAttribute?
sergiotaborda
Buchler:
Pessoal,
Preciso acessar um dao dentro do meu listener HttpSessionListener e não estou conseguindo. Alguem tem alguma idéia de como posso fazer isso? Eu montei singletons de session e do factory e inclusive alterei para usar essas classes no provider, para tentar pegar a sessão, atribuir ao dao e usar. Porém, ele não pega o contexto…
Vc tem que explicitamente injetar o que vc quiser no listener.É para isso que existe um init no listener. Mas não use o contexto do spring como um service locator. Faça aquilo que se chama de auto injeção. Vc pede para que um objeto já criado seja injetado. Claro que aqui , apenas injeção via set funciona.
Lucas_Cavalcanti
garcia-jj:
Aproveitando o tópico, como funciona o ciclo de vida dos objetos anotados com @SessionScope?
No caso se eu tiver um UserSession anotado como session, sempre que eu pedir ao vraptor a injeção via construtor o mesmo irá construir a classe e adicionar na session. E quando eu quiser remover da session semelhante ao session.removeAttribute?
ele faz esse controle de sessão do mesmo jeito que o spring (já que roda dentro dele)…
é possível que para suportar o @PreDestroy em Session scope vc precise registrar algum listener do spring no web.xml, mas não testei isso ainda
G
garcia-jj
Conheço pouco do módulo web do Spring. Como seria isso? Eu devo apontar sua referencia para null?
Lucas_Cavalcanti
o spring usa a própria HttpSession pra colocar seus beans de escopo de sessão… então se vc invalidar a sessão, todos os beans nesse escopo serão removidos também. Só não sei se ele chamaria o @PreDestroy