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

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

3 回答 3

3

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

于 2012-11-27T20:25:32.953 回答
0

我会假设你错过了对初始化()的调用。那应该将 NPE 修复为 OdbcApi。

于 2012-10-09T00:03:37.287 回答
-1

我以前认为这就是答案。我错了。

最后我想通了。我有一些由数据库支持的托管 bean。这些托管 bean 被注释了 @eager

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

不知何故,.metadata 文件夹被破坏和损坏。我退出了 Eclipse。然后我去 Eclipse 工作区,将 .metadata 文件夹复制到我的桌面以获取安全副本,然后我在工作区中将其删除。

我重新启动了 Eclipse。没有项目。我使用 Import > File System 将它们重新导入。

我必须在项目属性和窗口>首选项下修复构建路径,我必须重置Tomcat主页。瞧,摆脱了这个超级烦人的问题。

这就是问题的原因。希望这可以帮助某人。

于 2017-01-27T07:31:55.830 回答