2012-04-20 14 views
5

Versione applicazione: JBoss 7.0.0, Oracle 11g (ojdbc6.jar) e JDK 6 versionejava.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 non può essere lanciato

Ho un problema quando sto cercando di inserire il valore per il tipo di dati CLOB utilizzando la funzione CLOB.createTemporary, ottenendo l'eccezione di seguito.

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

Dopo aver cercato in diversi forum, non ha trovato alcuna soluzione. https://forums.oracle.com/forums/thread.jspa?threadID=279238

Le operazioni di base necessarie per distribuire un file WAR e configurare la configurazione del pool di driver oracle JBoss sono terminate. Ma, ancora non in grado di superare questo problema.

Fornire una soluzione per risolvere questo problema.

+0

[questo] (http://stackoverflow.com/q/277665/1285418) potrebbe aiutarti. –

+0

È possibile sostituire ojdbc6.jar con ojdbc14.jar e controllare il nome della classe del driver oracle.jdbc.OracleDriver – Phani

+0

Phani, sto utilizzando la versione Java 6 e il driver corrispondente per la connessione a oracle dovrebbe essere ojdbc6.jar. Potrebbe sapere come stai mettendo in relazione questo con il file ojdbc14.jar? – Rajkumar

risposta

6

Ho risolto il problema con l'approccio seguente.

Sommario: Il caricatore di classe non deve caricare il driver Oracle dal lib/modules del server e nell'archivio Web (file WAR). Mantenere il driver Oracle solo nella lib del server (JBoss 7 ver).

JBoss 7:

  • Creato un nuovo file di JBoss descrittore di deployment (jboss-distribuzione-structure.xml)

    1. Aggiornato il (ironjacamar-jdbc-1.0.3.Final .jar) modulo ferro nel file della struttura di distribuzione jboss
    2. Creato il modulo ojdbc6.jar come modulo nella struttura JBoss 7 Aggiornato il modulo objbc nella struttura di distribuzione jboss f ile
    3. Esempio:

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

modulo Web: - Rimosso il file ojdbc6.jar dall'archivio web (file WAR)

Se trovate qualche problema nel risolvere, per favore fatemelo sapere.

+0

Solution è grande, ma prendere attenzione , i nomi dei moduli sono configurati in JBoss self. Ho dovuto cambiare 'com.oracle.ojdbc6' in' com.oracle'. – chillworld

1

Quello che sta succedendo qui è che JBoss avvolge la connessione oracle (oracle.jdbc.OracleConnection) con la propria (org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6). Devi chiamare #getUnderlyingConnection() per ottenere la connessione sottostante.

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

Tuttavia, mi chiedo se quanto segue non funzionerebbe nel tuo caso.

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

Ciao Philippe, posso capire la tua risposta. Il problema che ora sto affrontando è che non sono in grado di digitare il cast dell'oggetto "conn" all'oggetto WrappedConnection. Mentre provo a digitare, ottengo questa eccezione "java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 non può essere lanciato su oracle.jdbc.OracleConnection" – Rajkumar

+0

Quindi 'WrappedConnection # getUnderlyingConnection() 'di nuovo restituisce un' WrappedConnectionJDK6'? Hai provato a cancellare l'intero codice di 'CLOB.createTemporary' (e il cast di' WrappedConnection') e basta andare con 'ps.setClob (4, nuova StringReader (dati));' –

0

ha un problema simile in un App Rails con JRuby 1.7.2, JBoss 7.1 e Oracle (adattatore oracle_enhanced)

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

Questa soluzione ha funzionato per me.

ho messo il jboss-distribuzione-structure.xml nella cartella config/del app rotaie e aggiornato la configurazione luì per includere il file nel file di guerra:

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

Dopo implementare tutto ha funzionato bene. .. Grazie mille.