【问题标题】:Can't connect to database using Tomcat 5.5 and Hibernate无法使用 Tomcat 5.5 和 Hibernate 连接到数据库
【发布时间】:2010-12-08 02:48:47
【问题描述】:

好的,我有这个奇怪的问题。我将 Tomcat 5.5 与 Hibernate 一起使用。我已经在 TOMCAT_HOME/conf/server.xml 以及我的应用程序的 web.xml 中添加了资源。
但是在使用 Hibernate 构建会话工厂时出现错误:

 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> 

这是我在 Java 代码中手动初始化的 Hibernate 属性:

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。

谢谢。

【问题讨论】:

    标签: java hibernate tomcat jndi tomcat5.5


    【解决方案1】:

    您的数据库驱动程序 JAR 是否在 TOMCAT/lib 目录中?这取决于创建和管理数据库池的层。如果确实移动了 JAR,请务必将其从 WEB-INF/lib 目录中删除。一个或另一个,而不是两者。

    【讨论】:

    • @Marquinio:很可能这就是问题所在。另见social.msdn.microsoft.com/forums/en/sqldataaccess/thread/…
    • 我的 jar 在 TOMCAT/common/lib 下。但是奇怪的部分就像我说的,如果我将上面的代码更改为 type="com.mchange.v2.c3p0.ComboPooledDataSource" 以及 factory="org.apache.naming.factory.BeanFactory" 并让所有其他内容保持不变,它有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2015-06-11
    • 1970-01-01
    • 2010-12-16
    • 2016-10-24
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多