Vraptor 3 - como fechar uma http session

Olá pessoal,

fiz uma aplicação web em Vraptor3. Na parte de login uso um objeto de escopo session para manter o usuário.

No logout coloco null no objeto usuário. Até ai tudo ok.

Agora estou armazendando mais 3 objetos na sessão. Nestes não coloco null no logout, então posso acessar eles após o logout.

Quando eu fizer o logout quero limpar toda a http session. Como faço isto em vraptor 3 ??

Antes de criar este tópico pesquisei e achei uma pessoa tendo esta dúvida com vraptor2: http://www.guj.com.br/posts/list/138699.java

abçs

Ola!

Basta receber o HttpSession no seu construtor e invocar o .invalidate no método que quiser!

abracos

Oi Paulo,

esta é a orientação que peguei no tópico que citei. Mas ao fazê-la o Eclipse dizia que não achava o objeto httpSession.
Na hora pensei em adicionar na lib o servlet-api.jar. Mas não fiz isto - pensei que devesse ter no Vraptor alguma outra maneira de fazer isto sem ter que usar a servlet api.

Após sua orientação coloquei o servlet-api.jar no meu projeto, invoquei o .invalidate e a limpeza da session total deu certo.

Após usar algums minutos a aplicação (várias requisições) vi que o número do conexões com o banco de dados estava superior ao maxidle de conexões que configurei para o dbcp.

Depois de um tempo a aplicação travou.
Testei várias vezes e vi que quando o número de conexões atingia o maxActive de conexões do dbcp a aplicação travava.
No log ficava nisso: “Open JDBC Connection”. Ou seja, o pool parou de funcionar.

Voltei a versão anterior dos jar’s do vraptor e tirei o httpSession e a aplicação voltou a funcionar normalmente não travou mais.

– Ao injetar o httpSession começou a dar este um efeito colateral.

O que pode ter ocorrido ??

Obs.: estou usando hibernate3 e vraptor3-3.0.0-SNAPSHOT.
(depois destas tentativas migrei para vraptor-3.0.2.jar + todos os jar’s que vem no vraptor-mydvds-3.0.2.zip e deram outros problemas - a aplicação dava erro ao carregar - criarei outro tópico aqui no fórum para ver esta outra questão)

Abçs

vc está gerenciando conexões do banco nesses componentes SessionScoped?

Você está colocando o código que fecha essas conexões?

Olá Lucas e Paulo,

Lucas, em quase todos os meus componentes session tem apenas atributos básicos (int, String etc), num deles tem um atributo session, preenchido via injeção - mas nem era usada a session nele. E o código de fechar conexão coloquei no @PreDestroy de meu objeto criadorDeSession.

Achei muito estranho este erro: a aplicação funcionava normalmente, coloquei o servlet-api.jar e depois de vários acessos funcionando normalmente o “banco de dados” travava. Muito estranho.

Migrei a versão do vraptor de vraptor3-3.0.0-SNAPSHOT para vraptor-3.0.2 e o problema desapareceu.

Deve ser algum bug desta versão antiga.

Visualizei o changelog que vem no zip da versão 3.0.2 e nela não consta esta versão vraptor3-3.0.0-SNAPSHOT (que peguei de um link na web a tempos atrás).

Obrigado pela ajuda.

Abçs

Há uma versão mais nova com várias funcionalidades novas: http://vraptor3.googlecode.com/files/vraptor-3.1.1.zip