JNDI查找工作正常JPA的persistence.xml中使用时,使用查找但不(JNDI look

2019-07-29 01:44发布

我使用Tomcat连接池,JPA,休眠。 如果我试图把它用在我的tomcat context.xml中创建的数据源正常工作:

source = (DataSource) ((Context) c.lookup("java:comp/env")).lookup("jdbc/kids");

但是,如果我指定的persistence.xml这个JNDI数据源

<persistence-unit name="kids-tomcat" transaction-type="JTA">
           <jta-data-source>jdbc/kids</jta-data-source>
       </persistence-unit>

我得到以下异常:org.hibernate.service.jndi.JndiException:无法查找JNDI名称[JDBC /儿童]

任何想法,为什么它可能发生!

Answer 1:

最后,今天的工作后,我下面指定的属性..因为刚刚提的数据源是不够的; 我们需要指定要使用哪一个方言的某些属性。 如果我们指定数据源; 我们不需要指定用户名,数据库密码的网址(如所有在数据源配置本身指定)。

最重要的一点是你指定数据源的方式。 它应该是完整的路径:JAVA:/ comp / env的/ JDBC /孩子。 所有这一切,而我是失踪斜线正好补偿了。

<persistence-unit name="kids" transaction-type="RESOURCE_LOCAL">
    <non-jta-data-source>java:/comp/env/jdbc/kids</non-jta-data-source>
    <class>com.kids.domain.User</class>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
        <property name="connection.autocommit" value="false"/>
        <property name="hibernate.hbm2ddl.auto" value="create"/>
        <property name="hibernate.show_sql" value="true"/>
    </properties>
</persistence-unit>



Answer 2:

也许尝试persistence.xml中JNDI定义的名称既包括了命名空间( 的“java:comp / env的 ‘),以及在单串的JNDI路径(’JDBC /孩子 ”)(即把它们放在一起)。



文章来源: JNDI lookup works fine using lookUp but not when used in persistence.xml of JPA