OpenJpa和JNDI

时间:2012-11-18 18:07:53

标签: jpa jndi openjpa

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

3 个答案:

答案 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放在正确的位置。