java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 cannot be cast

寵の児 提交于 2020-01-10 14:45:11

问题


Application Version: JBoss 7.0.0, Oracle 11g (ojdbc6.jar) and JDK 6 version

I have a problem when I am trying to insert the value for CLOB Data type using CLOB.createTemporary function, getting the below exception.

java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 cannot be cast to oracle.jdbc.OracleConnection

After searching in multiple forums, did not find any solution. https://forums.oracle.com/forums/thread.jspa?threadID=279238

Basic steps required to deploy a WAR file and configuring the JBoss oracle driver pool configuration is done. But, still not able to get through this issue.

Please provide solution to fix this problem.


回答1:


I have solved my problem with the below approach.

Summary: Class loader should not load the Oracle driver from server lib/modules and in web archive (WAR file). Keep the oracle driver only in server lib (JBoss 7 ver).

JBoss 7:

  • Created a new JBoss deployment descriptor file(jboss-deployment-structure.xml)

    1. Updated the (ironjacamar-jdbc-1.0.3.Final.jar) iron module in the jboss deployment structure file
    2. Created the ojdbc6.jar as module in the JBoss 7 structure Updated the objbc module in the jboss deployment structure file
    3. Example:

      <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 module: - Removed the ojdbc6.jar file from the web archive(WAR file)

If you find any issue in solving, please let me know.




回答2:


What's happening here is that JBoss wraps the oracle connection (oracle.jdbc.OracleConnection) with it's own one (org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6). You have to call #getUnderlyingConnection() to get the underlying connection.

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

However I ask myself whether the following wouldn't work as well in your case.

ps.setClob(4, new StringReader(data));



回答3:


Got a similar problem in a Rails App with Jruby 1.7.2, JBoss 7.1 and Oracle (oracle_enhanced adapter)

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

This solution worked for me.

I put the jboss-deployment-structure.xml in the config/ directory of the rails app and updated the warbler config to include the file in the war file:

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

After deploy all worked fine ... Thx a lot.



来源:https://stackoverflow.com/questions/10247702/java-lang-classcastexception-org-jboss-jca-adapters-jdbc-jdk6-wrappedconnection

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!