org.apache.tomcat.dbcp.dbcp.BasicDataSource无法强制转换为net.sourceforge.jtds.jdbcx.JtdsDataSource

时间:2014-04-01 08:12:30

标签: sql jdbc datasource classcastexception

尝试使用jTDS JDBC驱动程序连接到(本地)SQL数据库。

JAVA CODE

private JtdsDataSource dataSource = null;

public Connection getConnection() throws SQLException, NamingException {
        ...
        Context initContext = new InitialContext();
        dataSource = (JtdsDataSource) initContext.lookup("java:comp/env/jdbc/postcodes");
        conn = dataSource.getConnection();
                ...
    }

context.xml中

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="jdbc/postcodes" 
              auth="Container"
              type="javax.sql.DataSource" 
              username="user" 
              password="pass"
              driverClassName="net.sourceforge.jtds.jdbcx.JtdsDataSource"
              url="jdbc:jtds:sqlserver://localhost:1433/AUSPostcodes"
              validationQuery="select 1"
              maxActive="10" 
              maxIdle="4"/>
</Context>

当我在tomcat上运行时,得到以下错误....

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to net.sourceforge.jtds.jdbcx.JtdsDataSource

希望得到一些帮助。

提前致谢。

1 个答案:

答案 0 :(得分:1)

Tomcat不允许您直接访问JtdsDataSource。它仅使用该数据源来填充其内部DBCP数据源。当您使用JNDI请求数据源时,您将获得DBCP数据源。

顺便说一句:(通常)没有理由为什么要投射到javax.sql.DataSource以外的任何其他界面。解决方案是转换为该接口(javax.sql.DataSource)。