Facade Problema com Listagem!

Pessoal ou eu estou muito cansado ou tem algum problema usar Facade !
erro:

An Error Occurred:
Error calling action method of component with id listauser:j_id72:j_id77

Caused by:
java.lang.IllegalArgumentException - id to load is required for loading
package br.gov.nutec.modelo;


import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Entity;
import javax.persistence.Id;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
@Entity
@Table(name="pessoa")
public class Pessoa implements Serializable {
private static long serialVersionUID = 2174678509151116408L;
public static long getSerialVersionUID() {
return serialVersionUID;
    }
public static void setSerialVersionUID(long aSerialVersionUID) {
serialVersionUID = aSerialVersionUID;
    }
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="pessoa_id")   // chave primaria
	private Long id;
	
        @NotNull
	@Length(min =5 , max = 40)
	@Column(name="nome")
	private String nome; 
        
        @Column(name="cpf") 
	private Long cpf;

        @Column(name="matricula")
	private String matricula;

/********* etc

pessoaMB.java

package br.gov.nutec.mb;

import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.gov.nutec.facade.PessoaFacade;
import br.gov.nutec.facade.PessoaFacadeImpl;
import br.gov.nutec.modelo.Pessoa;

public class PessoaMB implements Serializable {
	
	private static final long serialVersionUID = -333995781063775201L;

	private Pessoa pessoa = new Pessoa();

	private Long id;

	public PessoaMB(){
		System.out.println(" >>>>>>>>>>>>>>>>>>>> Contrutor do PESSOA_MB <<<<<<<<<<<<<<<<<<");
		
		if(this.pessoa == null){
			this.pessoa = new Pessoa(); 
		}
	}
	
	public String login() throws Exception{
        boolean logado = false;
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        HttpServletResponse rp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        HttpServletRequest rq = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        PessoaFacade pessoaService = new PessoaFacadeImpl();
		
        logado = pessoaService.autentica(this.pessoa.getEmail(), this.pessoa.getSenha());
           
        if(logado){
            session.setAttribute("user", logado);
            rp.sendRedirect(rq.getContextPath() + "/pages/index.jsf");
            return "success";
        }else{
            session.setAttribute("user", null);
            session.removeAttribute("user");
            rp.sendRedirect(rq.getContextPath() + "/pages/login/login.jsf");
            return "failure";
        }
    }
	public String logout() {
		HttpServletRequest rq = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		HttpServletResponse rp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
		FacesContext facesContext = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
		session.invalidate();
		try {
			rp.sendRedirect(rq.getContextPath() + "/pages/login/login.jsf");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "logoutOk";
	}
	public String save(){
		PessoaFacade pessoaService = new PessoaFacadeImpl();
		pessoaService.salva(this.pessoa);
		this.pessoa = new Pessoa(); 
		return "cadastraSucesso";
	}
	public String delete(){
		PessoaFacade pessoaService = new PessoaFacadeImpl();
		this.pessoa.setId(id);
		pessoaService.remove(this.pessoa);
		this.pessoa = new Pessoa(); 
		return "removeSucesso";
	}
	public String merge(){
		PessoaFacade pessoaService = new PessoaFacadeImpl();
		pessoaService.atualiza(this.pessoa);
		this.pessoa = new Pessoa(); 
		return "atualizaSucesso";
	}
	public String load(){
		PessoaFacade pessoaService = new PessoaFacadeImpl();
		this.pessoa = pessoaService.procura(this.id);
		return "pesquisaSucesso";
	}
        public String list(){
		PessoaFacade pessoaService = new PessoaFacadeImpl();
		this.pessoa = pessoaService.procura(this.id);
		return "pesquisaSucesso";
	}
	public String pesquisaByNome(){
		PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
		this.pessoa = pessoaService.procuraByNome(this.pessoa.getNome());
		return "pesquisaByNomeSucesso";
	}
        public String pesquisaByMatricula(){
		PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
		this.pessoa = pessoaService.procuraByMatricula(this.pessoa.getMatricula());
		return "pesquisaByMatriculaSucesso";
	}
         public List<Pessoa> getPessoasByMatricula(){
		PessoaFacade pessoaService = new PessoaFacadeImpl();
		List<Pessoa> lista = pessoaService.pesquisaPessoasByMatricula(this.pessoa.getMatricula());
		return lista;
	}
	public List<Pessoa> getPessoas(){
		PessoaFacade pessoaService = new PessoaFacadeImpl();		
		return pessoaService.lista();
	}
	public List<Pessoa> getPessoasByNome(){ 
		PessoaFacade pessoaService = new PessoaFacadeImpl();
		List<Pessoa> lista = pessoaService.pesquisaPessoasByNome(this.pessoa.getNome());
		return lista;
	}
      	public Pessoa getPessoa() {
		return pessoa;
	}
	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
}

pessoaFacadeImpl.java

package br.gov.nutec.facade;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import br.gov.nutec.dao.PessoaDAO;
import br.gov.nutec.modelo.Pessoa;

public class PessoaFacadeImpl implements PessoaFacade {

	private static final long serialVersionUID = 1818242808424001885L;
	
	private PessoaDAO pessoaDAO;
	private SessionFactory sf; 
	private	Session session;
	private Transaction tx;
	
    @Override
	public void salva(Pessoa p) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		this.pessoaDAO.save(p);
		
		tx.commit();
		session.close();
	}

    @Override
	public void atualiza(Pessoa p) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		this.pessoaDAO.merge(p);
		
		tx.commit();
		session.close();
	}

    @Override
	public Pessoa procura(Long id) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
				
		Pessoa p = this.pessoaDAO.load(id);
		
		tx.commit();
		session.close();
		
		return p;
	}

    @Override
	public void remove(Pessoa p) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		this.pessoaDAO.delete(p);
		
		tx.commit();
		session.close();
	}

    @Override
	public List<Pessoa> lista() {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
				
		List<Pessoa> lista = this.pessoaDAO.list();
		
		tx.commit();
		session.close();
		
		return lista;
	}
	
    @Override
	public List<Pessoa> pesquisaPessoasByNome(String nome) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		List<Pessoa> lista = this.pessoaDAO.pesquisaPessoas(nome);
		tx.commit();
		session.close();
		
		return lista;
	}
	
	public Pessoa procuraById(Long id){
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
				
		Pessoa p = this.pessoaDAO.pesquisaPessoaById(id);
		
		tx.commit();
		session.close();
		
		return p;
	}
	
	public Pessoa procuraByNome(String nome){
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		Pessoa p = this.pessoaDAO.pesquisaPessoaByNome(nome);
		
		tx.commit();
		session.close();
		
		return p; 
	}
	
	public Pessoa procuraByEmail(String email){
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

		Pessoa p = this.pessoaDAO.pesquisaPessoaByEmail(email);
		
		tx.commit();
		session.close();
		
		return p; 
	}
	
    @Override
	public boolean autentica(String email, String senha){
		boolean autenticado; 
		
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

		autenticado = this.pessoaDAO.verificaEmailSenha(email, senha);
		
		tx.commit();
		session.close();
		
		return autenticado; 
	}
    //** lista pessoa por matrícula
    @Override
    public List<Pessoa> pesquisaPessoasByMatricula(String matricula) {
       sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		Pessoa p = this.pessoaDAO.pesquisaPessoaByMatricula(matricula);
		tx.commit();
		session.close();
		return (List<Pessoa>) p;
    }
    
    // setado por PessoaMB
    public Pessoa procuraByMatricula(String matricula) {
          sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		Pessoa p = this.pessoaDAO.pesquisaPessoaByMatricula(matricula);
		tx.commit();
		session.close();
		return (Pessoa) (List<Pessoa>) p;
    }

    @Override
    public void List(Pessoa matricula) {
         sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		Pessoa p = this.pessoaDAO.pesquisaPessoaByMatricula(matricula);
		tx.commit();
		session.close();
                return ;
		//* nao tem retorno
    }

    
}

pessoaDAO.java

package br.gov.nutec.dao;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import br.gov.nutec.modelo.Pessoa;
public class PessoaDAO extends DAO<Pessoa> {
	private Logger logger = Logger.getLogger(PessoaDAO.class);
	public PessoaDAO(Session session, Class<?> classe) {
		super(session, classe);
	}
	public Pessoa pesquisaPessoaById(Long idPessoa) {
		logger.info("pesquisaPessoaById : " + idPessoa);
		return (Pessoa) session.load(Pessoa.class, idPessoa);
	}
	public Pessoa pesquisaPessoaByNome(String nome) {
		logger.info("pesquisaPessoaByNome : " + nome);
		Criteria c = session.createCriteria(Pessoa.class);
		c.add(Restrictions.ilike("nome", "%" + nome + "%"));
		return (Pessoa)c.uniqueResult();
	}
        //**pesquisa por matricula */
        @SuppressWarnings("unchecked")
        public Pessoa pesquisaPessoaByMatricula(String matricula) {
		logger.info("pesquisaPessoaByMatricula : " + matricula);
		Criteria c = session.createCriteria(Pessoa.class);
		c.add(Restrictions.ilike("matricula", "%" + matricula + "%"));
		return (Pessoa)c.uniqueResult();
	}
        @SuppressWarnings("unchecked")
	public Pessoa pesquisaPessoaByMatricula(Pessoa matricula) {
                logger.info("pesquisaPessoaByMatricula : " + matricula);
		Criteria c = session.createCriteria(Pessoa.class);
		c.add(Restrictions.ilike("matricula", "%" + matricula + "%"));
		return (Pessoa)c.uniqueResult();
    }
       /** fim */
	public Pessoa pesquisaPessoaByEmail(String email) {
		logger.info("pesquisaPessoaByEmail : " + email);
		Criteria c = session.createCriteria(Pessoa.class);
		c.add(Restrictions.ilike("email", email + "%"));
                c.addOrder(Order.desc("matricula")); // ordem descentente
		return (Pessoa)c.uniqueResult();
	}
	@SuppressWarnings("unchecked")
	public List<Pessoa> pesquisaPessoas(String nome){
		Criteria c = session.createCriteria(Pessoa.class);
		c.add(Restrictions.ilike("nome", "%" + nome + "%"));
		c.addOrder(Order.asc("nome"));
		return c.list();
	}
	public boolean verificaEmailSenha(String email, String senha){
		boolean valid = false;
		System.out.println("DAO metodo isValidLoginAndPassword...");
		System.out.println("DAO session.isOpen() >>> " + session.isOpen());
		Query query = session.createQuery("from Pessoa p where p.email = :em and p.senha = :sen");
		query.setString("em", email);
		query.setString("sen", senha);
		Pessoa pessoa = (Pessoa) query.uniqueResult();
		if(pessoa == null){
			valid = true;
		}
		System.out.println("DAO Pessoa >>> " + pessoa);
		return valid; 
	}
	public Pessoa buscaPessoa(Long id){
		Query q = session.createQuery("select p from " + Pessoa.class.getName() + " as p where p.id like :id");
		q.setParameter("id", id);
		return (Pessoa)q.uniqueResult();
	}
}

o xhtml

 <h:panelGrid columns="2" id="inputs">
                                        <h:outputLabel for="nomeLabel" value="Digite o Nome: " />
                                        <h:inputText id="nomeInput" value="#{pessoaMB.pessoa.nome}" style=" width : 250px;"  styleClass="inputPesquisa">
                                            <a4j:commandButton value="Pesquisar" action="#{pessoaMB.list}" reRender="pessoas">
                                            </a4j:commandButton>
                                        </h:inputText>
                                    </h:panelGrid>