[Resolvido]@PreDestroy em @SessionScoped não está sendo executado pelo timeout
6 respostas
Rafael_Guerreiro
Fala galera, bom dia.
Eu percebi que o @PreDestroy não está sendo executado quando a sessão expira por timeout. Eu coloquei o timeout em 1 minuto e coloquei um breakpoint dentro do método e ele não é executado, embora a sessão seja fechada.
Alguém sabe algum meio de contornar essa situação?
Eu preciso executar esse métdo pois eu tenho uma verificação que não deixa abrir 2 sessões para o mesmo usuário, desta forma, quando ele for deslogado por timeout, eu preciso tirar ele da lista dos conectados…
Eu procurei algum método que a servlet aciona ao terminar o timeout da sessão, mas não encontrei nada do tipo.
A especificação EJB 3.0 e 3.1 defini que o método callback anotado com @PreDestroy nunca será chamado caso ocorra um
timeout. Esse é o comportamento utilizado em objetos Stateful.
Para poder te ajudar será preciso que você passe mais informações.
Rafael_Guerreiro
Nossa, mas que estranho… O timeout termina a session, é prudente que termine os objetos ligados à ela.
Eu consegui “arrumar” aqui, estou chamando o método com @PreDestroy no meu CustomHttpSessionListener.
Mas acho que deveria ter uma maneira mais fácil.
Lucas_Cavalcanti
se isso é vraptor, vc está usando o guice? se sim precisa registrar o listener do guice do vraptor no web.xml.