Problema com sessao jsf

Ola pessoal estou desenvolvendo uma aplicação pra faculdade. Estou usando jsf + riface + jasper.
O consegui fazer um relatório em japer mas estou com problema na minha sessão, quando eu gero vários relatórios e sessão trava, eu ja tentei limpar a sessão mas sem sucesso.
segue o código do minha aplicação

public String geraRelatorio() throws ClassNotFoundException, SQLException {
    RelCursosDao relCursosDao = new RelCursosDao();
    String jasper = getDiretorioReal("/report/relCursos.jasper");
    List<CursosTo> listCursos = null;

    try {

        
            listCursos = relCursosDao.consultar();
        
        JRDataSource jrds = new JRBeanCollectionDataSource(listCursos);
        JasperPrint print = JasperFillManager.fillReport(jasper, null, jrds);
        setSaida(preenchePdf(print));            
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "exibeRelCursos";
}



public String getSaida() {
    return saida;
}

public void setSaida(String saida) {
    this.saida = saida;
}

public String getDiretorioReal(String diretorio) {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
return session.getServletContext().getRealPath(diretorio);
}

public String getContextPath() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    return session.getServletContext().getContextPath();
}

public String preenchePdf(JasperPrint print) throws JRException, JRException {
    String saida = null;
    saida = getDiretorioReal("/pdf/relatorio.pdf");
    JasperExportManager.exportReportToPdfFile(print, saida);
    saida = getContextPath() + "/pdf/relatorio.pdf";
    return saida;
}

esse metodo eu uso qdo vou gerar outro relatorio

public void limpaSessao() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    session.invalidate();
}    

mas sempre trava, alguem ja passou por isso???
Oque eu to fazendo errado?

tira esse session.invalidate() talvez teja travando por causa disso, escreva o conteúdo pro usuário depois remova o atributo da sessão usando o session.removeAtribute(“nome do atributo(relatorio na sessao)”) se continuar travando tem que dar uma revizada ou uma debugada dai.

O problema esta no session.invalidate(); voce esta matando a sessao do usuario, a aplicacao para de funcionar na hora.

tava msm. Valeu pessoal eu achei um jeito de limpar sem matar mas o povo fala q e gambiarra fiz assim
public void limpaSessao() {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
Enumeration en = session.getAttributeNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
session.removeAttribute(name);
}
}