Erro ao usar Jasper Report em aplicação web

3 respostas
F

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
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();
        }
    }

3 Respostas

R

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

F

apesar de eu usar isso

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

R

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…

Criado 23 de janeiro de 2012
Ultima resposta 23 de jan. de 2012
Respostas 3
Participantes 2