Scala e Lift e SessionVar que perde o conteúdo
Pergunta
Eu tenho sessionVar assim no elevador:
object MyObject {
object myVar extends SessionVar[Box[MyObject]](Empty)
}
Então eu defino valor uma vez para myvar:
MyObject.myVar(Full(value))
Meu problema é que, depois de algum tempo (1-5 minutos), o Myvar perderá seu valor, ou seja, ele terá valor vazio novamente. Isso não se deve à inatividade, pois estou clicando em páginas constantemente. Meu código não está definindo o valor para esvaziar. Durante este 1-5 minutos, o Myvar funcionará corretamente. Os logs não contêm mensagens relacionadas.
Tentei adicionar o método de desligamento ao Myvar, mas ele não está sendo chamado.
override protected def onShutdown(session: CleanUpParam): Unit = {
Log.error("shutdown executed")
}
Estou correndo elevando no cais via mvn jetty:run
comando. Estou usando 1.1-SNAPShot de elevador. Não estou criando explicitamente nenhum tipo de biscoito ou sessão.
Alguma idéia do que está acontecendo? Pode ser que a sessão expire ou invalida de alguma forma, mas por que e por quem?
Eu até tentei desativar o LIVLGC com (LiftRules.enableLiftGC = false
) mas isso não afeta.
Solução
Eu imagino que a questão é que, ao clicar, você está criando acidentalmente uma nova sessão. Isso explicaria por que você não está recebendo o evento de desligamento da sessão: a sessão antiga ainda existe, mas você não está mais usando. Eu sugiro que você imprima o ID da sessão com cada solicitação e veja se ele muda.
Você pode estar perdendo a sessão porque o cookie da sessão está expirando ou porque não está codificando alguns links (consulte httpServletResponse.encodeurl) ou porque está navegando para fora do caminho de contexto do seu aplicativo.
Outras dicas
Qual é o tempo de validade da sua sessão definido em vida?