[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.

Obrigado desde já.

6 Respostas

johnny_quest

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.

Rafael_Guerreiro

É VRaptor e estou usando Guice.

Que listener é esse?

Lucas_Cavalcanti

só colocar no web.xml:

<listener>
   <listener-class>br.com.caelum.vraptor.ioc.guice.SessionScopeListener</listener-class>
</listener>
Rafael_Guerreiro

Lucas, obrigado! Funcionou certinho aqui.

Criado 21 de março de 2012
Ultima resposta 26 de mar. de 2012
Respostas 6
Participantes 3