Verificar quantidade de usuários logados. [RESOLVIDO]

Tudo bem pessoal…

Alguém poderia me dizer como faço pra capturar as seguintes informações:

1- Número de conexões (usuários logados) - SESSIONS
2- Monitoração do JDBC - Número de conexões com o banco em uso.

Uso o Jboss + Seam.

Desde já, agradeço.

Acredito que o ideal seria utilizar o escopode aplicação para preservar as informações de usuário “logados”, isso no momento em que você autenticar o mesmo, incremente um contador alocado na Application.

Detalhe, dependendo da necessidade você poderia colocar na Application (escopo) um List inserindo no login e removendo no logout!

Até!

O problema é que você não tem como saber quando um usuário sai do sistema se ele não clicar no botõa logout.
Neste caso seu contador so iria decrementar quando a sessão deste usuário expirar.

[quote=Oenning]O problema é que você não tem como saber quando um usuário sai do sistema se ele não clicar no botõa logout.
Neste caso seu contador so iria decrementar quando a sessão deste usuário expirar.[/quote]

Isso mesmo, foi o que pensei.

E outra, quando expirar a sessão do usuário, como capturar isso no Filter pra decrementar o list??

Alguma solução?

você pode definir um tempo curto para a sessão (1 min por exemplo) e colocar um mecanismo de “keep-alive” no seu sistema…
procure no source do html aqui do guj um iframe apontando para a página /ping_session.jsp.
(teve um tópico comentando sobre isso essa semana)

com isso, se o usuário fechar o browser, a sessão morrerá sozinha.

precisará ter um controle a mais para não existir duas sessões para o mesmo usuário…

Dê uma olhada:
http://www.cauirs.com.br/rafael/?p=119

Eu fazia mais ou menos isso, mas deixei a sessão em 30 minutos e removi o ping. Expliquei para o administrador do sistema que aquela é uma quantidade APROXIMADA de usuários online.

Se você precisa de uma quantidade EXATA, essa solução do ping é legal :slight_smile:
Ok, mas se o ping falhar, você vai perder a sessão? Imagina acontecer isso umas 10 vezes por dia, o usuário vai ficar louco.

O problema de deixar uma sessão longa é que você acaba desperdiçando recursos.
Imagine por exemplo, se você tem uma aplicação que o perfil padrão do usuário é: loga, faz uma operação de 10 segundos e sai (sem deslogar).
Considerando que entre um usuário por minuto terá em torno de 30 sessões penduradas por nada.

Na verdade, mesmo com esse tipo de solução a quantidade é aproximada. Dependendo do número de usuários que fazem login/logout por minuto na sua aplicação.

Como assim o “ping falhar” ? Se ocorrer falhas você descobre o motivo do problema e corrige.
Se um problema desse tipo acontecer 10 vezes por dia é por que tem algum erro, não uma “falha”…
(Considero falha um fator externo imprevisível: falta de energia, perda de pacotes, etc…)

De qualquer forma a solução sugerida com ping é apenas uma implementação para um conceito.
O conceito é: se não posso saber quando você morreu, me avise sempre que está vivo.
Acredito que há várias formas de se implementar isso de forma confiável.

[quote=RafaelViana]Dê uma olhada:
http://www.cauirs.com.br/rafael/?p=119[/quote]

Ok, vou dar uma olhada…

Pessoal resolvi com uma ferramenta muito boa da própria JBoss.

Segue mais informações: http://edgarsilva.com.br/2008/11/05/jopr-voce-fala-joper-que-novidade-e-essa-da-jboss/