我正在努力将应用程序从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文件中的依赖项。
有人有什么想法吗?
答案 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();