对于OpenJPA,我怎样才能在jta_datasource中指定JNDI连接而不在persistence.xml中指定用户名和密码?如果没有在jandi的persistence.xml文件中指定用户名和密码,则会出现错误。
答案 0 :(得分: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参数。
答案 1 :(得分:1)
尝试使用persistence.xml中的jta-data-source
元素。
<jta-data-source>java:comp/env/jdbc/FooBarDataSourceJNDI</jta-data-source>
答案 2 :(得分:0)
通过代码进行配置对我有用:
Map<String, String> conf = new HashMap<>();
conf.put("javax.persistence.jtaDataSource", "java:comp/env/jdbc/myjndi");
return getEntityManagerFactory().createEntityManager(conf);
我想我还没有将persistence.xml
放在正确的位置。