Relatorio IReport derrubando TomCat ao ser fechado

7 respostas
Diego_Adriano

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

7 Respostas

drsmachado

O problema está na linha 324 da classe que gera o relatório, ela está errada.

Diego_Adriano

A sim … vlw !!! vou ler a linha !

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

O problema é que você tá passando true no segundo parâmetro do JasperViewer, que é “isExitOnClose”.

JasperViewer viewer = new JasperViewer(relatorio,true);
Rendrys

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.

Diego_Adriano

hum … falta de atenção … resumidamente …
vlw

drsmachado

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
Criado 6 de julho de 2012
Ultima resposta 6 de jul. de 2012
Respostas 7
Participantes 4