2011-11-02 24 views
9

मैं रिपोर्ट पीढ़ी के लिए जैस्पर रिपोर्ट का उपयोग कर रहा हूं।जावा का उपयोग करते हुए जेपीए के रूप में एक ही डेटाबेस कनेक्शन कैसे प्राप्त करें?

मैं रिपोर्ट जेनरेट करने के लिए अस्थायी तालिकाओं का उपयोग कर रहा हूं जिसके लिए मुझे अस्थायी तालिका बनाने के दौरान जेपीए द्वारा उपयोग किए गए एक ही कनेक्शन की आवश्यकता है, मैं इसे कैसे प्राप्त करूं।

+0

क्या आपका जेपीए डेटासेट का उपयोग करने के लिए सेट है? –

+0

हाँ डेटासेट का उपयोग करता है –

उत्तर

10

जैस्पर रीपॉर्ट्स के भीतर आप मूल जेडीबीसी प्रश्न या ईजेबीक्यूएल प्रश्नों का उपयोग कर सकते हैं।

बाद का उपयोग कर, अपने कोड इस तरह (JRJpaQueryExecuter एपीआई से) दिखना चाहिए:

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

यह जेपीए कार्यान्वयन प्रयोग कर रहे हैं पर निर्भर करता है को प्राप्त करने के क्या तुम सच में अंतर्निहित JDBC कनेक्शन तरीका की जरूरत है ।

EclipseLink (जेपीए 2.0):

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

15

शायद तुम सिर्फ तीन चरण दूर हैं (आप शुरू करते हैं और रिपोर्ट करने के लिए लेन-देन के लिए प्रतिबद्ध करने की जरूरत नहीं होगी)।

आप इसे नीचे दिए तरीक़े का उपयोग कर

  1. उपयोग JTA डेटा स्रोत persistance.xml के लिए नीचे के रूप में

    <persistence-unit name="sample"> 
         <jta-data-source>java:comp/env/jdbc/DBConnectionDS</jta-data-source> 
         .... 
    </persistence-unit> 
    
  2. रिपोर्ट उत्पन्न करने के लिए की तरह है, कर सकते हैं के रूप में

    नीचे दिखाया गया डेटा स्रोत से connection पुनः प्राप्त
    InitialContext initialContext = new InitialContext(); 
    DataSource dataSource = (DataSource)initialContext.lookup("java:comp/env/jdbc/DBConnectionDS"); 
    Connection connection = dataSource.getConnection(); 
    
  3. हमें कनेक्शन ई नीचे की तरह रिपोर्ट कुछ उत्पन्न करने के लिए:

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

यह सब मेरा मानना ​​है कि होना चाहिए। विचार है, दोनों के लिए सामान्य जेएनडीआई कनेक्शन का उपयोग, जेपीए & जैस्पर रिपोर्ट, और फिर लागू होने पर उनका उपयोग करें।

मैंने जैस्पर रीपॉर्ट्स के साथ काम नहीं किया, लेकिन बीआईआरटी रिपोर्ट के साथ काम किया और बिना किसी समस्या के इसे हल किया।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^