2011-11-02 28 views
9

Tôi đang sử dụng Báo cáo Jasper để tạo báo cáo.Làm thế nào để có được kết nối cơ sở dữ liệu giống như JPA được sử dụng bằng Java?

Tôi đang sử dụng các bảng tạm thời để tạo các báo cáo mà tôi cần cùng một kết nối được JPA sử dụng trong khi tạo bảng tạm thời làm cách nào để đạt được kết quả tương tự.

+0

JPA của bạn có được đặt để sử dụng Nguồn dữ liệu không? –

+0

YES đang sử dụng nguồn dữ liệu –

Trả lời

10

Trong vòng JasperReports bạn có thể sử dụng truy vấn JDBC gốc hoặc truy vấn EJBQL.

Khi sử dụng sau này, mã của bạn sẽ trông như thế này (từ JRJpaQueryExecuter api):

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

Nếu bạn thực sự cần kết nối jdbc underlaying cách để đạt được nó thay đổi tùy theo tình hình thực hiện JPA bạn đang sử dụng .

EclipseLink (JPA 2.0):

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

(Bạn sẽ không cần phải bắt đầu và cam kết giao dịch để báo cáo)

15

Có lẽ bạn chỉ là ba bước đi.

Bạn có thể làm điều đó bằng cách sau

  1. sử dụng JTA nguồn dữ liệu cho persistance.xml như như dưới đây

    <persistence-unit name="sample"> 
         <jta-data-source>java:comp/env/jdbc/DBConnectionDS</jta-data-source> 
         .... 
    </persistence-unit> 
    
  2. Đối với thế hệ báo cáo, lấy connection từ nguồn dữ liệu như hình dưới đây

    InitialContext initialContext = new InitialContext(); 
    DataSource dataSource = (DataSource)initialContext.lookup("java:comp/env/jdbc/DBConnectionDS"); 
    Connection connection = dataSource.getConnection(); 
    
  3. hệ với chúng tôi e kết nối để tạo báo cáo một cái gì đó như dưới đây:

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

này cần được tất cả Tôi tin. Ý tưởng là, sử dụng kết nối JNDI chung cho cả hai, JPA & JasperReport, và sau đó sử dụng chúng khi có thể.

Tôi đã không làm việc với JasperReports, nhưng đã làm việc với BIRT Report và giải quyết nó theo cách này mà không gặp bất kỳ vấn đề gì.

Các vấn đề liên quan