OpenJpa和JNDI

JEE*_*ram 5 jpa jndi openjpa

对于OpenJPA,如何在jta_datasource中指定JNDI连接而不在persistence.xml中指定用户名和密码?如果在jandi的persistence.xml文件中没有指定用户名和密码,则会给出错误.

Tem*_*lar 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>
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 参数。