JdbcOdbcDriver.finalize()第96行出现未知的NullPointerException错误。

14

我正在使用JNDI加载数据源:

JDK 1.6.0_31 Tomcat 6.0.30

当我启动Eclipse (Indigo 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="@url@" username="user" password="@password@"
    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"
/>

我的应用程序\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
@adarshr,您提供的链接似乎现在指向垃圾邮件/钓鱼网站(或者我的电脑被感染了?)。我找到了另一个链接:http://j6a.ru/_jdbc_odbc_driver_8java_source.html。 - Matthieu
你使用的是哪个版本的Oracle JDBC驱动程序? - Gregory.K
3个回答

3

最终,我忽略了这个异常,因为它并不会终止执行。虽然我不知道确切的原因,但它似乎不是致命的。


1
我希望你能找到一个解释,但似乎没有人真正理解它。 - sergioviniciuss
1
这是非常有害的答案,因为在终结方法中忽略异常会导致内存泄漏。 - Gregory.K
@Gregory.K,我同意,但是你可以看到,没有其他人回复,而且我也没有找到真正的解决方案。 - Justin Skiles

0
我猜你可能忘了调用initialize()方法。这应该可以解决一个指向OdbcApi的NPE问题。

-1

我之前以为这就是答案,但我错了。

最终,我找到了问题所在。我的一些托管 bean 是由数据库支持的,并被注释为 @eager。

当服务器从 Eclipse 启动应用程序时,它们被实例化并且工具去数据库获取数据。数据库 bean 的方法(一个空指针异常)抛出了一个异常,结果是数据库连接被保持打开状态。

不知何故,.metadata 文件夹出现了问题并且损坏了。我退出 Eclipse,然后进入 Eclipse 工作区并将 .metadata 文件夹复制到桌面上以备份,然后在工作区中将其删除。

我重新启动了 Eclipse,发现没有项目了。使用导入 > 文件系统将它们带回。

我必须在项目属性下修复 Build Path,在 Window > Preferences 下重置 Tomcat Home。大功告成,摆脱了这个超级烦人的问题。

这就是问题的原因。希望能对某人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接