2011-01-21 13 views
5

मैं यूनिट परीक्षण में ecbDB जेटीए डेटा स्रोत नहीं ढूंढ पा रहा हूं।डर्बी एम्बेडेड डेटाबेस के लिए जावा ईई 6 एप्लिकेशन में एक्लिप्ससेंक/जेपीए 2.0 में जेटीए डेटा स्रोत कैसे सेट करें?

RESOURCE_LOCAL के लिए एक ही persistence.xml काम करता है। केवल एक ईजेबी कंटेनर के भीतर यह एक जेटीए डेटा स्रोत का पता लगाने में विफल रहता है।

मैं मिल अपवाद निम्नलिखित जब इकाई परीक्षण निष्पादित किया जाता है ..

SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method 
java.lang.RuntimeException: javax.naming.NamingException: Lookup failed for 'ecbDB' in SerialContext [Root exception is javax.naming.NameNotFoundException: ecbDB not found] 
at org.glassfish.persistence.jpa.PersistenceUnitInfoImpl.<init>(PersistenceUnitInfoImpl.java:111) 

यहाँ

persistence.xml
<?xml version="1.0" encoding="UTF-8"?> 
<persistence 
    xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0"> 

    <persistence-unit name="ecbPU" transaction-type="JTA"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>ecbDB</jta-data-source> 
     <mapping-file>META-INF/orm.xml</mapping-file> 

     <properties> 
      <property 
       name="javax.persistence.jdbc.driver" 
       value="org.apache.derby.jdbc.EmbeddedDriver" /> 
      <property 
       name="javax.persistence.jdbc.url" 
       value="jdbc:derby:target/ecbDB;create=true" /> 

      <!-- EclipseLink 2.0 properties --> 
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 
      <property name="eclipselink.ddl-generation.output-mode" 
         value="sql-script" /> 
      <!-- <property name="eclipselink.ddl-generation.output-mode" value="database" 
      /> --> 
      <property name="eclipselink.application-location" value="./target/ddl" /> 
      <property name="eclipselink.create-ddl-jdbc-file-name" 
         value="create.sql" /> 
      <property name="eclipselink.drop-ddl-jdbc-file-name" value="drop.sql" /> 
      <property name="eclipselink.logging.level" value="ALL" /> 
      <property name="eclipselink.logging.file" value="./target/eclipselink.logs" /> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

इस तरह यह कोड jj1.0 के साथ openjpa के साथ काम कर रहा था। लेकिन eclipselink और jpa2.0 के साथ; मुझे लगता है कि उपरोक्त कोड के साथ स्रोत परिभाषित/पंजीकृत नहीं हो रहा है। –

उत्तर

0

सबसे पहले सुनिश्चित करें कि आपके डर्बी विन्यास एक उपयुक्त JDBC संसाधन (साथ दिया है है खोल कमांड "asadmin सूची-jdbc-संसाधन")। यदि नहीं, तो "asadmin create-jdbc-resource" के साथ एक बनाएं। मदद के लिए "asadmin सूची-आदेश" टाइप करें।

+0

मैं एम्बेडेड डर्बी का उपयोग कर रहा हूं। यूनिट परीक्षण में एम्बेडेड डर्बी के साथ मैं जेडीबीसी संसाधन कैसे परिभाषित कर सकता हूं? –

+0

मुझे अपवाद प्राप्त होता है .. आंतरिक अपवाद: java.sql.SQLException: कनेक्शन आवंटित करने में त्रुटि। कारण: कनेक्शन आवंटित नहीं किया जा सका क्योंकि: java.net.ConnectException: संदेश के साथ पोर्ट 1527 पर सर्वर लोकहोस्ट से कनेक्ट करने में त्रुटि कनेक्शन कनेक्शन से इनकार कर दिया: कनेक्ट करें। त्रुटि कोड: 0 \t org.eclipse.persistence.exceptions.DatabaseException.sqlException (DatabaseException.java:309) –

+0

यदि आपको पोर्ट 1527 पर सर्वर से कनेक्ट करने में विफल होने के बारे में कोई संदेश मिल रहा है, तो आप नहीं हैं एम्बेडेड डर्बी का उपयोग करके, आप क्लाइंट/सर्वर डर्बी का उपयोग कर रहे हैं, और आपका नेटवर्क सर्वर ऊपर नहीं है। –

0

क्या आप इसे एम्बेडेड ग्लासफ़िश के तहत चला रहे हैं? यदि ऐसा है तो आप जो समस्या देख रहे हैं वह इसलिए है क्योंकि उसके पास एक जेटीए डेटास्रोत है ecbDB को आपके domain.xml में परिभाषित नहीं किया गया है। उस स्थिति में कास्टर का जवाब सही रास्ते पर है और आपको अपना एम्बेडेड कनेक्शन पूल और संबंधित जेडीबीसी संसाधन बनाना चाहिए। आप asadmin कमांड या ग्लासफ़िश वेब व्यवस्थापक जीयूआई का उपयोग कर सकते हैं। उस बिंदु पर आपको अपने persistence.xml से दो javax.persistence.jdbc गुणों को भी हटा देना चाहिए क्योंकि उन सेटिंग्स को आपके कनेक्शन पूल संसाधन सेटिंग्स द्वारा स्वीकार किया जाएगा।

1

यहां एक चरण-दर-चरण विवरण है जिसका उपयोग मैंने एक्लिप्ससेंक के साथ जेटीए आधारित कनेक्शन स्थापित करने के लिए किया है।

सबसे पहले, सुनिश्चित करें कि: चलने

asadmin list-domains

  • अपाचे डर्बी सर्वर है और

    NetworkServerControl.bat sysinfo -h localhost -p 1527

  • चल

    • ग्लासफिश सर्वर है और


      इसके बाद, JDBC कनेक्शन पूल और JDBC संसाधन बनाने

      • JDBC कनेक्शन पूल org.apache.derby.jdbc.EmbeddedDataSource

      asadmin बनाने-JDBC-कनेक्शन पूल का उपयोग करता है बनाने के
      --datasourceclassname ऑर्ग .apache.derby.jdbc.EmbeddedDataSource
      --restype javax.sql।XADataSource
      --property DatabaseName = ecbDB: Servername = स्थानीय होस्ट: portnumber = 1527: पासवर्ड = एपीपी: उपयोगकर्ता = एपीपी: connectionAttributes = \; \ = सच EmbeddedPool

      • बनाने बनाने JDBC संसाधन

      asadmin बनाने-JDBC-संसाधन --connectionpoolid EmbeddedPool JDBC/EmbeddedResource


      y हैं आप नए नोड्स देखेंगे:

      संसाधन> JDBC> JDBC कनेक्शन ताल> EmbeddedPool
      संसाधन> JDBC> JDBC संसाधन> JDBC/EmbeddedResource
      : कहां ग्लासफिश व्यवस्थापन कंसोल पर एक नज़र (4848स्थानीय होस्ट) ले

      जैसा कि आप देख सकते हैं jdbc/EmbeddedResource को EmbeddedPool पर असाइन किया गया है। के रूप में मैं जानता हूँ कि यह जावा के लिए पसंदीदा रणनीति है

      <?xml version="1.0" encoding="UTF-8"?> 
      <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
          <persistence-unit name="ecbPU"> 
           <jta-data-source>jdbc/EmbeddedResource</jta-data-source> 
           <properties> 
            <property name="eclipselink.logging.level" value="FINE"/> 
           </properties> 
          </persistence-unit> 
      </persistence> 
      

      उपयोग राज्यविहीन/स्टेटफुल सत्र के रूप में घटकों हठ संचालन प्रबंधन करने के लिए (जहां तक ​​सेम:


      फिर, persistence.xml का एक न्यूनतम संस्करण बनाने ईई अनुप्रयोगों):

      public interface ECBService { 
      } 
      
      @Stateless 
      public class ECBServiceBean implements ECBService { 
          @PersistenceContext(unitName = "ecbPU") 
          protected EntityManager em; 
      } 
      

      उपयोग सेटर इंजेक्शन इकाई परीक्षण के मामले) में एक क्षेत्र में संदर्भ निर्भरता नामकरण (उपयोगी पर्यावरण आवंटित करने के लिए:

      public class ECBServlet extends HttpServlet { 
          private ECBService service; 
      
          @EJB 
          public void setECBService(EcbService service) { 
           this.service = service; 
          } 
      } 
      

      अंत में, तैनाती निम्नलिखित का उत्पादन:

      INFO: EclipseLink, version: Eclipse Persistence Services - 2.5.0.v20130507 
      FINE: Detected database platform: org.eclipse.persistence.platform.database.JavaDBPlatform 
      CONFIG: connecting(DatabaseLogin(
          platform=>DatabasePlatform 
          user name=> "" 
          connector=>JNDIConnector datasource name=>null 
      )) 
      CONFIG: Connected: jdbc:derby:ecbDB 
          User: APP 
          Database: Apache Derby Version: 10.10.1.1 - (1458268) 
          Driver: Apache Derby Embedded JDBC Driver Version: 10.10.1.1 - (1458268) 
      CONFIG: connecting(DatabaseLogin(
          platform=>JavaDBPlatform 
          user name=> "" 
          connector=>JNDIConnector datasource name=>null 
      )) 
      CONFIG: Connected: jdbc:derby:ecbDB 
          User: APP 
          Database: Apache Derby Version: 10.10.1.1 - (1458268) 
          Driver: Apache Derby Embedded JDBC Driver Version: 10.10.1.1 - (1458268) 
      

      मुझे आशा है कि यह मदद करता है।