2010-12-08 55 views
0

Ok, j'ai ce problème étrange. J'utilise Tomcat 5.5 avec Hibernate. J'ai ajouté la ressource dans TOMCAT_HOME/conf/server.xml et aussi dans web.xml de mon application.
Mais je reçois une erreur lors de l'utilisation Hibernate pour construire l'usine de la session comme ceci:Impossible de se connecter à la base de données en utilisant Tomcat 5.5 et Hibernate

configure.buildSessionFactory() 

Mais je reçois cette erreur:

[ WARN]21:04:29 (SettingsFactory.java:buildSettings:144) - Could not obtain connection metadata 

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 

Ma configuration des ressources server.xml est comme ça :

<Context path="/myApp" docBase="myApp" debug="0" reloadable="true" crossContext="true"> 
<Resource name="jdbc/myApp" auth="Container" type="javax.sql.DataSource" driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxPoolSize="100" minPoolSize="5" 
acquireIncrement="5"  
    user="username" 
password="1234" 
jdbcUrl="jdbc:sqlserver://192.168.1.108:1433;databaseName=myAppDB;autoReconnect=true" /> 
</Context> 

Mon web.xml est comme ceci:

<resource-ref> 
    <description>DB Connection</description> 
    <res-ref-name>jdbc/myApp</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

Ce sont les propriétés Hibernate je suis dans mon code d'initialisation Java manuellement:

hibernate.useJndi = "true" 
hibernate.connection.datasource="java:/comp/env/jdbc/myApp" 
hibernate.connection.jndi.datasource="jdbc/myApp" 
hibernate.dialect="org.hibernate.dialect.SQLServerDialect" 
hibernate.current_session_context_class="thread" 

Donc, mon hibernate.cfg.xml est essentiellement vide, étant donné que la configuration se fait dans le code Java et par JNDI. La partie bizarre est que si je modifie seulement le server.xml et web.xml pour utiliser type = "com.mchange.v2.c3p0.ComboPooledDataSource" avec factory = "org.apache.naming.factory.BeanFactory "et laisser tous les autres trucs pareil, ça marche !!!

Pourquoi la configuration ci-dessus ne fonctionne-t-elle pas? Je l'ai pris du tutoriel Tomcat 5.5 JNDI. J'ai besoin de l'utiliser car après avoir obtenu ce qui précède, je prévois d'étendre org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory.

Merci.

Répondre

3

Le fichier JAR du pilote de votre base de données se trouve-t-il dans le répertoire TOMCAT/lib? Cela dépend de la couche qui crée et gère le pool de base de données. Si vous déplacez le fichier JAR, veillez également à le supprimer du répertoire WEB-INF/lib. L'un ou l'autre, pas les deux.

+0

@Marquinio: C'est probablement le problème. Voir aussi http://social.msdn.microsoft.com/forums/en/sqldataaccess/thread/28c1bf87-694a-4520-93d2-51d961f50e35 – shinynewbike

+0

Mon pot est sous TOMCAT/common/lib. Mais une partie bizarre est comme je l'ai dit si je change le code ci-dessus à type = "com.mchange.v2.c3p0.ComboPooledDataSource" avec factory = "org.apache.naming.factory.BeanFactory" et en laissant tous les autres trucs les mêmes, Ça marche. – Marquinio