Tomcat 7中使用Tomcat JDBC连接池出现的问题

4
在 server.xml 文件中:
<GlobalNamingResources>
<Resource name="jdbc/ArchiveDB" 
    auth="Container" 
    type="javax.sql.DataSource" 
    driverClassName="oracle.jdbc.OracleDriver"
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
    ...etc

在 web.xml 文件中:
<resource-ref>
<description>Archive Database</description>
<res-ref-name>jdbc/ArchiveDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>  

我的代码:

Context ic = new InitialContext();         
DataSource ds = (DataSource) ic.lookup( "java:/comp/env/jdbc/ArchiveDB" );             

我遇到了以下异常:

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to org.apache.tomcat.jdbc.pool.DataSource

有什么想法我做错了吗?似乎资源中的工厂字段没有被使用,但我不知道如何找出原因。您有什么想法可以帮助我进展吗?

更新1. 深入源代码,在ResourceFactory.java中发现以下内容。

if (ref.getClassName().equals("javax.sql.DataSource")) {
String javaxSqlDataSourceFactoryClassName =
    System.getProperty("javax.sql.DataSource.Factory",
    Constants.DBCP_DATASOURCE_FACTORY);

我猜我需要设置系统属性,这样它就不会恢复到默认值。
更新2。 现在已经为启动设置了以下内容:
-Djavax.sql.DataSource.Factory=org.apache.tomcat.jdbc.pool.DataSourceFactory

我得到了不同的错误:

09-Jun-2011 14:48:20 org.apache.naming.NamingContext lookup
WARNING: Unexpected exception resolving reference
java.sql.SQLException
at        org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:243)
Caused by: java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
    at     org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:236)
    ... 57 more
javax.naming.NamingException
    at org.apache.naming.NamingContext.lookup(NamingContext.java:843)

我猜测它无法获取我指定的驱动程序信息。


我有一个类似的问题。当从Java类访问数据源时,DataSource类型是什么?我使用org.apache.tomcat.jdbc.pool.DataSource,或者应该使用javax.sql.DataSource(后者是Resource的type属性的值)? - Sefran2
1个回答

2

看起来现在可以工作了。我认为这是一个问题,我正在Eclipse下调试,所以我没有使用我认为我在使用的server.xml。Eclipse会复制tomcat目录下的server.xml。解决方法是在Eclipse下删除并重新创建,以使server.xml中的更改生效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接