Java Hibernate 4.3+;Tomcat 7无法查找JNDI名称

Java Hibernate 4.3+;Tomcat 7无法查找JNDI名称,java,hibernate,tomcat,Java,Hibernate,Tomcat,从4.2.7升级到Hibrernate 4.3.x时遇到问题。我得到了一个例外: Caused by: javax.naming.NameNotFoundException: Name [java:comp/env/jdbc/data] is not bound in this Context. Unable to find [java:comp]. at org.apache.naming.NamingContext.lookup(NamingContext.java:820) at org.

从4.2.7升级到Hibrernate 4.3.x时遇到问题。我得到了一个例外:

Caused by: javax.naming.NameNotFoundException: Name [java:comp/env/jdbc/data] is not bound in this Context. Unable to find [java:comp].
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at javax.naming.InitialContext.lookup(InitialContext.java:415)
at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:114)
... 82 more
我正在使用Tomcat7.0.29(也尝试了7.0.47)和JDK7(v25)。Hibernate 4.2.7没有问题

这是我的persistence.xml:

<persistence-unit name="data" transaction-type="RESOURCE_LOCAL">
    <non-jta-data-source>java:comp/env/jdbc/data</non-jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.format_sql" value="true" />
    </properties>
</persistence-unit>

java:comp/env/jdbc/data
但我认为问题不在这里。我做了一点调试研究,发现如下:

JndiServiceImpl#locate(字符串jndiName)
创建一个不同的初始上下文

4.3.0-
org.apache.naming.NamingContext

4.2.7-
org.apache.naming.SelectorContext

除此之外,我找不到更多的区别


我在这个问题上找到了一些类似的主题,但没有任何帮助。感谢您的帮助。

是的,它实际上是有问题的,因为他们对
会话工厂的工作方式以及工厂何时需要连接有不同的关注

因此,您需要在
会话工厂
后面解析它,以便在
会话工厂
请求新连接时使用它

尝试在hibernate独自负责的情况下,通过旧的scool
hibernate.cfg.xml
解决jndi中的数据源,如下所示:

<hibernate-configuration>
    <session-factory name="data">
        <property name="connection.datasource">java:comp/env/jdbc/data</property>
    ...
<persistence version="2.0">
    <persistence-unit name="data">
        <properties>
            <property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"/>
也许您的
hbm2ddl
也必须移动到
hibernate.cfg.xml


玩得开心。

您在server.xml中定义了任何数据源吗?不,我没有。我应该吗?我从来没有在server.xml中定义过任何DS。有人在这里发布了一个错误报告:嗨,各位,根据5.0.0和4.3.6中解决的错误。我还没试过。@benjamin.d您最好在
/META-INF/context.xml
中定义它,并在部署后在
apache-tomcat-7.0.28\conf\Catalina\localhost\.xml
中覆盖它,以保持
server.xml
干净。否则,您必须为