2011-11-02 39 views

Respuesta

10

Dentro de JasperReports puede usar consultas JDBC nativas o consultas EJBQL.

Cuando se utiliza este último, su código debería tener este aspecto (de JRJpaQueryExecuter API):

Map parameters = new HashMap(); 
EntityManager em = emf.createEntityManager(); 
parameters.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, em); 
JasperRunManager.runReportToPdfFile(fileName, parameters); 

Si realmente necesita la conexión JDBC subyacente de la forma de lograr que varía dependiendo de la aplicación APP que está utilizando .

EclipseLink (JPA 2.0):

entityManager.getTransaction().begin(); 
java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class); 
... 
entityManager.getTransaction().commit(); 

(Usted no tendrá que comenzar y comprometerse para informar las transacciones)

15

probablemente usted está a sólo tres pasos.

usted puede hacerlo usando siguiente manera

  1. uso fuente de datos JTA para persistance.xml como la siguiente

    <persistence-unit name="sample"> 
         <jta-data-source>java:comp/env/jdbc/DBConnectionDS</jta-data-source> 
         .... 
    </persistence-unit> 
    
  2. Para la generación de informes, recuperar el connection de fuente de datos, como se muestra a continuación

    InitialContext initialContext = new InitialContext(); 
    DataSource dataSource = (DataSource)initialContext.lookup("java:comp/env/jdbc/DBConnectionDS"); 
    Connection connection = dataSource.getConnection(); 
    
  3. Nosotros e la conexión para generar el informe algo parecido a continuación:

    JasperPrint print = JasperFillManager.fillReport(report, parameters, connection); 
    

Esto debería ser todo lo que yo creo. La idea es usar una conexión JNDI común para ambos, JPA & JasperReport, y luego usarlos cuando corresponda.

No trabajé con JasperReports, pero trabajé con BIRT Report y lo solucioné de esta manera sin ningún problema.

Cuestiones relacionadas