Bem galera, o problema é o seguinte …
Ate o momento de gerar e exibir o Relatório é tudo normal, porém depois que imprimo o garoto e vou fechar a janela ele simplesmente derruba o servidor, estranho, pesquisei a respeito e não encontrei nada …
Alguém já passou por isso ?
Abraços
Relatorio IReport derrubando TomCat ao ser fechado
7 Respostas
O problema está na linha 324 da classe que gera o relatório, ela está errada.
A sim … vlw !!! vou ler a linha !
@SuppressWarnings({ "rawtypes", "unchecked", "deprecation" })
public void gerarRelatorio() throws IOException, JRException, ClassNotFoundException, SQLException{
Connection conn = getConnection();
Statement stat = conn.createStatement();
String SQL = "SELECT "+
"lancamentos.`id` AS id, "+
"lancamentos.`dataemissao` AS dataemissao, "+
"lancamentos.`datavencimento` AS datavencimento, "+
"lancamentos.`observacao` AS observacao, "+
"lancamentos.`parcela` AS parcela, "+
"lancamentos.`valor` AS valor, "+
"usuario.`id` AS usuario_id, "+
"usuario.`nome` AS usuario_nome, "+
"cliente.`id` AS cliente_id, "+
"cliente.`nome` AS cliente_nome, "+
"cliente.`sobrenome` AS cliente_sobrenome "+
"FROM "+
"`usuario` usuario INNER JOIN `lancamentos` " +
"lancamentos ON usuario.`id` = lancamentos.`usuario` "+
"AND usuario.`id` = lancamentos.`usuario` "+
"INNER JOIN `cliente` cliente ON lancamentos.`cliente` = cliente.`id` "+
"WHERE lancamentos.impresso = 'N'";//
ResultSet rs = stat.executeQuery(SQL);
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
ServletContext context = (ServletContext) externalContext.getContext();
String arquivo = context.getRealPath("/relatorios_report/Boletos.jasper");
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
gerarRelatorioWeb(jrRS,null,arquivo);
}
@SuppressWarnings("rawtypes")
public void gerarRelatorioWeb(JRResultSetDataSource jrds, Map parametros, String arquivo)
throws IOException, JRException{
JasperPrint relatorio = JasperFillManager.fillReport(arquivo,null, jrds);
JasperViewer viewer = new JasperViewer(relatorio,true);
viewer.setVisible(true);
viewer.show();
}
O problema é que você tá passando true no segundo parâmetro do JasperViewer, que é “isExitOnClose”.
JasperViewer viewer = new JasperViewer(relatorio,true);
Pesquisou… sei… no proprio FAQ do JasperReports tem uma pergunta/resposta sobre isso… mas enfim:
JasperViewer gera uma interface Swing para apresentação do relatório, ou seja, ele só apresenta o relatório onde está instalado o servidor, se você acessasse sua aplicação por outra máquina você não visualizaria o relatório (a não ser que utilizasse uma applet).
Para aplicações web você deve apresentar o relatório utilizando o outputStream… tem várias receitas de bolo na internet, nada complexo.
hum … falta de atenção … resumidamente …
vlw
Por que você não converte em PDF e apresenta como PDF?
Se bem me lembro, essa linha aqui
JasperViewer viewer = new JasperViewer(relatorio,true);
Pode causar sérios problemas.
Na documentação dele você entende melhor por que podem ocorrer esses “sérios problemas”
public JasperViewer(JasperPrint jasperPrint,
boolean isExitOnClose)
Você usa o construtor que diz que ele deve “matar tudo” que existe no ambiente que ele roda…
O normal é usar
JasperViewer viewer = new JasperViewer(relatorio,false); //indicando que não deve destruir nada ao sair