我使用MySQL数据库和Hibernate在Netbeans 6.5中开发了一个Java Web应用程序。开发数据库服务器和开发应用程序服务器(Tomcat 6)都驻留在我的开发机器上。一切正常;应用程序正确地从数据库中提取数据。
现在,我已准备好将其移至生产服务器。同样,DB服务器和应用服务器位于同一台机器上。我部署WAR文件并尝试访问该应用程序;我可以访问静态页面,但使用数据库的Servlet出错,但例外情况为:
org.hibernate.exception.JDBCConnectionException: Cannot open connection
我很确定问题与Tomcat不了解数据源有关。似乎Netbeans为我处理这个问题。我已经读过,我可能需要添加一个RESOURCE条目,所以我从this site那里得到了一些建议,它给了我一个context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/EmployeeDirectory">
<Resource
name="jdbc/employeedirectory" auth="Container"
type="javax.sql.DataSource" username="EmployeeDir"
password="EmployeeDirectory" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/EmployeeDirectory?autoReconnect=true"
maxActive="15" maxIdle="7"
validationQuery="Select 1" />
</Context>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Omit Servlet Info -->
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/employeedirectory</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
和一个hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/employeedirectory</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Omit other Mappings -->
<mapping class="EmployeeDirectory.data.PhoneNumber" resource="EmployeeDirectory/data/PhoneNumber.hbm.xml"/>
</session-factory>
</hibernate-configuration>
现在,我收到org.hibernate.HibernateException: Could not find datasource
错误。
我是否正走在从开发到生产的正确道路上?我错过了什么?
答案 0 :(得分:1)
我认为你走在正确的轨道上。我首先要设置数据源并在hibernate之外验证它。以下是一篇很好的文章:http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.htm以及此处的一些示例:http://www.mbaworld.com/docs/jndi-datasource-examples-howto.html
然后,我会配置hibernate来使用datsource。通过查看您的hibernate.cfg.xml
文件,我认为您应该尝试将hibernate.connection.datasource
更改为jdbc/employeedirectory
答案 1 :(得分:1)
jndi数据源应在/tomcat/server.xml中定义,请参阅Tomcat JNDI Datasource how-to,而不是在webapp / context.xml中
答案 2 :(得分:0)
Tomcat 6要求您将资源标记添加到context.xml,而不是server.xml。你可以在Tomcat 5.x.我在Tomcat的单独安装中运行良好,但我仍在尝试在NB 6.5中使用连接池。
同一个Apache站点有一个指向Tomcat 6版本的JNDI的链接,它告诉您将资源标记添加到context.xml。