2012-04-20 51 views
5

应用程序版本:的JBoss 7.0.0,的Oracle 11g(ojdbc6.jar)和JDK版本6java.lang.ClassCastException:org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6无法施展

当我尝试使用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

[This](http://stackoverflow.com/q/277665/1285418)可能会帮助你。 – 2012-04-20 13:59:49

+0

你可以使用ojdbc14.jar替换ojdbc6.jar并检查驱动程序类名oracle.jdbc.OracleDriver – Phani 2012-04-20 14:04:48

+0

Phani,我使用的是Java 6版本,并且连接到oracle的相应驱动程序应该是ojdbc6.jar。可能知道你如何将它与ojdbc14.jar文件相关联? – Rajkumar 2012-04-20 14:53:07

回答

6

我已经用下面的方法解决了我的问题。

摘要:类加载器不应该从服务器库/模块和Web归档文件(WAR文件)中加载Oracle驱动程序。只将oracle驱动程序保存在服务器库(JBoss 7 ver)中。

JBoss的7:

  • 创建一个新的JBoss部署描述符文件(jboss的部署,structure.xml)

    1. 更新了(ironjacamar-jdbc-1.0.3.Final .jar)在jboss部署结构文件中的铁模块
    2. 在JBoss 7结构中创建ojdbc6.jar作为模块 更新了jboss部署结构中的objbc模块f ILE
    3. 例子:

      <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模块: - 删除从Web归档的ojdbc6.jar文件(WAR文件)

如果您发现任何问题在解决,请让我知道。

+0

解决方案很棒,但需要注意,模块名称是在JBoss自身中配置的。我不得不将'com.oracle.ojdbc6'改为'com.oracle'。 – chillworld 2015-10-22 05:09:26

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)); 
+0

嗨菲利普,我可以理解你的答案。现在我面临的问题是,我无法将“conn”对象转换为WrappedConnection对象。当我尝试强制转换时,我得到这个异常“java.lang.ClassCastException:org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 can not be cast to oracle.jdbc.OracleConnection” – Rajkumar 2012-04-23 05:24:53

+0

所以'WrappedConnection#getUnderlyingConnection() '再次返回'WrappedConnectionJDK6'?您尝试删除整个'CLOB.createTemporary'代码(并将其转换为WrappedConnection'),然后使用'ps.setClob(4,new StringReader(data));' – 2012-04-23 16:00:19

0

在Rails应用程序有一个类似的问题在JRuby 1.7.2时,JBoss 7.1和Oracle(oracle_enhanced适配器)

Java::JavaLang::ClassCastException: oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection 

该解决方案为我工作。

我把JBoss的部署,structure.xml在Rails应用程序的config /目录,并更新了配置莺,包括在战争文件的文件:

config.webinf_files += FileList["config/jboss-deployment-structure.xml"] 

部署后都能正常运作。 .. 多谢。

相关问题