iReport não traz nada quando gerado no java

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:

package managedbean;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperRunManager;
import utils.Util;


@ManagedBean(name = "rptClientesPorCPFCNPJBean")
@RequestScoped
public class RptClientesPorCPFCNPJBean {
	
	private String nomeArquivo = "Clientes.pdf";
	
	JasperPrint jasperPrint;
	
	public void init() throws JRException {
		
		String reportPath = Util.getRealDiretorio("/paginas/cadastros/restrito/relatorios/rptClientesPorCPFCNPJ.jasper");
		jasperPrint = JasperFillManager.fillReport(reportPath, new HashMap(), new JREmptyDataSource());
		
	}

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

}

Meu XHTML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ui:composition template="/layout/template.xhtml"
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.prime.com.tr/ui"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:jr="http://jasperreportjsf.sf.net/tld/jasperreports-jsf-1_0.tld">


	<ui:define name="body">

		<h:form>
			<p:panel header="Tipos de relatórios">
				<p:commandButton value="PDF" action="#{rptClientesPorCPFCNPJBean.PDF}" ajax="false"></p:commandButton>
			</p:panel>
		</h:form>
		
	</ui:define>

</ui:composition>

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.

O seu problema não é esse aqui não ?

new JREmptyDataSource())

Essa classe não cria um datasource vazio ?

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.

Entendo, porém não posso lhe ajudar muito mais, pois somente fiz relatórios usando um JRCollectionDataSource

De qq forma, vlw pela ajuda. Tem alguém q possa me ajudar como pegar a conexão usando hibernate?

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:

package ejbs;

import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import dao.LoginDAO;
import interfaces.ILoginDAO;
import interfaces.ILoginEjb;
import entidades.Login;
import excecao.DaoExcecao;

@Local(ILoginEjb.class)
@Stateless
public class LoginEjb {
	
	@PersistenceContext
	private EntityManager em;
	
	public boolean verificarStatusDoLogin(String nomeLogin) throws DaoExcecao {
		
		ILoginDAO loginDAO  = new LoginDAO();
		loginDAO.setEntityManager(em);
		
		boolean resultado = loginDAO.verificarStatusDoLogin(nomeLogin);
		
		return resultado;
	}
	
}

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();

	}
}

Talvez este link te ajude: http://imasters.com.br/artigo/24882/banco-de-dados/conectando-o-jasperreport-com-db-via-hibernate