Ae galera, utilizando o struts em uma aplicacao WEB notei que alguns objetos de formularios e umas collections ficam na session (as collections claro q eu coloco para fazer uso do iterate) …
O que acontece eh q depois de um tempo fica MUITA coisa na sessao… qual eh a melhor maneira de limpar isso???
queria algo mais automatizado…
Acho q vc nao entendeu…
Eu nao quero invalidar a sessao… apenas queria q os objetos ligados a DETERMIDADA parte da minha aplicação q nao serao mais usados fosses limpos… o problema maior eh qto aos forms do struts…
Então aí já entra aquela velha discussão: quando é que o GC passa para pegar os objetos sem referência? A resposta é: quem sabe? O que você pode fazer é usar weakreferences (ou soft? sempre confundo!!) em todo o lugar; assim, sempre que elas saírem de escopo, elas serão marcadas para serem coletadas.
Uma outra idéia é configurar o tipo de GC que sua VM vai usar. Dê uma olhada neste artigo (http://www.javaworld.com/javaworld/jw-03-2003/jw-0307-j2segc_p.html) e veja escolha a opção que for melhor para você.
Sobre retirar os objetos da sua session, então use o método removeAttribute(String).
Obrigado pela ajuda Daniel, mas acho mudar a condifguracao da VM aki eh muito complicado (o pessoal daki da area de suporte/infra eh MUITO cabeca dura, foi um custo eles atualizarem o tomcat)
Dei a seguinte solução(provisoria):
Imagine uma aplicacao de Agendamento e Outra de Atendimento
Na de agendamento eu uso os formulario form1 e form2
Na de atendimento os form3 e form4
Havera na sessao uma variavel chamada eraser que eh um vetor de String[]
e uma funcao que se chama clearSession que recupera a variavel eraser da sessao e itera sobre ela retirando assim todas as variaveis indicadas por ela…
quando entro no Agendamento a primeira coisa a fazer eh chamar clearSession… ele tenta recuperar eraser e limpar algo proveniente de outra aplicacao… dai ele seta eraser como new String[]{“form1”,“form2”} e guarda ela na sessao…
imagine q o usuario desistiu de agendar antes de chegar no final da aplicacao e assim form1 e form2 ficam na sessao. Dai ele clica no atendimento. Novamente a primeira chamada e clearSession. Ele acha o rase com o valor de “form1”,“form2” e deste modo limpa da sessao o q nao eh mais necessario…
Achoq deu pra entender neh??? No pior caso possivel ficara apenas variaveis de uma apliacacao na memoria desnecessariamente, mas eh melhor q se o usuario fizesse um tour pela apliacacao deixando lixo pra tras…
Espero q vc tenha entendido e se houver sugestoes elas sao bem vindas