2012-04-20 44 views
5

Versión de la aplicación: JBoss 7.0.0, Oracle 11g (ojdbc6.jar) y JDK 6 versiónjava.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 no se puede convertir

Tengo un problema cuando intento insertar el valor para el tipo de datos CLOB usando la función CLOB.createTemporary, obteniendo la siguiente excepción.

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

Después de buscar en varios foros, no encontré ninguna solución. https://forums.oracle.com/forums/thread.jspa?threadID=279238

pasos básicos necesarios para desplegar un archivo WAR y configurar la configuración del grupo controlador de Oracle JBoss se hace. Pero, aún no es capaz de superar este problema.

Proporcione la solución para solucionar este problema.

+0

[Este] (http://stackoverflow.com/q/277665/1285418) podría ayudarlo. –

+0

¿Podría reemplazar ojdbc6.jar con ojdbc14.jar y verificar el nombre de la clase de controlador oracle.jdbc.OracleDriver – Phani

+0

Phani, estoy usando la versión de Java 6 y el controlador correspondiente para conectar con Oracle debe ser ojdbc6.jar. ¿Puede saber cómo está relacionando esto con el archivo ojdbc14.jar? – Rajkumar

Respuesta

6

He resuelto mi problema con el siguiente enfoque.

Resumen: El cargador de clases no debe cargar el controlador de Oracle desde el servidor lib/modules y en el archivo web (archivo WAR). Mantenga el controlador oracle solo en el servidor lib (JBoss 7 ver).

JBoss 7:

  • crea un nuevo archivo descriptor de despliegue de JBoss (JBoss-despliegue-structure.xml)

    1. Actualizado el (ironjacamar-jdbc-1.0.3.Final .jar) módulo de hierro en el archivo de estructura de despliegue de JBoss
    2. Creado el ojdbc6.jar como módulo en la estructura de JBoss 7 Actualizado el módulo objBC en la estructura de despliegue de JBoss f ile
    3. Ejemplo:

      <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> 
      

módulo Web: - Se ha eliminado el archivo ojdbc6.jar del archivo web (archivo WAR)

Si encuentra algún problema en resolver, por favor avíseme.

+0

La solución es genial, pero tome atención , los nombres de los módulos se configuran en JBoss self. Tuve que cambiar 'com.oracle.ojdbc6' por' com.oracle'. – chillworld

1

Lo que sucede aquí es que JBoss ajusta la conexión oráculo (oracle.jdbc.OracleConnection) con la suya propia (org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6). Debes llamar a #getUnderlyingConnection() para obtener la conexión subyacente.

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

Sin embargo, me pregunto si lo siguiente no funcionaría tan bien en su caso.

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

Hola Philippe, puedo entender tu respuesta. El problema que ahora estoy enfrentando es que no puedo escribir el objeto "conn" para el objeto WrappedConnection. Mientras trato de encasillarme, obtengo esta excepción "java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 no se puede convertir a oracle.jdbc.OracleConnection" – Rajkumar

+0

Así que 'WrappedConnection # getUnderlyingConnection() 'de nuevo devuelve un' WrappedConnectionJDK6'? Ha intentado eliminar todo el código 'CLOB.createTemporary' (y el molde a' WrappedConnection') y simplemente vaya con 'ps.setClob (4, new StringReader (data));' –

0

consiguió un problema similar en una aplicación Rails con jruby 1.7.2, JBoss 7.1 y Oracle (adaptador oracle_enhanced)

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

Esta solución funcionó para mí.

pongo el jboss- despliegue a structure.xml en el directorio config/de la aplicación rieles y actualizó la configuración curruca incluir el archivo en el archivo de la guerra:

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

Después de desplegar todo funcionó bien. .. Muchas gracias.

Cuestiones relacionadas