2012-04-20 3 views
14

Ich lade Datenquellen über JNDI:Unknown Nullpointer in JdbcOdbcDriver.finalize() Zeile: 96

JDK 1.6.0_31 Tomcat 6.0.30

Als ich das Eclipse (Indigo SR starten 2) Debugger, es bricht an:

Daemon System Thread [Finalizer] (Suspended (exception NullPointerException)) 
    JdbcOdbcDriver.finalize() line: 96 
    Finalizer.invokeFinalizeMethod(Object) line: not available [native method] 
    Finalizer.runFinalizer() line: 83 
    Finalizer.access$100(Finalizer) line: 14  
    Finalizer$FinalizerThread.run() line: 160 

Ich bin wirklich ratlos, was das verursacht. Außerdem scheint es meine Ausführung überhaupt nicht zu beeinträchtigen. Meine Datenquellen werden wie gewohnt initialisiert und verwendet, und ich bekomme alle Ergebnisse, die ich erwarte. Von dem, was ich gelesen habe, könnte dies mit einem Oracle-Treiberproblem zusammenhängen?

myApp \ META-INF \ context.xml

<Resource name="jdbc/conn" auth="Container" 
    type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" 
    url="@[email protected]" username="user" password="@[email protected]" 
    initialSize="4" maxActive="8" 
    defaultAutoCommit="false" 
    accessToUnderlyingConnectionAllowed="true" 
    testOnReturn="true" 
    validationQuery="select 1 from dual" 
    poolPreparedStatements="false" 
    connectionProperties="SetBigStringTryClob=true" 
    factory="org.apache.commons.dbcp.BasicDataSourceFactory" 
/> 

myApp \ WEB-INF \ web.xml

<resource-ref> 
    <description>My DataSource</description> 
    <res-ref-name>jdbc/conn</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 
+3

Die Leute möchten möglicherweise den JdbcOdbcDriver [Quellcode] (http://javasourcode.org/html/open-source/jdk/jdk-6u23/sun/jdbc/odbc/JdbcOdbcDriver.java.html) als Referenz sehen. – adarshr

+0

@adarshr Der Link, den du angegeben hast, scheint jetzt auf Spam/Angeln zu zeigen (oder mein Computer ist infiziert?). Ich fand [einen anderen Link] (http://j6a.ru/_jdbc_odbc_driver_8java_source.html) dazu. – Matthieu

+0

Welche Version von Oracle JDBC Driver verwenden Sie? –

Antwort

3

Ich habe schließlich diese Ausnahme ignoriert, da es die Ausführung nicht beendet. Obwohl ich die genaue Ursache nicht kenne, scheint es nicht tödlich zu sein.

+1

Ich wünschte, Sie hätten eine Erklärung dafür gefunden, aber niemand scheint es gut zu verstehen. – Periback

+1

Dies ist eine sehr schädliche Antwort, da ignorierte Ausnahmen in der Finalisierungsmethode zu einem Speicherleck führen. –

+0

@ Gregory.K, stimme ich zu, aber wie Sie sehen können, antwortete niemand anders, und ich habe nie die wahre Lösung gefunden. –

0

Ich würde annehmen, dass Sie ein Gespräch führen zu fehlen() initialisiert werden. Das sollte eine NPE zu OdbcApi beheben.

-1

Ich dachte früher, dass dies die Antwort war. Ich habe mich geirrt.

Endlich habe ich es herausgefunden. Ich hatte einige verwaltete Beans, die von einer Datenbank unterstützt wurden. Diese verwalteten Beans wurden mit Anmerkungen versehen. @eager

Als der Server die App von Eclipse aus startete, wurden sie instanziiert und das Tool ging zur Datenbank, um die Daten zu erhalten. Ich hatte eine Ausnahme in der Methode von der Datenbank-Bean geworfen (eine Null-Zeiger-Ausnahme), und als Ergebnis wurde die Verbindung zur Datenbank offen gelassen.

Irgendwie wurde der .metadata-Ordner buggered und beschädigt. Ich habe Eclipse verlassen. Dann ging ich zum Eclipse-Arbeitsbereich und kopierte den .metadata-Ordner auf meinen Desktop, um eine sichere Kopie zu erhalten, und löschte sie dann im Arbeitsbereich.

Ich habe Eclipse neu gestartet. Es gab keine Projekte. Ich importierte sie wieder mit Import> Dateisystem.

Ich musste den Build-Pfad unter den Projekteigenschaften beheben und unter dem Fenster> Einstellungen musste ich das Tomcat Home zurücksetzen. Voila, hat dieses super nervige Problem losgeworden.

Das war die Ursache des Problems. Hoffe, das hilft jemandem.

Verwandte Themen