IReport - Chamar relatório da aplicação

Criei um relatório no Ireport. Ele tem um sub-relat e este sub outro sub!
Testei no IReport e funcionou direitinho. Como eu faço para executar esse relat da aplicação ? Fiz isto abaixo mas não funcionou? Tenho q abrir conexão jdbc? Enviar sql?

   Map parameters = new HashMap();
   JasperDesign jasperDesign = JRXmlLoader.load("WEB-INF//reports//RelatorioConferenciaDigitacao.jrxml");
   JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);        
   JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters);
   JasperViewer.viewReport(jasperPrint);

Obrigado

Criei uma classe que você pode utilizar, desde que mantenha os créditos…

/*
 * @(#)Relatorio.java   1.0 28/04/2006
 *
 * Copyright 2006 Marcos Vinícius Soares. Todos os direitos reservados. 
 * mvsoares@estadao.com.br
 *
 */

import java.sql.*;
import java.net.URL;
import java.util.HashMap;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.*;
import conexao.Conexao;

/**
 * Relatorio.java<br>
 *
 * <p>A classe Relatorio deve ser utilizada para emissão de relatórios. Após a 
 * criação de algum relatório é possível exibí-lo na tela, exportá-lo para um 
 * arquivo pdf/html ou enviá-lo direto para impressão.</p>
 *
 * <p>A classe manipula relatórios desenvolvidos utilizando-se a ferramenta
 * iReport e utiliza a ferramenta JasperReports para emissão dos relatórios</p> 
 *
 * @author  Marcos Vinícius Soares
 */
public class Relatorio {
        
    /** Representa o relatório gerado. */
    private JasperPrint jasperPrint_;
    
    /**
     * Cria um novo Relatorio.
     *
     * @param  conn  Conexão com o banco de dados.
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     */
    public Relatorio(Conexao conn, HashMap parameters, URL localRelatorio) throws JRException{
        
        try {
            
            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport)JRLoader.loadObject(localRelatorio);
            
            // JasperPrint representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, conn.getConnection());

	} catch (JRException e) { throw e; }
    }
    
    
    
    /**
     * Cria um novo Relatorio.
     *
     * @param  conn  Conexão com o banco de dados.
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     */
    public Relatorio(Conexao conn, HashMap parameters, String localRelatorio) throws JRException{
        
        try {

            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport)JRLoader.loadObject(localRelatorio);
            
            // JasperPrint representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, conn.getConnection());

	} catch (JRException e) { throw e; }
    }
    
    
    
    /**
     * Cria um novo Relatorio.
     *
     * @param  conn  Conexão com o banco de dados.
     * @param  sql  Expressão SQL (SELECT...) a ser utilizada para preenchimento do relatório
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     * @throws  SQLException  Caso exista alguma divergência ou problema com 
     * a Expressão SQL passada como parâmetro, uma exceção é gerada.
     */
    public Relatorio(Conexao conn, String sql,
            HashMap parameters, URL localRelatorio) throws SQLException, JRException {
        
        try {
            
            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport)JRLoader.loadObject(localRelatorio);
            
            // Resultado da consulta
            ResultSet rs = conn.executeQuery(sql);
            
            // JRResultSetDataSource é uma implementaçao de JRDataSource, o qual é requerido
            // como parametro para preencher o relatório criado.
            // Ele armazena o dados do ResultSet
            JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
            
            // JasperPrint representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o
            // relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, jrRS);
            
            rs.close();
            
        } 
        catch (SQLException e) { throw e; } 
        catch (JRException e) { throw e; }        
    }
    
    
    
    /**
     * Cria um novo Relatorio.
     *
     * @param  conn  Conexão com o banco de dados.
     * @param  sql  Expressão SQL (SELECT...) a ser utilizada para preenchimento do relatório
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     * @throws  SQLException  Caso exista alguma divergência ou problema com 
     * a Expressão SQL passada como parâmetro, uma exceção é gerada.
     */
    public Relatorio(Conexao conn, String sql,
            HashMap parameters, String localRelatorio) throws SQLException, JRException {
        
        try {
            
            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport)JRLoader.loadObject(localRelatorio);
            
            // Resultado da consulta
            ResultSet rs = conn.executeQuery(sql);
            
            // JRResultSetDataSource é uma implementaçao de JRDataSource, o qual é requerido
            // como parametro para preencher o relatório criado.
            // Ele armazena o dados do ResultSet
            JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
            
            // JasperPrint representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o
            // relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, jrRS);
            
            rs.close();
            
        } 
        catch (SQLException e) { throw e; } 
        catch (JRException e) { throw e; }        
    }
    
    
    
    /**
     * Cria um novo Relatorio.
     *
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     */
    public Relatorio(HashMap parameters, URL localRelatorio) throws JRException {
        
        try {
            
            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport) JRLoader.loadObject(localRelatorio);
            
            // JREmptyDataSource é uma implementaçao de JRDataSource, o qual é requerido
            // como parametro para preencher o relatório criado.
            // Ele armazena o dados do ResultSet, que, neste caso, é vazio
            JREmptyDataSource jrEDS = new JREmptyDataSource();
            
            // Jasper Print representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o
            // relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, jrEDS);
            
        } catch (JRException e) { throw e; }        
    }
    
    
    
    /**
     * Cria um novo Relatorio
     *
     * @param  parameters  Parâmetros a serem exibidos no relatório.
     * @param  localRelatorio  Localização do relatório.
     * @throws  JRException  Caso o relatório não seja encontrado ou haja
     * algum problema com ele, uma exceção é gerada.
     */
    public Relatorio(HashMap parameters, String localRelatorio) throws JRException {
        
        try {
            
            // O objeto JasperReport representa o objeto JasperDesign (arquivo .jrxml) compilado.
            // Ou seja, o arquivo .jasper
            JasperReport jr = (JasperReport) JRLoader.loadObject(localRelatorio);
            
            // JREmptyDataSource é uma implementaçao de JRDataSource, o qual é requerido
            // como parametro para preencher o relatório criado.
            // Ele armazena o dados do ResultSet, que, neste caso, é vazio
            JREmptyDataSource jrEDS = new JREmptyDataSource();
            
            // Jasper Print representa o relatório gerado.
            // É criado um JasperPrint a partir de um JasperReport, contendo o
            // relatório preenchido.
            this.jasperPrint_ = JasperFillManager.fillReport(jr, parameters, jrEDS);
            
        } catch (JRException e) { throw e; }        
    }
    
    
    
    /**
     * Exibe o relatório na tela.
     */
    public void exibirRelatorio() {
        // emite o relatório na tela
        // false indica que a aplicação não será finalizada caso o relatório seja fechado
        JasperViewer.viewReport(this.jasperPrint_, false);
    }
    
    
    
    /**
     * Grava o relatório em um arquivo de formato pdf.
     *
     * @param  caminhoDestino  Caminho onde o arquivo será gravado.
     */
    public void exportaParaPdf(String caminhoDestino) throws JRException {
        
        try {
            // Gera o arquivo PDF
            JasperExportManager.exportReportToPdfFile(this.jasperPrint_, caminhoDestino);
        } catch (JRException e) { throw e; }
        
    }
    
    
    
    /**
     * Grava o relatório em um arquivo de formato html.
     *
     * @param  caminhoDestino  Caminho onde o arquivo será gravado.
     */
    public void exportaParaHtml(String caminhoDestino) throws JRException {
        
        try {
            // Gera o arquivo PDF
            JasperExportManager.exportReportToHtmlFile(this.jasperPrint_, caminhoDestino);
        } catch (JRException e) { throw e; }
        
    }
    
    
    
    /**
     * Envia o relatório para impressão, exibindo uma caixa de dialogo de impressão ou não.
     * 
     * @param  exibeCaixaDialogo  Boolean indicando se será exibida uma caixa de diálogo ou não.
     */
    public void imprimir(boolean exibeCaixaDialogo) throws JRException {
        
        try {
            // Imprime o relatório
            // o segundo parâmetro indica se existirá uma caixa de dialogo antes ou nao
            JasperPrintManager.printReport(this.jasperPrint_, exibeCaixaDialogo);
        } catch (JRException e) { throw e; }
        
    }
    
    
    
}

Primeiro vc deve criar um relatório atraves de um dos metodos disponiveis, depois basta chamar algum metodo…

Esse objeto conexao representa uma conexao com o banco de dados, e o método getConn retorna o objeto Connection associado a ele. No caso, vc deve implementar o seu, pois não sei qual bd vc está utilizando.

No caso de relatórios WEB, vc deve gravar o relatório no servidor e redirecionar o usuário para lah.

Utilize algum dos métodos da classe acima para gerar um relatorio (html ou pdf), e redirecione o usuário para o arquivo (página) criada.

Tá dando um erro em

JasperReport jr =  (JasperReport) JRLoader.loadObject(baseDir + File.separator + "WEB-INF//reports//RelatorioConferenciaDigitacao.jrxml");

Tá apontando pro lugar certo, o erro é:

java.io.StreamCorruptedException: invalid stream header

Ops, corrigido, era o arquivo .jasper e não .jrxml.

Valeus!

Desculpa ta entrando, mas surgiu uma pequena duvida de desempenho:

Pensando por um lado de desempenho seria melhor gerar o arquivo e direcionar o usuario, ou simplismnte gera o arquivo e mostra-lo ao usuario, sem a necessidade de salvá-lo em disco no servidor.Pois se tivesse que salvar todos os relatorios, ficariam mais dificeis de controlar não?

Cordialmente

import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.JasperViewer; import net.sf.jasperreports.engine.*; import conexao.Conexao;
esses import estão dando erro, e tem uns que é so no net
o que pode ser?
pede pra cirar class JasperPrint
Conexao
JasperReport
JasperFillManager

e awe vai

[color=red]Estou usando[/color][color=blue] NetBeans[/color]