2012-04-20 30 views
5

Wersja aplikacji: JBoss 7.0.0 Oracle 11g (ojdbc6.jar) i JDK 6 wersjajava.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 nie może być rzucony

Mam problem, gdy próbuję wstawić wartość dla typu danych CLOB przy użyciu funkcji CLOB.createTemporary, uzyskując poniżej wyjątek.

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

Po wyszukiwaniu na wielu forach, nie znaleziono żadnego rozwiązania. https://forums.oracle.com/forums/thread.jspa?threadID=279238

Wykonuje podstawowe czynności wymagane do wdrożenia pliku WAR i konfiguracji konfiguracji puli sterowników Oracle JBoss. Ale wciąż nie jest w stanie przejść przez ten problem.

Proszę podać rozwiązanie, aby rozwiązać ten problem.

+0

[This] (http://stackoverflow.com/q/277665/1285418) może ci pomóc. –

+0

Czy mógłbyś zastąpić ojdbc6.jar przez ojdbc14.jar i sprawdzić nazwę klasy sterownika oracle.jdbc.OracleDriver – Phani

+0

Phani, używam wersji Java 6, a odpowiedni sterownik do podłączenia do Oracle powinien być ojdbc6.jar. Może wiedzieć, w jaki sposób odnoszą się do tego z plikiem ojdbc14.jar? – Rajkumar

Odpowiedz

6

Rozwiązałem mój problem z poniższym podejściem.

Podsumowanie: Program ładujący klasy nie powinien ładować sterownika Oracle z biblioteki/modułów serwera ani z archiwum WWW (pliku WAR). Zachowaj sterownik Oracle tylko w lib serwerze (JBoss 7 ver).

JBoss 7:

  • Utworzony plik deskryptora wdrażania JBoss (JBoss-rozmieszczenie-structure.xml)

    1. Zaktualizowano (ironjacamar-jdbc-1.0.3.Final .jar) moduł żelaza w pliku struktury wdrażania jboss
    2. Utworzono plik ojdbc6.jar jako moduł w strukturze JBoss 7 Zaktualizowano moduł objbc w strukturze rozmieszczania jboss Ile
    3. Przykład:

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

moduł Web: - usunięcia pliku z archiwum ojdbc6.jar internetowej (plik WAR)

Jeśli znajdziesz jakiś problem w rozwiązywaniu, proszę dać mi znać.

+0

Rozwiązanie jest świetne, ale należy zwrócić uwagę , nazwy modułów są konfigurowane w JBoss self. Musiałem zmienić "com.oracle.ojdbc6" na "com.oracle". – chillworld

1

Co tu się dzieje jest to, że JBoss owija połączenia Oracle (oracle.jdbc.OracleConnection) z własnym jednego (org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6). Musisz wywołać funkcję #getUnderlyingConnection(), aby uzyskać podstawowe połączenie.

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

Jednak zadaję sobie pytanie, czy poniższe przypadki nie sprawdzą się w twoim przypadku.

+0

Witam Philippe, rozumiem twoją odpowiedź. Problem, z którym teraz się borykam, polega na tym, że nie mogę wpisać obiektu "conn" do obiektu WrappedConnection. Chociaż próbuję typecast, otrzymuję ten wyjątek "java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 nie można przesłać do oracle.jdbc.OracleConnection" – Rajkumar

+0

Tak "WrappedConnection # getUnderlyingConnection() 'ponownie zwraca' WrappedConnectionJDK6'? Czy próbowałeś usunąć cały kod 'CLOB.createTemporary' (i rzut do' WrappedConnection') i po prostu użyć 'ps.setClob (4, nowy StringReader (dane));' –

0

Mam podobny problem w Rails App z JRuby 1.7.2, JBoss 7.1 i Oracle (oracle_enhanced Adapter)

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

To rozwiązanie pracował dla mnie.

Włożyłem JBoss rozmieszczeniem-structure.xml w katalogu config/app szyn i aktualizowane config warbler dołączyć plik w pliku War:

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

Po wdrożyć wszystko działało w porządku. .. Wielkie dzięki.

Powiązane problemy