我正在使用以下方式通过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>
答案 0 :(得分:3)
我最终忽略了这个异常,因为它没有结束执行。虽然我不知道确切原因,但似乎并不致命。
答案 1 :(得分:0)
我认为你错过了对initialize()的调用。这应该将NPE修复为OdbcApi。
答案 2 :(得分:-1)
我之前认为这就是答案。我错了。
最后我明白了。我有一些由数据库支持的托管bean。这些托管bean注释了@eager
当服务器从eclipse启动应用程序时,它们被实例化,工具进入数据库以获取数据。我从数据库bean抛出异常(空指针异常),因此,与数据库的连接保持打开状态。
不知何故,.metadata文件夹被破坏并损坏。我退出了Eclipse。然后我去了Eclipse工作区并将.metadata文件夹复制到我的桌面以获得安全副本,然后我在工作区中将其删除。
我重新启动了Eclipse。没有项目。我使用Import&gt;导入了它们。文件系统。
我必须修改项目属性下的Build Path并在Window&gt;下面。首选项,我不得不重置Tomcat Home。瞧,摆脱了这个超级恼人的问题。
这就是问题的原因。希望这有助于某人。