【问题标题】:Tomcat: Replace DBCP by OracleConnectionPoolDataSourceTomcat:用 OracleConnectionPoolDataSource 替换 DBCP
【发布时间】:2011-07-22 11:24:32
【问题描述】:

几天以来,我尝试用Oracle的连接池替换Tomcats dbcp。这是必需的,因为 Web 应用程序使用一些 Oracle 特定功能。

目前,JNDI 数据源是这样配置的:

<Resource
    name="jdbc/oracle"
    driverClassName="oracle.jdbc.OracleDriver"
    auth="Container"
    type="oracle.jdbc.pool.OracleConnectionPoolDataSource"
    factory="oracle.jdbc.pool.OracleDataSourceFactory"
    user="*****"
    password="*****"        
    url="*****"
/>

当我从池中获取连接时,它仍然是类型 org.apache.commons.dbcp.PoolingDataSource.PoolGuardConnectionWrapper

谁能给我一个提示,这里出了什么问题?

提前致谢,

马库斯

【问题讨论】:

  • 好的,几天后我发现了问题。该应用程序使用 Spring。在应用程序上下文的某处,有一个使用 Jakarta Commons DBCP 的 DataSource 的 bean 定义。抛出 ClassCastException 的代码使用从应用程序上下文中的 DataSource 获取的 Connection 进行操作。 JNDI 和 Spring 的混淆太混乱了。

标签: oracle tomcat configuration apache-commons-dbcp


【解决方案1】:

你可以通过调用:http://www.docjar.com/docs/api/org/apache/commons/dbcp/PoolingDataSource.PoolGuardConnectionWrapper.html#getDelegate()来获取封装的连接

然后将其转换为具体的 Oracle 连接对象。

顺便说一句:没有任何问题,大多数(如果不是全部)应用程序服务器使用某种包装器来包装具体连接。

【讨论】:

  • 但是,如果我想替换整个池管理器怎么办?根据“Professional Apache Tomcat 6”一书,这应该是可能的。有一个示例如何使用 C3P0 代替 DBCP,但这不起作用,仍然使用 DBCP。在示例中,factory-attribute 用于将默认工厂替换为 org.apache.naming.factory.BeanFactory。据我了解这个例子,新工厂“将创建一个 cp30 管理的数据源的实例 [...]”。在这种情况下,通过 DBCP 管理连接没有多大意义,这些连接已经由另一个池管理......
猜你喜欢
  • 2011-06-10
  • 2014-05-19
  • 2011-06-24
  • 2012-04-29
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
相关资源
最近更新 更多