Hibernate 4.3 + Tomcat 7无法查找JNDI名称
我从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:
java:comp/env/jdbc/data
但我认为问题不在这里。 我做了一些调试研究,发现了以下内容:
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的唯一可靠性:
java:comp/env/jdbc/data ...
并通过persistence.xml
解析配置,如下所示:
也许你的hbm2ddl
必须转移到hibernate.cfg.xml
。
玩得开心。