2011-11-02 16 views

Odpowiedz

10

W ramach JasperReports można użyć albo natywnych zapytań JDBC, albo zapytań EJBQL.

Przy stosowaniu tej ostatniej, Twój kod powinien wyglądać następująco (od JRJpaQueryExecuter API):

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

Jeśli naprawdę potrzebujesz pod nią JDBC związku z tym sposób, aby osiągnąć to różni się w zależności od implementacji JPA używanego .

EclipseLink (JPA 2.0):

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

(Nie trzeba zacząć i zobowiązać do zgłaszania transakcji)

15

Prawdopodobnie jesteś zaledwie trzech kroków.

Można to zrobić stosując następujący sposób

  1. użytkowania JTA źródło danych dla persistance.xml jak poniżej

    <persistence-unit name="sample"> 
         <jta-data-source>java:comp/env/jdbc/DBConnectionDS</jta-data-source> 
         .... 
    </persistence-unit> 
    
  2. Do generowania raportów, pobierać connection od źródła danych, jak pokazano poniżej

    InitialContext initialContext = new InitialContext(); 
    DataSource dataSource = (DataSource)initialContext.lookup("java:comp/env/jdbc/DBConnectionDS"); 
    Connection connection = dataSource.getConnection(); 
    
  3. Nas e połączenie do wygenerowania raportu coś jak poniżej:

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

To powinno być wszystko wierzę. Chodzi o to, używając wspólnego połączenia JNDI dla obu, JPA & JasperReport, a następnie użyj ich w razie potrzeby.

Nie współpracowałem z JasperReports, ale pracowałem z raportem BIRT i rozwiązałem go w ten sposób bez żadnego problemu.

Powiązane problemy