2012-04-20 65 views
14

我使用通過JNDI加載數據源:未知的NullPointerException在JdbcOdbcDriver.finalize()線:96

JDK 1.6.0_31 的Tomcat 6.0.30

當我啓動了Eclipse(靛藍SR 2 )調試器,它打破:

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 

我真的在虧本,至於什麼是造成這種情況。此外,它似乎沒有影響我的執行。我的數據源被初始化並用作正常的,並且我得到了所有我期望的結果。從我讀過的內容來看,這可能與Oracle驅動程序問題有關?

對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

人可能希望看到的JdbcOdbcDriver [源代碼(http://javasourcecode.org/html/open-source/jdk/jdk-6u23/sun/jdbc/odbc/JdbcOdbcDriver.java.html)以供參考。 – adarshr 2012-04-20 13:58:02

+0

@adarshr你給的鏈接似乎現在指向垃圾郵件/釣魚(或我的電腦被感染?)。我發現[另一個鏈接](http://j6a.ru/_jdbc_odbc_driver_8java_source.html)。 – Matthieu 2014-07-01 11:35:35

+0

您使用的是哪種版本的Oracle JDBC驅動程序? – 2017-01-26 16:51:25

回答

3

我最終最終忽略了這個異常,因爲它不會結束執行。雖然我不知道確切的原因,但它似乎並不致命。

+1

我希望你找到了它的解釋,但似乎沒有人理解它.. – Periback 2013-05-24 02:09:15

+1

這是非常有害的答案,因爲在定稿方法中忽略異常會導致內存泄漏。 – 2017-01-26 18:47:46

+0

@ Gregory.K,我同意,但正如你所看到的,沒有人迴應,我從來沒有找到真正的解決方案。 – 2017-01-26 22:04:08

0

我會假設你錯過了一個電話來初始化()。這應該修復NPE到OdbcApi。

-1

我以前認爲這是答案。我錯了。

最後我想通了。我有一些受數據庫支持的託管bean。這些託管的bean被註釋@eager

當服務器從eclipse啓動應用程序時,它們被實例化並且工具進入數據庫以獲取數據。我從數據庫bean中拋出了一個異常(一個空指針異常),結果與數據庫的連接仍處於打開狀態。

不知何故,.metadata文件夾被糾纏起來並損壞。我退出了Eclipse。然後我去了Eclipse工作區並將.metadata文件夾複製到我的桌面以獲得安全副本,然後在工作區中將其刪除。

我重新啓動了Eclipse。沒有項目。我使用導入>文件系統將它們導入。

我必須修復項目屬性下的Build Path,並在Window> Preferences下,我必須重置Tomcat Home。瞧,擺脫這個超級煩人的問題。

這是問題的原因。希望這可以幫助某人。

相關問題