Erro ao usar Jasper Report em aplicação web

Tenho uma aplicação web que uso com JSF e estou tentando incorporar os Relatórios do jasper nele, tenho uma pagina xhtml que possue um simples botao que gera o relatorio, ao clicar nele, ele exibe a jasperViewer corretamente com o relatorio, porém quando clico no ‘X’ do jasperViewer para fechar o relatorio, ele derruba o tomcat e exibe o seguinte erro

GRAVE: The web application [/Curriculo] created a ThreadLocal with key of type [net.sf.jasperreports.engine.util.JRFontUtil$1] (value [net.sf.jasperreports.engine.util.JRFontUtil$1@1788424]) and a value of type [java.util.HashSet] (value [[]]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak. Exception while removing reference: java.lang.InterruptedException java.lang.InterruptedException
E este é o codigo que uso para gerar o relatorio

[code]
public void gerarRelatorio() throws Exception {
//Connection con = HibernateUtil.getSession().connection();
Session sessao = HibernateUtil.getSession();
Connection con = sessao.connection();
//Connection con = new ConexaoMySQL().getConnection();
try {

        HashMap parametros = new HashMap();            
        JasperPrint jp = JasperFillManager.fillReport("C:\\jasper4.1.3.jasper", parametros, con);            
        JasperViewer jrv = new JasperViewer(jp);
        jrv.setVisible(true);
    } catch (Exception e) {
        e.printStackTrace();            
    } finally {
        sessao.close();
    }
}[/code]

É desktop … ? Eu tenho uma aplicação para web aki… se quiser… :smiley:

apesar de eu usar isso

JasperViewer jrv = new JasperViewer(jp); jrv.setVisible(true); Meu aplicativo é um aplicativo web

no Servlet, você coloca assim:


package control;   
  
import java.io.IOException;   
import java.io.OutputStream;   
  
import javax.servlet.ServletException;   
import javax.servlet.http.HttpServlet;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
import net.sf.jasperreports.engine.JRResultSetDataSource;   
import net.sf.jasperreports.engine.JasperCompileManager;   
import net.sf.jasperreports.engine.JasperExportManager;   
import net.sf.jasperreports.engine.JasperFillManager;   
import net.sf.jasperreports.engine.JasperPrint;   
import net.sf.jasperreports.engine.JasperReport;   
import net.sf.jasperreports.engine.design.JasperDesign;   
import net.sf.jasperreports.engine.xml.JRXmlLoader;   
  
import persistence.ProdutoDao;   
  
public class Relatorio extends HttpServlet {   
    private static final long serialVersionUID = 1L;   
  
    protected void doGet(HttpServletRequest request,   
            HttpServletResponse response) throws ServletException, IOException {   
        execute(request, response);   
    }   
  
    protected void doPost(HttpServletRequest request,   
            HttpServletResponse response) throws ServletException, IOException {   
        execute(request, response);   
    }   
  
  
    protected void execute(HttpServletRequest request,   
            HttpServletResponse response) throws ServletException, IOException {   
           
        ProdutoDao d = new ProdutoDao();   
           
        try{   
            d.open();   
               
    //JasperReports -> iReport   
           
    //Passo o ResultSet do JDBC para o Relatorio   
        JRResultSetDataSource ds = new JRResultSetDataSource(d.findAll());   
               
    //Arquivo do relatório   
        JasperDesign jd = JRXmlLoader.load("c:\\aula\\relatorio.jrxml");   
               
    //Compilar o relatório   
        JasperReport jr = JasperCompileManager.compileReport(jd);   
               
    //Mescar os dados do JDBC ao documento do Relatório   
        JasperPrint jp = JasperFillManager.fillReport(jr, null, ds);   
               
            //Download de PDF   
        response.reset();   
        response.setContentType("application/pdf");   
               
        OutputStream out = response.getOutputStream();   
        JasperExportManager.exportReportToPdfStream(jp, out);   
        out.flush();   
        out.close();               
        }   
        catch(Exception e){   
            e.printStackTrace();   
        }   
        finally{   
            d.close();   
        }   
       
    }   
       
  
  
}  

No seu DAO, utilizei ProdutoDao:


public ResultSet findAll() throws Exception{   
           
    stmt = con.prepareStatement("select * from produto");   
    rs = stmt.executeQuery();   
           
    return rs; //Retorna o proprio ResultSet com os dados do JDBC   
}  

Ai você baixa o !Report… e cria um relatório com ele… com tutoriais vc consegue fácil !!!

E na sua JSP, você coloca uma action do formulário ou um link mesmo, chamando seu servlet…

Assim:

<form method="post" action="Relatorio"> 

<input type="submit" value="Gerar PDF"/> 
</form> 

vlw

Qualquer coisa to aew…