Jsf - atributo dentro do manage bean

boa tarde.

tenho um atributo dentro do managed bean, só que este atributo está sendo compartilhado entre outras session’s. o managed bean está com o scopo de session, fiz um teste rodei a aplicação em 2 máquinas diferentes e coloquei para ser exibido o id da session, o id é diferente, então para cada session é criado um managed bean, o problema está sendo o atributo dele. esse atributo é um objeto.

configuração do faces-config:

    <managed-bean>
        <managed-bean-name>agenteControle</managed-bean-name>
        <managed-bean-class>br.com.winbooks.controle.Agente</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

manage bean:

public class Agente extends Generico {

    private String descricaoPesquisa;  // armazena o criterio de pesquisa.
    private String opcaoPesquisaSelecionada;  // armazena a condição de pesquisa.
    private boolean montaResultadoPesquisa;  // se true a tela renderiza a grade com o resultado da pesquisa.
    private Map opcoesPesquisa;  // armazena as opções de pesquisa.
    private wb.src.bean.Bagente agente;
    private wb.src.bean.Bendereco endereco;
    private wb.src.bean.Btelefone telefone;
    private wb.src.bean.BunidadeFederal unidadeFederal;
    private DataModel listaAgente;  // armazena o resultado da pesquisa.
    private List<SelectItem> tiposTelefone; // armazena uma lista com os tipos de telefone, preparada para ser usada dentro do combo.
    private List<SelectItem> tiposEndereco; // armazena uma lista com os tipos de endereço, preparada para ser usada dentro do combo.
    private List<SelectItem> unidadesFederais; // armazena uma lista com as unidades federais, preparada para ser usada dentro do combo.
    private String tipoEnderecoSelecionado; // armazena o tipo de endereço selecionado na tela.
    private String tipoTelefoneSelecionado; // armazena o tipo de telefone selecionado na tela.
    private String unidadeFederalSelecionada; // armazena a unidade federal selecionado na tela.

    private boolean exibeTelefone = true;
    
    public Agente() {
        this.opcoesPesquisa = new HashMap();

        this.opcoesPesquisa.put("Apelido", "Apelido");
        this.opcoesPesquisa.put("Nome Completo", "Nome Completo");
        this.opcaoPesquisaSelecionada = "Nome Completo";

    }

//  ////////////////////////////////////////////////////////////////////////////
    
    public String getMsgCampoObrigatorio(){
        return super.getMsgCampoObrigatorio();
    } 
    
//  ////////////////////////////////////////////////////////////////////////////

    public void setExibeTelefone(boolean exibeTelefone){
        this.exibeTelefone = exibeTelefone;
    }
    
    public boolean getExibeTelefone(){
        return this.exibeTelefone;
    }
    
//  ////////////////////////////////////////////////////////////////////////////

    /**
     * Abre a tela para incluir um novo registro.
     * @return
     * String com o status.
     */
    public String novo() {
        this.agente = wb.src.facade.Fagente.getBeanAgente();
        return "incluiNovoAgente";
    }

    /**
     * Apaga o registro atual.
     * @return
     * String com o status.
     */
    public String apaga() {

        wb.src.bean.Bagente beanAgente =
                (wb.src.bean.Bagente) listaAgente.getRowData();

        if (wb.src.facade.Fagente.apagaPk(beanAgente.getPk())) {
            return "sucessoApagaAgente";
        }

        return "falhaApagaAgente";
    }

    /**
     * Salva o registro.
     * @return
     * String com o status.
     */
    public String salva() {

        if (wb.src.facade.Fagente.salva(this.agente)) {
            return "sucessoSalvaAgente";
        }

        return "falhaSalvaAgente";
    }

    /**
     * Abre a tela para alterar o registro atual.
     * @return
     * String com o status.
     */
    public String altera() {

//        String xx = this.getSessao();
        
        wb.src.bean.Bagente beanAgente =
                (wb.src.bean.Bagente) listaAgente.getRowData();

        this.setAgente(wb.src.facade.Fagente.pesquisaPk(beanAgente.getPk()));
       
        return "alteraAgente";
    }

    /**
     * @return
     * Bean com as informações atuais do registro.
     */
    public wb.src.bean.Bagente getAgente() {
        return this.agente;
    }

    /**
     * @param agente
     */
    public void setAgente(wb.src.bean.Bagente agente) {
        this.agente = agente;
    }

    /**
     * @return
     * Bean com as informações do telefone.
     */
    public wb.src.bean.Btelefone getTelefone() {
        return this.telefone;
    }

    /**
     * @param beanTelefone
     */
    public void setTelefone(wb.src.bean.Btelefone beanTelefone) {
        this.telefone = beanTelefone;
    }

    /**
     * @return
     * Bean com as informações do endereço.
     */
    public wb.src.bean.Bendereco getEndereco() {
        return this.endereco;
    }

    /**
     * @param beanTelefone
     */
    public void setEndereco(wb.src.bean.Bendereco beanEndereco) {
        this.endereco = beanEndereco;
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * @return
     * Resultado da pesquisa.
     */
    public DataModel getResultadoPesquisa() {
        return this.listaAgente;
    }

    public void setResultadoPesquisa(DataModel lista){
        this.listaAgente = lista;
    }
    
//  ////////////////////////////////////////////////////////////////////////////
    public void setDescricaoPesquisa(String descricao) {
        this.descricaoPesquisa = descricao.trim();
    }

    public String getDescricaoPesquisa() {
        return this.descricaoPesquisa;
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setOpcaoPesquisaSelecionada(String opcao) {
        this.opcaoPesquisaSelecionada = opcao;
    }

    public String getOpcaoPesquisaSelecionada() {
        return this.opcaoPesquisaSelecionada;
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setTipoEnderecoSelecionado(String tipoEndereco) {
        this.tipoEnderecoSelecionado = tipoEndereco;
    }

    public String getTipoEnderecoSelecionado() {
        return this.tipoEnderecoSelecionado;
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setTipoTelefoneSelecionado(String tipoTelefone) {
        this.tipoTelefoneSelecionado = tipoTelefone;
    }

    public String getTipoTelefoneSelecionado() {
        return this.tipoTelefoneSelecionado;
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setUnidadeFederalSelecionada(String unidadeFederal) {
        this.unidadeFederalSelecionada = unidadeFederal;
    }

    public String getUnidadeFederalSelecionada() {
        return this.unidadeFederalSelecionada;
    }

    //  ////////////////////////////////////////////////////////////////////////////
    public String pesquisa() {
        this.setMontaResultadoPesquisa(true);
        wb.src.bean.Bagente beanAgente = wb.src.facade.Fagente.getBeanAgente();

        if (this.opcaoPesquisaSelecionada.equalsIgnoreCase("apelido")) {
            beanAgente.setApelido(this.descricaoPesquisa);
        }
        if (this.opcaoPesquisaSelecionada.equalsIgnoreCase("nome completo")) {
            beanAgente.setNome(this.descricaoPesquisa);
        }

        this.listaAgente = new ListDataModel(wb.src.facade.Fagente.listaPesquisaBean(beanAgente));

        return "sucessoPesquisaAgente";
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setMontaResultadoPesquisa(boolean montaResultado) {
        this.montaResultadoPesquisa = montaResultado;
    }

    public boolean getMontaResultadoPesquisa() {
        return this.montaResultadoPesquisa;
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setOpcoesPesquisa(Map opcoesPesquisa) {
        this.opcoesPesquisa = opcoesPesquisa;
    }

    public Map getOpcoesPesquisa() {
        return this.opcoesPesquisa;
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Prepara os tipos de endereço, para ser usados em um combo.
     * @return
     * Lista com varios items.
     */
    public List<SelectItem> getTiposEndereco() {

        if (this.tiposEndereco == null) {
            this.tiposEndereco = new ArrayList<SelectItem>();
            List resultado = this.getListaTipoEndereco();
            Iterator it = resultado.iterator();
            while (it.hasNext()) {
                wb.src.bean.BtipoEndereco beanTipoEndereco =
                        (wb.src.bean.BtipoEndereco) it.next();

                this.tiposEndereco.add(
                        new SelectItem(beanTipoEndereco.getPk(), beanTipoEndereco.getDescricao()));
            }
        }

        return this.tiposEndereco;
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Prepara os tipos de telefone, para ser usados em um combo.
     * @return
     * Lista com varios items.
     */
    public List<SelectItem> getTiposTelefone() {

        if (this.tiposTelefone == null) {
            this.tiposTelefone = new ArrayList<SelectItem>();
            List resultado = this.getListaTipoTelefone();
            Iterator it = resultado.iterator();
            while (it.hasNext()) {
                wb.src.bean.BtipoTelefone beanTipoTelefone =
                        (wb.src.bean.BtipoTelefone) it.next();

                this.tiposTelefone.add(
                        new SelectItem(beanTipoTelefone.getPk(), beanTipoTelefone.getDescricao()));
            }
        }

        return this.tiposTelefone;
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Prepara as unidades federais, para ser usados em um combo.
     * @return
     * Lista com varios items.
     */
    public List<SelectItem> getUnidadesFederais() {

        if (this.unidadesFederais == null) {
            this.unidadesFederais = new ArrayList<SelectItem>();
            List resultado = this.getListaUnidadeFederal();
            Iterator it = resultado.iterator();
            while (it.hasNext()) {
                wb.src.bean.BunidadeFederal beanUnidadeFederal =
                        (wb.src.bean.BunidadeFederal) it.next();

                this.unidadesFederais.add(
                        new SelectItem(beanUnidadeFederal.getPk(), beanUnidadeFederal.getSigla()));
            }
        }

        return this.unidadesFederais;
    }

    //  ////////////////////////////////////////////////////////////////////////////
    /**
     * Remove o telefone da lista. JSF.
     * @return
     */
    public String removeTelefone() {

        if (this.agente.removeTelefone(this.converteInteiro(
                this.getParamentro("idTelefoneApaga")))) {
            return "sucessoApagaAgente";
        }

        return "falhaApagaAgente";

    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Inclui um novo endereço na lista. JSF.
     * @return
     */
    public String novoEndereco() {
        this.endereco = wb.src.facade.Fagente.getBeanEndereco();
        return "incluiNovoAgenteEndereco";
    }
//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Edita o endereço atual. JSF.
     * @return
     */
    public String editaEndereco() {

        this.setEndereco(this.agente.buscaEndereco(
                this.converteInteiro(this.getParamentro("idEnderecoAltera"))));

        this.tipoEnderecoSelecionado   = "";
        if (this.endereco.getTipoEndereco() != null) {
            this.tipoEnderecoSelecionado = String.valueOf(this.endereco.getTipoEndereco().getPk());
        }

        this.unidadeFederalSelecionada = "";
        if (this.endereco.getUnidadeFederal() != null) {
            this.unidadeFederalSelecionada = String.valueOf(this.endereco.getUnidadeFederal().getPk());
        }
        
        return "sucessoManutencaoAgenteEndereco";

    }
//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Coloca ou altera o endereco na lista. JSF.
     * @return
     */
    public String manipulaEndereco() {

        this.trataTipoEnderecoSelecionado();
        this.trataUnidadeFederalSelecionada();

        if (this.endereco.getPk() == 0) {
            this.agente.setEndereco(this.endereco);
        }

        return "salvaManutencaoAgenteEndereco";
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Trata o tipo de endereco selecionado na tela.
     */
    private void trataTipoEnderecoSelecionado() {

        if (this.tiposEndereco != null) {
            if (this.endereco == null ||
                    this.converteInteiro(this.tipoEnderecoSelecionado) !=
                    this.endereco.getTipoEndereco().getPk()) {

                this.endereco.setTipoEndereco(this.getBuscaTipoEnderecoLista(
                        this.converteInteiro(this.tipoEnderecoSelecionado)));
            }
        }

    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Trata o tipo de endereco selecionado na tela.
     */
    private void trataUnidadeFederalSelecionada() {

        if (this.unidadesFederais != null) {
            if (this.unidadeFederal == null ||
                    this.converteInteiro(this.unidadeFederalSelecionada) !=
                    this.unidadeFederal.getPk()) {

                this.endereco.setUnidadeFederal(this.getBuscaUnidadeFederalLista(
                        this.converteInteiro(this.unidadeFederalSelecionada)));
            }
        }

    }

    //  ////////////////////////////////////////////////////////////////////////////
    /**
     * Inclui um novo telefone na lista. JSF.
     * @return
     */
    public String novoTelefone() {
        this.telefone = wb.src.facade.Fagente.getBeanTelefone();
        return "incluiNovoAgenteTelefone";
    }
//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Edita o telefone atual. JSF.
     * @return
     */
    public String editaTelefone() {

        this.setTelefone(this.agente.buscaTelefone(
                this.converteInteiro(this.getParamentro("idTelefoneAltera"))));

        this.tipoTelefoneSelecionado = String.valueOf(this.telefone.getTipoTelefone().getPk());

        return "sucessoManutencaoAgenteTelefone";

    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Coloca ou altera o telefone na lista. JSF.
     * @return
     */
    public String manipulaTelefone() {

        this.trataTipoTelefoneSelecionado();

        if (this.telefone.getPk() == 0) {
            this.agente.setTelefone(this.telefone);
        }

        return "salvaManutencaoAgenteTelefone";
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Trata o tipo de telefone selecionado na tela.
     */
    private void trataTipoTelefoneSelecionado() {

        if (this.tiposTelefone != null) {
            if (this.telefone == null ||
                    this.converteInteiro(this.tipoTelefoneSelecionado) !=
                    this.telefone.getPk()) {

                this.telefone.setTipoTelefone(this.getBuscaTipoTelefoneLista(
                        this.converteInteiro(this.tipoTelefoneSelecionado)));

            }

        }

    }
//  ////////////////////////////////////////////////////////////////////////////    
}

obrigado a ajuda.

Não entendi qual o problema

(Por favor, use as tags Code ao invés da quote para postar códigos)

se eu abro um browse e edito um registro, algum campo e movimento a tela através das telas de navegação do browser(voltar/avançar). se eu abrir um novo browser e rodar a aplicação e alterar o mesmo registro, eu vejo as informações que estão sendo alteradas no outro browser.

obrigado.

[quote=tiralo]se eu abro um browse e edito um registro, algum campo e movimento a tela através das telas de navegação do browser(voltar/avançar). se eu abrir um novo browser e rodar a aplicação e alterar o mesmo registro, eu vejo as informações que estão sendo alteradas no outro browser.

obrigado.[/quote]

Quer dizer, você abre um registro (seja lá quais variáveis desse bean que vc tá usando) pede para alterar, NÃO SALVA NO BANCO, e quando você recupera em outra sessão (outra máquina/outro browser) mostra o que NÃO ESTÁ SALVO NO BANCO, e sim o que está na tela de edição do primeiro browser?? É isso?

Vc dá new desses tal desse atributo aonde?

é isso que acontece.

já tentei iniciar o bean no construtor.

para mostrar os dados, utilizo um dataTable, e tenho um commandLink para abrir o registro para edição.

para pegar o valor do atributo utilizo:

        wb.src.bean.Bagente beanAgente =
                (wb.src.bean.Bagente) listaAgente.getRowData();

o projeto que estou fazendo é divido em 2, um para a camada de apresentação e outro para a camada de acesso ao banco de dados, onde estou utilizando hibernate.

quando eu fazia uma pesquisa, estava deixando a sessão do hibernate aberta, o problema estava ai.

obrigado a ajuda.

Nuusss!!!

=P

ninja!

David Copperfield