2012-11-18 14 views
5

W przypadku OpenJPA, jak mogę określić połączenie JNDI w jta_datasource bez określania nazwy użytkownika i hasła w pliku persistence.xml? Daje mi błąd, gdy w pliku persistence.xml dla jndi nie podano nazwy użytkownika i hasła.OpenJpa i JNDI

Odpowiedz

1

Świetne pytanie; nie jest to dobrze opisane w dokumentacji OpenJPA. Musisz użyć specjalnej składni "java: comp/env/..." dla właściwości "openjpa.ConnectionFactoryName", aby poprosić OpenJPA o pobranie parametrów połączenia z JNDI. Na przykład, persistence.xml powinien wyglądać mniej więcej tak:

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

ten zażąda zasobu JNDI nazwie „myjndi” z pojemnika. Jeśli używasz Tomcat, to masz context.xml, który wygląda mniej więcej tak:

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

zmienić parametry JNDI powyżej wymaganych dla bazy danych.

+0

Dzięki Templar. Niestety to nie rozwiązało problemu. Używam openjpa na ibm websphere, moim jndiname jest A/B. Jestem teraz używając Otrzymuję następujący wyjątek: JDBC kierowcy lub DataSource nazwa klasy musi być określona we właściwości ConnectionDriverName. –

+0

, gdy określę właściwość ConnectionDriverName, wówczas zgłoszony zostanie wyjątek dla nazwy użytkownika i hasła –

1

Spróbuj użyć elementu jta-data-source w pliku persistence.xml.

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

Konfiguracja poprzez kod pracował dla mnie:

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

myślę, że nie jestem umieszczenie persistence.xml we właściwym miejscu, a jednak.

+0

został on błędnie wpisany. Teraz to działa: ' ' – andy

Powiązane problemy