【问题标题】:Casting JDBC JNDI datasources from Tomcat - ComboPooledDataSource从 Tomcat 转换 JDBC JNDI 数据源 - ComboPooledDataSource
【发布时间】:2015-10-09 09:08:05
【问题描述】:

有人可以让我摆脱痛苦并解释为什么会发生这种情况以及如何解决它。

  1. tomcat 数据源

    <Resource name="MY_JDBC_NAME" auth="Container"
      driverClass="oracle.jdbc.OracleDriver"
      jdbcUrl="MyURL"
      user="MyUser"
      password="MyPassword"                                                     
      factory="org.apache.naming.factory.BeanFactory"
      type="com.mchange.v2.c3p0.ComboPooledDataSource"
      maxPoolSize="25"   
      minPoolSize="5"
      acquireIncrement="1"
      acquireRetryAttempts = "2"
      idleConnectionTestPeriod = "60"
      testConnectionOnCheckout = "true"
      preferredTestQuery = "SELECT 1 FROM DUAL"
    

    />

  2. 查找

    ComboPooledDataSource ds = (ComboPooledDataSource) ctx.lookup(     "java:comp/env/MY_JNDI_NAME");
    

这导致莫名其妙

java.lang.ClassCastException: com.mchange.v2.c3p0.ComboPooledDataSource cannot be cast to com.mchange.v2.c3p0.ComboPooledDataSource

提前致谢

【问题讨论】:

    标签: java tomcat jdbc


    【解决方案1】:

    我正在使用这个, 可能它也适合你,试试这个,

    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.sql.DataSource;
    

    ....

    Context initContext = new InitialContext();
    Context envContext = (Context) initContext.lookup("java:comp/env");
    DataSource ds = (DataSource) envContext.lookup("MY_JDBC_NAME");
    

    【讨论】:

    • 谢谢,是的,正常情况确实有效。但是,我必须将数据源转换为其实际类型 com.mchange.v2.c3p0.ComboPooledDataSource 的原因是因为我需要它来设置 DCN 侦听器(数据库更改通知)。因此我需要一些方法来转换/转换它。
    猜你喜欢
    • 2011-07-11
    • 2014-04-01
    • 2011-05-17
    • 2019-04-10
    • 2012-11-23
    • 2010-12-22
    • 2015-12-11
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多