2009-05-13 6 views
1

J'ai développé une application web Java dans Netbeans 6.5 en utilisant une base de données MySQL et Hibernate. Le serveur de base de données de développement et le serveur d'applications de développement (Tomcat 6) résident tous les deux sur ma machine de développement. Tout fonctionne; l'application extrait correctement les données de la base de données. Maintenant, je suis prêt à le déplacer vers le serveur de production. Encore une fois, le serveur de base de données et le serveur d'applications sont sur la même machine. Je déploie le fichier WAR et essaie d'accéder à l'application; Je peux accéder aux pages statiques, mais les servlets qui utilisent l'erreur de base de données avec l'exception:De Netbeans Dev à Tomcat Production: Connexion DB introuvable

org.hibernate.exception.JDBCConnectionException: Cannot open connection

Je suis sûr que le problème concerne Tomcat ne pas connaître la source de données. Il semble que Netbeans gère cela pour moi. J'ai lu que je pourrais avoir besoin d'ajouter une entrée RESSOURCES donc je pris quelques conseils de this site qui m'a donné une context.xml de:

<?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> 

un web.xml de:

<?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> 

et un hibernate.cfg.xml de:

<?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> 

maintenant, je reçois une erreur org.hibernate.HibernateException: Could not find datasource. Suis-je sur la bonne voie pour passer du développement à la production? Qu'est-ce que je rate?

Répondre

1

Je pense que vous êtes sur la bonne voie. Je voudrais d'abord mettre en place la source de données et la vérifier hors d'Hibernate. Voici un bon article à ce sujet: http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.htm et quelques exemples ici: http://www.mbaworld.com/docs/jndi-datasource-examples-howto.html

Ensuite, je voudrais configurer hibernate pour utiliser la source de données. En regardant votre fichier hibernate.cfg.xml Je pense que vous devriez essayer de changer hibernate.connection.datasource-jdbc/employeedirectory

0

Tomcat 6 exige que vous ajoutez la balise de ressource au fichier context.xml, pas au fichier server.xml. Vous pourriez dans Tomcat 5.x. Je l'ai bien fonctionné dans une installation séparée de Tomcat, mais j'essaie toujours d'utiliser la mise en commun de connexion à l'intérieur de NB 6.5.

Ce même site Apache possède un lien vers la version Tomcat 6 de JNDI et vous invite à ajouter la balise de ressource au fichier context.xml.

Questions connexes