6

应用程序版本: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 驱动程序池配置所需的基本步骤已完成。但是,仍然无法解决这个问题。

请提供解决此问题的解决方案。

4

3 回答 3

9

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

摘要:类加载器不应该从服务器 lib/modules 和 web 存档(WAR 文件)中加载 Oracle 驱动程序。仅将 oracle 驱动程序保存在服务器库(JBoss 7 版本)中。

JBoss 7:

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

    1. 更新了jboss部署结构文件中的(ironjacamar-jdbc-1.0.3.Final.jar)iron模块
    2. 在 JBoss 7 结构中创建了 ojdbc6.jar 作为模块 更新了 jboss 部署结构文件中的 objbc 模块
    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 存档(WAR 文件)中删除了 ojdbc6.jar 文件

如果您在解决过程中发现任何问题,请告诉我。

于 2012-04-23T09:50:19.043 回答
1

这里发生的是 JBoss 用它自己的连接 (org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6) 包装了 oracle 连接 (oracle.jdbc.OracleConnection)。您必须调用 #getUnderlyingConnection() 来获取底层连接。

WrappedConnection wrapped = (WrappedConnection) conn;
CLOB clob = CLOB.createTemporary(wrapped.getUnderlyingConnection(), true, CLOB.DURATION_SESSION);

但是,我问自己以下是否在您的情况下也不起作用。

ps.setClob(4, new StringReader(data));
于 2012-04-23T05:08:10.427 回答
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 应用程序的 config/ 目录中,并更新了 warbler 配置以将文件包含在 war 文件中:

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

部署后一切正常......谢谢很多。

于 2013-01-21T14:23:34.830 回答