应用程序版本: JBoss 7.0.0,Oracle 11g(ojdbc6.jar)和JDK 6版本
当我尝试使用CLOB.createTemporary
函数插入CLOB数据类型的值时遇到问题,得到以下异常。
java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 cannot be cast to oracle.jdbc.OracleConnection
在多个论坛中搜索后,没有找到任何解决方案。 https://forums.oracle.com/forums/thread.jspa?threadID=279238
完成部署WAR文件和配置JBoss oracle驱动程序池配置所需的基本步骤。但是,仍然无法解决这个问题。
请提供解决方案以解决此问题。
答案 0 :(得分:7)
我用以下方法解决了我的问题。
摘要:类加载器不应从服务器lib / modules和Web归档(WAR文件)加载Oracle驱动程序。将oracle驱动程序仅保留在服务器lib(JBoss 7 ver)中。
JBoss 7:
创建了一个新的JBoss部署描述符文件(jboss-deployment-structure.xml)
示例:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.jboss.ironjacamar.jdbcadapters" slot="main"/>
<module name="com.oracle.ojdbc6" slot="main"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
网络模块: - 从Web存档(WAR文件)中删除了ojdbc6.jar文件
如果您在解决方面遇到任何问题,请告知我们。
答案 1 :(得分:1)
这里发生的事情是JBoss将oracle连接(oracle.jdbc.OracleConnection)与它自己的连接(org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6)包装起来。您必须调用#getUnderlyingConnection()来获取底层连接。
WrappedConnection wrapped = (WrappedConnection) conn;
CLOB clob = CLOB.createTemporary(wrapped.getUnderlyingConnection(), true, CLOB.DURATION_SESSION);
但是,我问自己,在你的情况下,以下内容是否会起作用。
ps.setClob(4, new StringReader(data));
答案 2 :(得分:0)
在使用Jruby 1.7.2,JBoss 7.1和Oracle(oracle_enhanced适配器)的Rails应用程序中遇到类似的问题
Java::JavaLang::ClassCastException: oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection
这个解决方案对我有用。
我将jboss-deployment-structure.xml放在rails app的config /目录中,并更新了warbler配置以将文件包含在war文件中:
config.webinf_files += FileList["config/jboss-deployment-structure.xml"]
部署后一切正常......很多。