HttpSessionListener: Usuários Logados no Site

Olá ! Estou a muito tempo procurando uma solução a respeito do assunto e não encontro. É o seguinte: Estou construindo um fórum. Gostaria de listar os Usuários que estão logados no sistema.
Ex:
Rômulo - Online
Patrícia - Ofline

Nas minhas pesquisas, conclui que tenho que implementar uma interface que me dá acesso aos métodos sessionCreated e sessionDestroyed. Consegui, pelo menos, criar minhas classe, mas não sei onde devo instanciar essa classe para que a mesma funcione !

Segue meu código:

[code]package pckUsuarioLogados;

import javax.servlet.;
import javax.servlet.http.
;

/**
*

  • @author Rômulo Barros
    */
    public class UsuariosLogados implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent e){
    // Como devo proceder para armazenar o usuário neste momento??
    }

    public void sessionDestroyed(HttpSessionEvent e){
    // Como devo proceder para apagar o usuário neste momento???
    }

}[/code]

Tenho que armazenar os logins dos usuários que se logaram no sistema. Esse local de armazenamento deverá estar disponível para todos os usuário. Deu pra entender?

A minha sugestão é que vc faça uma classe tipo : “CentralDeUsuarios”, que seja singleton, e a cada sessão destruida vc remove da central, e no momento do login vc adiciona.
Ex:

     // seu session listener
     public void sessionCreated(HttpSessionEvent e){
     }
     
     public void sessionDestroyed(HttpSessionEvent e){
        // Como devo proceder para apagar o usuário neste momento????
        Usuario u = (Usuario) e.getSession().getAttribute("usuariologado");
        if (u != null) {
             CentralDeUsuarios central = CentralDeUsuarios .getInstance();

              central.adicionar( u );
        }
     }

Sua classe de central de usuarios:

       // ela deve ser singleton.
      private Map usuarios = new HashMap();
      public void add(Usuario u) {
          usuarios.put(u.getLogin(), u);
      }
      public void remove(Usuario u) {
          usuarios.remove(u.getLogin());
      }
     public void obterTodosUsuarios() {
          return usuarios.values();
      }

[]'s

Certo. Mas… qualquer usuário do site poderá ver quem tá online com isso??

O quê é singleton?
Onde devo instanciar essa classe??? ou é automático?? assim que a sessão é criado o método é disparado???

Sim

http://www.guj.com.br/java.tutorial.artigo.137.1.guj

[quote=Undeclared Identifier]
Onde devo instanciar essa classe??? ou é automático?? assim que a sessão é criado o método é disparado???[/quote]

O SessionListener vc ñ instancia. Vc coloca no web-xml a declaração dele e o container o instanciará e chamará os métodos quando a sessão for criada/destruida.
Cuidado que o lance da sessão ser criada ñ significa que o usuário está logado.
Por isso que vc deverá adicionar o usuário na sua “Central de Usuários” no momento que o usuário logar.
Já a Central de Usuários, se ela for Singleton o instanciamento será “transparente”…

Valeu, cara !

Essa parada de Desig Patterns é maneira ! :lol:

As vezes eu me perdia muito instanciando o que não devia e criando novos repositório… Vai ajudar bastante ! Obrigado !

Em relação a minha dúvida, inicialmente irei codificar uma página de teste para exibir um “Contador de Acessos” ! Após isso, postarei aqui, neste mesmo tópico, um pedido de ajuda para configurar o arquivo WEB-XML !

Não posso agora pq estou no trabalho, mas sempre levo esses novos conceitos para estudar em casa ( novo conceito pra mim rs rs )

Valeu, Brow ! 8)

tenho a msm dificuldade de controlar os usuários…

to tetando de várias formas… preciso fazer um contador… saber qnd alguem entrou e saiu… limitar numero de pessoas conectadas…

se conseguir fazer posta ai… eu to tentando aki tbm! qlq vitoria aki aviso!

vlw galera!

Implementei e deu certo, mas estou com problemas quando o usuário não clica no botão sair do sistema e então fecha o browser ou fecha a aba. O ideal é eu invalidar a sessão quando ele fizer isso. Li que tem como fazer com javascript, mas alguem tem algum exemplo, não consegui ainda.