2012-11-18 15 views
5

OpenJPA için, persistence.xml dosyasında kullanıcı adı ve parola belirtmeden jta_datasource'ta JNDI bağlantısını nasıl belirleyebilirim? Jndi için persistence.xml dosyasında kullanıcı adı ve parola belirtilmemişse bana bir hata verir.OpenJpa ve JNDI

cevap

1

Harika soru; Bu OpenJPA dokümantasyonunda iyi bir şekilde ele alınmamıştır. Yapmanız gereken, OpenJPA'nın JNDI bağlantı parametrelerini almasını istemek için "openjpa.ConnectionFactoryName" özelliği için özel "java: comp/env/..." sözdizimini kullanmaktır. Örneğin, persistence.xml bu gibi görünmelidir:

<?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> 

Bu kaptan "myjndi" adlı bir jndi kaynak ister.

<?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> 

Değiştir veritabanı için gerekli olan yukarıdaki Jndi parametreleri: Tomcat'i kullanıyorsanız, size şuna benzer bir context.xml olurdu.

+0

Teşekkürler Templar. Ne yazık ki bu problemi çözmedi. IBM web sitesinde openjpa kullanıyorum, jndiname A/B. Bir JDBC sürücüsü veya DataSource: alıyorum şu istisna: Şimdi kullanıyorum sınıf adı, ConnectionDriverName özelliğinde belirtilmelidir. –

+0

ConnectionDriverName özelliğini belirttiğimde, kullanıcı adı ve parola –

1

persistence.xml sayfanızda jta-data-source öğesini kullanmayı deneyin. kodu üzerinden

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

Yapılandırma benim için çalıştı:

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

ben henüz doğru konumda persistence.xml yerleştirerek değilim düşünüyorum.

+0

için istisna atar, yanlış yazılmış. Şimdi bu da çalışıyor: ' – andy

İlgili konular