2012-11-18 58 views
5

ओपनजेपीए के लिए, मैं jta_datasource में jndi कनेक्शन को persistence.xml में उपयोगकर्ता नाम और पासवर्ड निर्दिष्ट किए बिना निर्दिष्ट कैसे कर सकता हूं? यह मुझे एक त्रुटि देता है जब jndi के लिए persistence.xml फ़ाइल में कोई उपयोगकर्ता नाम और पासवर्ड निर्दिष्ट नहीं है।ओपनजेपीए और जेएनडीआई

उत्तर

1

महान प्रश्न; यह ओपनजेपीए दस्तावेज में अच्छी तरह से कवर नहीं है। आपको जेएनडीआई से कनेक्शन पैरामीटर पुनर्प्राप्त करने के लिए ओपनजेपीए से पूछने के लिए "openjpa.ConnectionFactoryName" संपत्ति के लिए विशेष "जावा: comp/env/..." वाक्यविन्यास का उपयोग करना है। उदाहरण के लिए, अपने persistence.xml कुछ इस तरह दिखना चाहिए:

<?xml version="1.0"?> 
<persistence> 
    <persistence-unit name="openjpa"> 
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> 
    <class>tutorial.Animal</class> 
    <class>tutorial.Dog</class> 
    <class>tutorial.Rabbit</class> 
    <class>tutorial.Snake</class> 
    <properties> 
     <property name="openjpa.ConnectionFactoryName" value="java:comp/env/jdbc/myjndi"/> 
     <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

यह एक JNDI संसाधन कंटेनर से "myjndi" कहा जाता है का अनुरोध करेंगे।

<?xml version='1.0' encoding='UTF-8'?> 
<Context> 
    <Resource name="jdbc/myjndi" 
     auth="Container" 
     scope="Shareable" 
     type="javax.sql.DataSource" 
     maxActive="100" 
     maxIdle="30" 
     maxWait="10000" 
     removeAbandoned="true" 
     username="username" 
     password="password" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://localhost:3306/DBNAME?characterEncoding=UTF-8" 
     /> 
</Context> 

बदलें के रूप में अपने डेटाबेस के लिए आवश्यक ऊपर JNDI पैरामीटर: यदि आप बिलाव का उपयोग कर रहे हैं, तो आप एक context.xml कि कुछ इस तरह दिखता होगा।

+0

धन्यवाद टेम्पलर। दुर्भाग्य से इसने समस्या का समाधान नहीं किया है। मैं आईबीएम websphere पर openjpa का उपयोग कर रहा हूँ, मेरा jndiname ए/बी है। मैं अब उपयोग कर रहा हूँ <संपत्ति नाम = "openjpa.ConnectionFactoryName" मान = "जावा: कंप्यूटर अनुप्रयोग/env/ए/बी" /> मैं निम्न अपवाद: एक JDBC ड्राइवर या डेटा स्रोत वर्ग नाम कनेक्शन कनेक्शन नाम संपत्ति में निर्दिष्ट होना चाहिए। –

+0

जब मैं कनेक्शन DriverName गुण निर्दिष्ट करता हूं, तो यह उपयोगकर्ता नाम और पासवर्ड –

1

अपने persistence.xml में jta-data-source तत्व का उपयोग करने का प्रयास करें। कोड के माध्यम से

<jta-data-source>java:comp/env/jdbc/FooBarDataSourceJNDI</jta-data-source> 
0

विन्यास मेरे लिए काम किया:

Map<String, String> conf = new HashMap<>(); 
conf.put("javax.persistence.jtaDataSource", "java:comp/env/jdbc/myjndi"); 
return getEntityManagerFactory().createEntityManager(conf); 

मुझे लगता है कि मैं उचित स्थान पर persistence.xml रखने नहीं कर रहा हूँ, अभी तक।

+0

के लिए अपवाद फेंकता है, यह गलत वर्तनी थी। अब यह भी काम कर रहा है: ' <संपत्ति का नाम =" javax.persistence.jtaDataSource "value =" जावा: comp/env/jdbc/myjndi "/>' – andy