Tenho uma aplicação java web, onde ao efetuar uma venda, ou conclui-la, o sistema imprime um comprovante de venda com os dados desta venda efetuada, tudo ocorre perfeitamente enquanto está rodando no servidor de desenvolvimento, imprimindo na impressora padrão que estiver instalada, td bem. O problema é que quando implemento esta aplicação no SERVIDOR DE PRODUÇÃO, a impressão não ocorre, estou utilizando o Glassfih como servidor de aplicação, alguém poderia me auxiliar a verificação deste erro, estarei postando o trecho do código.
public void imprimeVenda(Vendas venda) throws JRException, IOException, SQLException {
try {
parameters.put("numero", venda.getVendasPK().getNumNota());
parameters.put("cliente", venda.getCliente().getId());
HttpSession session2 = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
String reportPath = session2.getServletContext().getRealPath("/Relatorio/venda.jasper"); // endereço do Relatório
JasperPrint print = JasperFillManager.fillReport(reportPath, parameters, cn);
System.out.println(print);
JasperPrintManager.printPage(print, 0, false);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Comprovante de Venda ", "Impresso com Sucesso"));
} catch (JRException ex) {
System.out.println(ex.getMessage());
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao imprimir o comprovante", " Faça Manualmente"));
}
}
O único problema é esse: funciona perfeitamente no servidor de Desenvolvimento, porém no servidor de Produção, não ocorre a impressão, tenho outros relatorios que são gerados em PDF e estes funcionam perfeitamente nos DOIS servidores (então o problema parece não estar na conexão do banco, mas parece que pode ser no JASPERPRINT), mas o relatório que deveria ser impresso diretamente (ou seja, sem ser gerado o PDF), só funciona no servidor de desenvolvimento.
Até onde sei, o JasperPrintManager é uma aplicação cliente e que possui interface gráfica de usuário.
Isso não vai rodar no servidor de produção pois geralmente servidores rodam em ambiente headless, isto é, sem suporte à interface gráfica.
Ele funciona no seu ambiente de desenvolvimento pois lá você tem um ambiente desktop com interface gráfica de usuário.
E mesmo que o JasperPrintManager funcionasse no servidor de produção, ele iria abrir uma janela no servidor, não na máquina cliente que solicitou a impressão.