Tomcat 7.0 for Hibernate 中的数据源 JNDI 配置
Posted
技术标签:
【中文标题】Tomcat 7.0 for Hibernate 中的数据源 JNDI 配置【英文标题】:Datasource JNDI configuration in Tomcat 7.0 for Hibernate 【发布时间】:2012-05-30 16:17:15 【问题描述】:当在 (tomcat 7) server.xml 或 Context.xml 中配置数据源时,hibernate 无法识别 JNDI 并抛出异常,但当我尝试在代码中使用 JNDI 访问数据源时,同样工作正常。做错了什么
下面是我在 hibernate.properties 中的配置
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.pool_size 10
hibernate.dialect org.hibernate.dialect.MySQL5Dialect
hibernate.connection.datasource java:comp/env/jdbc/employee
hibernate.show_sql true
hibernate.format_sql true
在 server.xml 中
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/>
**<Context docBase="hibernate" path="/hibernate">
<Resource name="jdbc/employee" auth="Container"
type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:45000/hibernatetest"
username="user" password="hibernate" maxActive="20" maxIdle="10"
maxWait="-1" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
</Context>**
</Host>
在 Context.xml 文件中
**<Context docBase="hibernate" path="/hibernate">
<Resource name="jdbc/employee" auth="Container"
type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:45000/hibernatetest"
username="user" password="hibernate" maxActive="20" maxIdle="10"
maxWait="-1" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
</Context>**
最后下面是我的 web.xml 文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
**<web-app >
<servlet>
<servlet-name>employee</servlet-name>
<servlet-class>edu.experiments.web.EmployeViewer</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>employee</servlet-name>
<url-pattern>/employee</url-pattern>
</servlet-mapping>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/employee</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>**
org.hibernate.service.jndi.JndiException: Unable to lookup JNDI name [java:comp/env/jdbc/employee]
【问题讨论】:
完全从 server.xml 中取出它比看起来简单:
-
不要在 web.xml 中添加任何关于 JNDI 的内容
在您使用的 context.xml 中(无论是全局的还是 webapp 相关的)使用正确的名称,比如“jdbc/employee”
要休眠配置,以“java:comp/env/jdbc/employee”的形式传递名称
这是参考页面:
http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html
【讨论】:
以上是关于Tomcat 7.0 for Hibernate 中的数据源 JNDI 配置的主要内容,如果未能解决你的问题,请参考以下文章
Message Unable to compile class for JSP
No data type for node: org.hibernate.hql.ast.tree.MethodNode