2011-11-02 4 views

risposta

10

All'interno di JasperReports è possibile utilizzare query JDBC native o query EJBQL.

Quando si utilizza il secondo, il codice dovrebbe essere simile a questo (da JRJpaQueryExecuter api):

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

Se si ha realmente bisogno la connessione JDBC underlaying il modo per raggiungerlo varia a seconda della implementazione JPA che si sta utilizzando .

EclipseLink (JPA 2.0):

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

(Non sarà necessario per iniziare e si impegnano le operazioni per la segnalazione)

15

Probabilmente sono solo tre passi di distanza.

è possibile farlo utilizzando modo seguente

  1. uso JTA origine dati per persistance.xml come come di seguito

    <persistence-unit name="sample"> 
         <jta-data-source>java:comp/env/jdbc/DBConnectionDS</jta-data-source> 
         .... 
    </persistence-unit> 
    
  2. Per la generazione di report, recuperare il connection da origine dati come illustrato di seguito

    InitialContext initialContext = new InitialContext(); 
    DataSource dataSource = (DataSource)initialContext.lookup("java:comp/env/jdbc/DBConnectionDS"); 
    Connection connection = dataSource.getConnection(); 
    
  3. Us via e il collegamento per generare il rapporto qualcosa come di seguito:

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

Questo dovrebbe essere tutto quello che credo. L'idea è, utilizzando la connessione JNDI comune per entrambi, JPA & JasperReport, e quindi utilizzarli laddove applicabile.

Non ho lavorato con JasperReports, ma ho lavorato con BIRT Report e l'ho risolto in questo modo senza alcun problema.

Problemi correlati