VRaptor - @SessionScoped entregando uma instância nova a cada request

5 respostas
Rafael_Steil

No VRaptor, o que poderia fazer com que um componente @SessionScoped fosse instanciando a cada request, ao invés de entregar sempre o mesmo objeto daquele usuário? Em uma app de testes, baseada no blank project do vraptor, o @SessionScoped funciona bem, mas em outro projeto “maior”, o comportamento parece ser como da do request scope.

O meu modelo relevante (ao menos o que eu acho ser relevante) é:

@Component
@SessionScoped
public class UserSession  { .... }

@Intercepts
public class SessionManagerInterceptor implements Interceptor {
    public SessionManagerInterceptor(UserSession userSession, SessionManager sessionManager, HttpServletRequest request) { .... }
}

@Component
public class SessionManager { ... }

@Resource
@Path("forums")
public class ForumController {
    public ForumController(UserSession userSession, SessionManager sessionManager ....) { ... }
}

Estou usando o Spring como container.

5 Respostas

B

O objeto de qual classe está sendo instanciado a cada requisição?

Lucas_Cavalcanti

o UserSession está mudando a cada requisição? bem estranho… na aplicação a httpSession está habilitada? tenta imprimir o request.getSession().getId() a cada requisição do mesmo usuário, e ver se está igual.

B

Eu perguntei isso, porque a classe SessionManager está anotada somente com @Component, faltando o @SessionScoped

Rafael_Steil

Encontrei o problema.

Em uma determinada condição (como logout e marcar um usuário como anônimo), eu limpava HttpSession do cara, com o intuito de não deixar livro para trás.

Acontece que O VRaptor (ou Spring? não sei) grava informações vitais para o funcionamento de coisas internas na session, e eu acaba mandando isso para o lixo também.

Mais especificamente, era isso:

org.springframework.web.context.request.ServletRequestAttributes.DESTRUCTION_CALLBACK.userSession ====>>>>> org.springframework.web.context.request.DestructionCallbackBindingListener@6b8192b6

Acho que seria legal comentar isso na documentação do VRaptor.

Lucas_Cavalcanti

se você registrar o listener do spring, talvez ele chame o callback mesmo se vc der o invalidate

Criado 15 de janeiro de 2012
Ultima resposta 1 de fev. de 2012
Respostas 5
Participantes 3