2010-12-08 70 views
0

好吧,我有這個奇怪的問題。我正在使用Tomcat 5.5和Hibernate。我已經在TOMCAT_HOME/conf/server.xml和我的應用程序的web.xml中添加了資源。
但我使用Hibernate建立會話工廠這樣當收到錯誤:無法連接到數據庫使用Tomcat 5.5和休眠

configure.buildSessionFactory() 

但我發現了這個錯誤:

[ 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' 

我的server.xml中的資源配置是這樣的:

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

我的web.xml是這樣的:

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

這是Hibernate屬性我手動初始化在我的Java代碼:

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" 

所以我的hibernate.cfg.xml基本上是空的,因爲配置在Java代碼,並通過JNDI來完成。

奇怪的部分是,如果我只修改server.xml和web.xml以使用type =「com.mchange.v2.c3p0.ComboPooledDataSource」以及factory =「org.apache.naming.factory.BeanFactory 「而讓所有其他東西都一樣,它的工作原理!

爲什麼上述配置不起作用?我從Tomcat 5.5 JNDI教程中獲得了它。我需要使用它,因爲在獲得上述工作之後,我打算擴展org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory。

謝謝。

回答

3

在TOMCAT/lib目錄中是數據庫驅動器JAR嗎?這取決於哪個層正在創建和管理數據庫池。如果您確實移動了JAR,也一定要將其從WEB-INF/lib目錄中移除。一個或另一個,不是兩個。

+0

@Marquinio:很可能是這個問題。另請參閱http://social.msdn.microsoft.com/forums/zh-CN/sqldataaccess/thread/28c1bf87-694a-4520-93d2-51d961f50e35 – shinynewbike 2010-12-08 06:16:24