对于OpenJPA,如何在jta_datasource中指定JNDI连接而不在persistence.xml中指定用户名和密码?如果在jandi的persistence.xml文件中没有指定用户名和密码,则会给出错误.
好问题;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>
Run Code Online (Sandbox Code Playgroud)
这将从容器请求名为“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>
Run Code Online (Sandbox Code Playgroud)
根据您的数据库的需要更改上面的 JNDI 参数。