ClassCastException:org.jboss.jca.adapters.jdbc.jdk6.WrappedPreparedStatementJDK6无法强制转换为OraclePreparedStatement

时间:2014-01-13 20:57:59

标签: oracle jdbc jboss7.x classcastexception

我正在努力将应用程序从Oracle Application Server迁移到JBoss EAP 6.1。我有大部分工作,但我得到一个我无法弄清楚的错误:

13:27:29,743 ERROR [com.myproj.db.dao.myDao] (Thread-164) Get Prepared Statement: 
java.lang.ClassCastException: 
org.jboss.jca.adapters.jdbc.jdk6.WrappedPreparedStatementJDK6 cannot be cast
to oracle.jdbc.internal.OraclePreparedStatement

我将Oracle设置为JBoss中的模块,用于使用ojdbc6.jar进行连接池(并且它适用于应用程序的其他部分),但是对于使用OraclePreparedStatement的应用程序的一部分,它得到了错误。

我确实确认WAR文件中没有ojdbc6.jar文件。 JBoss中唯一的一个似乎是在模块内部。

我确实尝试将OraclePreparedStatement课改为oracle.jdbc.OraclePreparedStatement,但结果是一样的。

我尝试使用TRACE运行以进行日志记录以查看正在加载类的位置。 {C}已从模块加载OraclePreparedStatement,但该行除外:

4:31:40,583 TRACE [org.jboss.modules] (Thread-84) Finding class 
oracle.jdbc.OraclePreparedStatement from Module "deployment.myProj.war:main" from
Service Module Loader

以下是指向excerpt of the log的链接 - 基本上只是与OraclePreparedStatement相关的行。

我已确认WAR文件中没有ojdbc6.jar(或任何与Oracle相关的jar),并且WAR文件中也没有OraclePreparedStatement类。

我确实将模块列为JBoss部署结构xml文件中的依赖项。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

从查看javadoc,我猜想org.jboss.jca.adapters.jdbc.jdk6.WrappedPreparedStatementJDK6正在包装底层的Oracle JDBC驱动程序。

org.jboss.jca.adapters.jdbc.jdk6.WrappedPreparedStatementJDK6有一个获取基础语句的方法。也许您应该尝试以下内容:

WrappedPreparedStatementJDK6 statement = ...
OraclePreparedStatement oracleStatement = (OraclePreparedStatement)statement.getUnderlyingStatement();