От Netbeans Dev до Tomcat Production: соединение с БД не найдено

Я разработал веб-приложение Java в Netbeans 6.5, используя базу данных MySQL и Hibernate. И сервер базы данных разработки, и сервер приложений разработки (Tomcat 6) находятся на моей машине разработки. Все работает; приложение правильно извлекает данные из базы данных.

Теперь я готов перенести его на рабочий сервер. Опять же, сервер БД и сервер приложений находятся на одном компьютере. Я развертываю файл WAR и пытаюсь получить доступ к приложению; Я могу получить доступ к статическим страницам, но сервлеты, использующие ошибку базы данных, выходят за исключением:

org.hibernate.exception.JDBCConnectionException: Cannot open connection

Я почти уверен, что проблема связана с тем, что Tomcat не знает об источнике данных. Кажется, что Netbeans справляется с этим за меня. Я читал, что мне может понадобиться добавить запись RESOURCE, поэтому я воспользовался советом с этого сайта который дал мне 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.

На правильном ли я пути перехода от разработки к производству? Что мне не хватает?


person Steve Kalemkiewicz    schedule 13.05.2009    source источник


Ответы (3)


Я думаю, вы на правильном пути. Я бы сначала настроил источник данных и проверил его вне спящего режима. Вот хорошая статья на эту тему: http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html и несколько примеров здесь: http://www.mbaworld.com/docs/jndi-datasource-examples-howto.html

Затем я бы настроил спящий режим для использования источника данных. Глядя на ваш файл hibernate.cfg.xml, я думаю, вам следует попробовать изменить hibernate.connection.datasource на jdbc/employeedirectory

person Ryan Cook    schedule 13.05.2009

источник данных jndi должен быть определен в /tomcat/server.xml, см. Инструкции по использованию источника данных Tomcat JNDI, а не в webapp/context.xml

person Michael Pralow    schedule 13.05.2009

Tomcat 6 требует, чтобы вы добавили тег ресурса в context.xml, а не в server.xml. Вы могли бы в Tomcat 5.x. У меня он отлично работает в отдельной установке Tomcat, но я все еще пытаюсь использовать пул соединений внутри NB 6.5.

На том же сайте Apache есть ссылка на версию JNDI для Tomcat 6, и там предлагается добавить тег ресурса в context.xml.

person Community    schedule 27.05.2009