今天在项目之外写了一个小工具,方便我们开发人员处理和修正一些数据。

其中处理的数据中,有oracle的xmltype类型,

之前有写过如何处理xmltype类型,请看这里:

java操作Oracle类型XMLType总结一:使用jdbc    

java操作Oracle类型XMLType总结二:使用Mybatis

在本地跑时,使用的是apache的dbcp创建数据源,处理xmltype使用如下代码获取connection对象:

DelegatingConnection connection = (DelegatingConnection) DataSourceUtils.getConnection(dataSource)
        .getMetaData().getConnection();
XMLType xmltype = XMLType.createXML(connection.getDelegate(), parameter);

一切正常,但是发布到线上时,使用的是jboss创建的jndi,数据源发生了变化,具体的dataSource不是同一个类了,自然获取的connection对象也不再是DelegatingConnection,看如下代码:

Connection connection = DataSourceUtils.getConnection(dataSource).getMetaData()
                .getConnection();
XMLType xmltype = XMLType.createXML(connection, xml);

但是一直抛出oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection;的异常,网上查了都没有好的解决方法。

T4CConnection类又不是public的,无法像DelegatingConnection那样获取原始connection,难道无解决了么?

最后在国外的一个网站上发现,这可能是由于类冲突引起的,搜索T4CConnection类,发现确实有两个,一个在jboss目录下的oracle驱动jar中,一个在项目中我原来使用apache的dbcp时引入的oracle驱动jar中,两个版本不一致。

删除项目中的oracle驱动jar包,再次运行,终于正常了!

你可能感兴趣的内容
0条评论

selfly

交流QQ群:32261424
Owner