Pessoal, tô com o seguinte problema: Fiz um relatorio no iReport 4.7 com acesso ao banco de dados e tudo mais. Dentro da ferramenta eu consigo visualizar o relatorio com os dados, mas quando chamo o relatório pela aplicação java não traz nada. Alguém poderia me dizer o que fiz de errado? Eu uso hibernate com JPA, JSF 2.0, Primefaces. Já tentei de outra forma mas o relatório abre em branco. Segue meu codigo abaixo:
Pessoal, mesmo quando a query é inserida na ferramenta ireport, eu tb preciso fazer a mesma query no java ou quando o relatorio vem compilado já traz a query embutida? Desculpe minha ignorancia, mas antigamente eu gerava a query no DAO e passava para o ManagedBean.
lele_vader, já tentei sem ele mas não deu em nada. Como a query fica embutida no ireport, usei um datasource vazio. Mesmo retirando essa chamada o relatório PDF é criado sem dados, só com o cabeçalho. Já vi vários posts onde a query é feita no java, numa classe DAO, mas no meu caso a query fica somente no ireport.
Galera, alguém pode me dar uma ajuda de como pegar a conexão com o banco quando se usa JPA?
Meu Persistence.xml tá assim:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="primary" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- If you are running in a production environment, add a managed
data source, the example data source is just for development and testing! -->
<jta-data-source>java:jboss/datasources/testeDB2</jta-data-source>
<properties>
<!-- Properties for Hibernate
<property name="hibernate.hbm2ddl.auto" value="create" />-->
<property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect"/>
<property name="hibernate.connection.driver_class" value="com.ibm.db2.jcc.DB2Driver"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
Quando preciso de uma consulta ao banco o EJB chama da seguinte forma:
Agora eu tenho um relatorio criado no ireport com a query inserida nele e não queria ter o trabalho de criar uma classe com a mesma query, queria apenas passar a conexão do banco no meu ManagedBean para gera-lo, mas já tentei de várias formas, pesquisei e não encontrei uma solução. Alguém poderia me dar uma ajudinha ou me dizer aonde estou errando?
Meu managedBean está assim:
@ManagedBean(name = "rptClientesBean")
@RequestScoped
public class RptClientesPorCPFCNPJBean {
private String nomeArquivo = "Clientes.pdf";
Connection conn = null; //não sei como resgatar a conexão
JasperPrint jasperPrint;
public void init() throws JRException {
String reportPath = Util.getRealDiretorio("/paginas/cadastros/restrito/relatorios/rptClientes.jasper");
jasperPrint = JasperFillManager.fillReport(reportPath, null, conn);
}
public void PDF() throws JRException, IOException {
init();
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.addHeader("Content-disposition", "attachment; filename="+ nomeArquivo);
ServletOutputStream servletOutputStream = response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
FacesContext.getCurrentInstance().responseComplete();
}
}