Gerenciamento de objetos em memória no JBoss6

Boa tarde pessoal. estou com uma duvida sobre a capacidade de gerenciamento de objetos em sessão no JBoss versão 6.0.0 e queria a opinião de vocês.
To querendo guardar uma informação em sessão de cada usuário que logar no sistema, se eu nao fizer isso terei que constantemente ficar fazendo select no BD. Quando o usuário sair do sistema um método cuida de liberar esse objeto da memória.

O problema é que imagine que esse sistema tenha cerca de 300 acessos por dia. Nada muito grande, mas nem tão trivial assim.
A questão é, para não ter que ficar fazendo select no BD, eu poderia colocar isso em memória ( usando o request.getSession().setAtribute() ) no JBoss sem medo? o JBoss conseguiria administrar esses objetos sem bagunçar na sua memória?
Alguém ai já botou esse servidor pra fazer (quase) o impossível e ele nao deixou a desejar?
Caso influencie, o servidor que roda o JBoss tem hoje 4 GB de memória e um Debian6 64bits

vlwww!!

Sou suspeito para dizer, mas, eu não gosto de usar o scopo de sessão para guardar dados que não sejam informações do usuário logado.

Porquê você não usa uma solução específica de cache como o Memcached ? Tem a vantagem também de você guardar no cache “Temporariamente”, se em 5 minutos o usuário não pedir a informação, ela é removida do cache, ai, você desce no banco novamente. Apesar que dependendo do porte da aplicação, seria matar uma mosca com um canhão.

O ruim de você guardar muito dado em sessão também, que se um dia você clusterizar sua aplicação, ficará migrando muito dado da seção entre os clusters :slight_smile:

Cara, quanto a isso não precisa ter medo. Quando você usa a sessão os dados ficam separados, bem bunitinhos. Se os objetos que você vai guardar são POJO’s, basta matar a sessão que eles são recolhidos pelo GC. Agora, se você precisa de uma limpeza mais cuidadosa (fechar arquivos por exemplo) , você pode usar um dos SessionListener’s que vem na API de Servlet’s.

De qualquer maneira, eu evitaria a todo custo usar dados na sessão. O problema, você mesmo já listou: o consumo de memória é linear em relação ao número de usuários, e isso pode ocasionar uma sobrecarga tremenda no servidor. Pesquise um pouco mais, e veja se a sua camada de persistência não suporta cache.

Muito bem lembrado. Ativação/Passivação de sessões são operações caras em termos de recursos.

Os objetos são informações referentes aos usuários logados, é um objeto Booleano.

Quanto ao problema da clusterização, acho que certos balanceadores (como o apache2 por exemplo) pode balancear considerando o token da sessão nao? assim quando o usuário fizesse uma nova requisição o apache repassaria para o JBoss que o usuario ja havia sido repassado anteriormente usando o seu token de sessão.

Na minha camada de persistência eu uso Hibernate.

[quote=Victor Neves]Os objetos são informações referentes aos usuários logados, é um objeto Booleano.

Quanto ao problema da clusterização, acho que certos balanceadores (como o apache2 por exemplo) pode balancear considerando o token da sessão nao? assim quando o usuário fizesse uma nova requisição o apache repassaria para o JBoss que o usuario ja havia sido repassado anteriormente usando o seu token de sessão.

Na minha camada de persistência eu uso Hibernate.[/quote]

Bom, se é 1 objeto Boolean então não tem problema.