好的,我有这个奇怪的问题。我将 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。
谢谢。