簡體   English   中英

Hibernate 4.3 + Tomcat 7無法查找JNDI名稱

[英]Hibernate 4.3 + Tomcat 7 Unable to lookup JNDI name

我從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

我正在使用Tomcat 7.0.29(也嘗試過7.0.47)和JDK 7(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>

但我認為問題不在這里。 我做了一些調試研究,發現了以下內容:

JndiServiceImpl#locate(String jndiName)創建一個不同的初始上下文。

4.3.0 - org.apache.naming.NamingContext

4.2.7 - org.apache.naming.SelectorContext

除此之外,我找不到任何更多的差異。

我在這個問題上找到了一些類似的主題,但都沒有幫助。 謝謝你的幫助。

是的,它實際上是錯誤的,因為他們不同地關注session-factory如何工作以及何時要求工廠建立連接。

因此,您需要在session-factory后面解決它,以便在session-factory請求新連接時使用它。

嘗試通過像這樣的舊scool hibernate.cfg.xml來解決jndi中的數據源,只能在hibernate中進行單獨的respolsibility:

<hibernate-configuration>
    <session-factory name="data">
        <property name="connection.datasource">java:comp/env/jdbc/data</property>
    ...

並通過persistence.xml解析配置,如下所示:

<persistence version="2.0">
    <persistence-unit name="data">
        <properties>
            <property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"/>

也許你的hbm2ddl必須轉移到hibernate.cfg.xml

玩得開心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM