2014-01-21 24 views
3

我试图连接到运行在WebSphere上的Java应用程序内的Oracle数据库。我需要能够创建一个数组描述符用于调用过程。获取oracle.jdbc.driver.LogicalConnection,需要oracle.jdbc.OracleConnection

的代码看起来是这样的:

Connection conn=null; 
ArrayDescriptor arrayDescriptor; 
Connection tmpCon = jdbcTemplate.getDataSource().getConnection(); 
conn = WSCallHelper.getNativeConnection(tmpCon); 
arrayDescriptor = ArrayDescriptor.createDescriptor("t_my_array",conn); 
IDs = new oracle.sql.ARRAY(arrayDescriptor, conn, list.toArray()); 

调用ArrayDescriptor.createDescriptor线罚中一类转换异常

 
java.lang.ClassCastException: oracle.jdbc.driver.LogicalConnection incompatible with oracle.jdbc.OracleConnection 
    at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:149) 
    at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:115) 

通过这个走与调试,我可以看到,conn绝对是一个oracle.jdbc.driver.LogicalConnection 。问题是在我的代码,我不能实际引用LogicalConnection因为这个类不是公共的,所以我不能只是做这样的事情:

arrayDescriptor = ArrayDescriptor.createDescriptor("t_my_array",((LogicalConnection)conn).getWrapper()); 

这:

arrayDescriptor = ArrayDescriptor.createDescriptor("t_my_array",((oracle.jdbc.driver.OracleConnection)conn).getWrapper()); 

也返回一个类转换异常:

java.lang.ClassCastException: oracle.jdbc.driver.LogicalConnection incompatible with oracle.jdbc.driver.OracleConnection

我需要有一个OracleConnection对象,但我似乎无法得到一个从获取LogicalConnection回到我身边。有没有人见过这个?我觉得我在这里错过了一些非常明显的东西,但也许我只是需要另一杯咖啡......

+0

一些谷歌命中暗示不兼容的驱动程序可能会导致这种情况。你的WebSphere设置中是否有早期版本的ojdbc版本,或者在你的类路径中的某处,还是在应用程序中打包了? –

+0

@AlexPoole:有趣的想法。我不认为我有一个不同版本的ojdbc库,但我会看看。除非我开始编写代码手动将数组传递给过程,否则应用程序可以正常工作。 – FrustratedWithFormsDesigner

+0

@AlexPoole:看起来你是对的! – FrustratedWithFormsDesigner

回答

2

@Alex Poole指出我正确的方向。 Maven包含一个Oracle jar版本10.2.0.1.0,而WebSphere有相同的jar版本,但版本为10.2.0.4.0。

修复POM后,10.2.0.1.0版本jar无法部署,问题似乎得到解决。

相关问题