2012-11-18 39 views
5

對於OpenJPA,如何在jta_datasource中指定JNDI連接,而無需在persistence.xml中指定用戶名和密碼?當jndi的persistence.xml文件中沒有指定用戶名和密碼時,它會給我一個錯誤。OpenJpa和JNDI

回答

1

偉大的問題;這在OpenJPA文檔中沒有很好地涵蓋。您需要做的是使用「openjpa.ConnectionFactoryName」屬性的特殊「java:comp/env/...」語法來要求OpenJPA從JNDI中檢索連接參數。例如,您的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> 

這將要求從容器中被稱爲「myjndi」 JNDI資源。如果您正在使用Tomcat,你將有一個context.xml的,看起來是這樣的:

<?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參數需要爲你的數據庫之上。

+0

謝謝聖殿騎士。不幸的是,這並沒有解決問題。我在ibm websphere上使用openjpa,我的jndiname是A/B。我現在使用 <屬性名= 「openjpa.ConnectionFactoryName」 值= 「java的:comp/env的/ A/B」/> 我出現以下情況例外: JDBC驅動程序或數據源類名稱必須在ConnectionDriverName屬性中指定。 –

+0

當我指定ConnectionDriverName屬性時,它會拋出用戶名和密碼異常 –

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

它被拼寫錯誤。現在這也在工作:' ' – andy