[Resolvido] JSF recuperando o mesmo Session Managed Bean

Boa tarde, GUJ!

Em minha aplicação, tenho um UsuarioBean com escopo de sessão onde ele trata do Usuario. Estou tentando recuperar o usuário daquela sessão em específico utilizando:

		UsuarioBean ubean = (UsuarioBean ) FacesContext.getCurrentInstance().
				getExternalContext().getSessionMap().get("usuarioBean");

Porém ele me retorno somente o último valor. Por exemplo:

  • Acessei o sistema através do Chrome com o nome Marcelo
  • Acessei o sistema através do Firefox com o nome João

Se eu acionar um botão para me exibir o usuario daquela sessão, ele me dirá o nome “João” só porquê foi o último a entrar na sessão. Vice-versa também ocorre o mesmo problema.

Estou fazendo da seguinte forma:

UsuarioBean

package controller;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import observer.Observador;

import model.Usuario;

@ManagedBean
@SessionScoped
public class UsuarioBean implements Observador{
	
	private Usuario usuario;
	
	public UsuarioBean(){
		this.usuario = new Usuario();
	}	
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}


	@Override
	public void atualizarMensagem(String mensagem) {
		System.out.println( getUsuario().getApelido() + " : " + mensagem);
		
	}

	@Override
	public String toString(){
		return getUsuario().getApelido();
	}
	
	@Override
	public boolean equals(Object o){
		return ((UsuarioBean) o ).getUsuario() == getUsuario();
	}
	
}

Usuario

package model;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import controller.UsuarioBean;

import observer.Observador;

@Entity
public class Usuario implements Observador {
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column
	private int id;
	
	@Column
	private String apelido;
	
	@Column(name = "data_entrada")
	private Date dataHoraEntrada;
	
	@Column(name = "data_saida")
	private Date dataHoraSaida;
	
	public Usuario(){
		this.dataHoraEntrada	= new Date();
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getApelido() {
		return apelido;
	}
	public void setApelido(String apelido) {
		this.apelido = apelido;
	}
	public Date getDataHoraEntrada() {
		return dataHoraEntrada;
	}
	public void setDataHoraEntrada(Date dataHoraEntrada) {
		this.dataHoraEntrada = dataHoraEntrada;
	}
	public Date getDataHoraSaida() {
		return dataHoraSaida;
	}
	public void setDataHoraSaida(Date dataHoraSaida) {
		this.dataHoraSaida = dataHoraSaida;
	}

	@Override
	public void atualizarMensagem(String mensagem) {
		System.out.println(mensagem);
		
	}

	@Override
	public boolean equals(Object o){
		return ((Usuario) o ).getApelido() == getApelido();
	}
	
}

O que diabos estou fazendo de errado? Obrigado pela atenção

=]

Obrigado pela ajuda, mas olhei o tópico novamente pois parte do meu trabalho estudei através dele. O problema não é acessar o objeto em questão, é saber o porquê dele não pegar o valor correto.

Obrigado mesmo assim, abraço.

Cara, não entendi, está aparecendo o “João” nos dois browsers?? Como isso, se está como @SessionScoped??
Até onde sei, isso só acontece quando o MB é ApplicationScoped…

Sim, era isso mesmo. Não sei como, acho que resolvi. Fiz um clean project no eclipse, reiniciei a aplicação e acho que funcionou.

Obrigado pela atenção.