java - 在 Tomcat 7 中使用 Tomcat JDBC 连接池的问题

标签 java tomcat jdbc connection-pooling tomcat7

在 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

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

更新一、深入源码,在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)

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

最佳答案

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

关于java - 在 Tomcat 7 中使用 Tomcat JDBC 连接池的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287969/

相关文章:

jsp - 在 Apache Tomcat 8.0.12 中编译 JSP 时出错

Java JDBC 如何使用 RETURNING 语句处理更新查询

jdbc - Neo4j Jdbc 连接池

java - REST API 的 @Singleton EJB bean 中的 Apache Shiro getSubject

java - 无法解决这些错误 Java (Pig UDF) 添加库,org.apache

java - 在 try catch 中处理两个不同的连接关闭

java - SSL/TLS 连接重置 - 如何强制 Java 客户端使用 SNI?

java - 从 S3 下载大于 3Gb 的文件失败并显示 "SocketTimeoutException: Read timed out"

java - WebSphere 中 Tomcat 的 BeanFactory 模拟

sql - 在sql准备语句中使用LIKE子句,spring,SimpleJDBCTemplate