无法从通过Eclipse启动的Tomcat服务器重新连接到Derby

时间:2014-03-15 14:10:12

标签: eclipse tomcat derby

我使用Eclipse 4.2在Win 7上运行,在Tomcat 7服务器上启动Web应用程序并使用Derby数据库。我尝试了很多方法,但始终坚持一个共同的问题:

  • 第一次启动和运行时,一切正常。
  • 在更改后重新部署应用程序时,所有数据库连接都会挂起(任何类型的重新启动)。
  • 如果我停止Eclipse并重新启动Eclipse,那么就可以解决问题并且下一次运行再次正常运行。

完成一些调查之后,问题似乎是Derby端口(1527)没有从服务器的一次执行释放到下一次。这对我来说似乎很奇怪,因为Derby是由Tomcat实例启动的,这是一个单独的javaw进程。

我试过了:

  • 将Derby连接配置为Tomcat资源
  • 在我的代码中建立连接(而不是通过Tomcat资源)
  • 嵌入式和网络驱动程序
  • 在启动和关闭Tomcat服务器时从servlet启动/停止网络驱动程序
  • 关闭Tomcat时通过servlet关闭嵌入式驱动程序

同样,每种方法都可以在第一次连接时正常工作。

另一个似乎没有关联的症状(除了作为关闭是否正确完成的可能指示之外)是我的数据库的db.lck文件永远不会被删除。但是,它是否存在与我是否可以重新连接无关(只有停止/启动日食会产生影响)。

任何见解都将受到赞赏。 谢谢!

2 个答案:

答案 0 :(得分:1)

经过进一步调查后,我打算将其称为Cannot create JDBC driver of class ' ' for connect URL 'null' : I do not understand this exception的复制品。这不是一回事,但是这个解决方案(创建META-INF / context.xml)允许它继续进行失败的调用而不是挂起,这是一个重大改进,并表明它在很大程度上是相关的。

答案 1 :(得分:0)

我终于搞清楚了。事实证明我在Eclipse中的应用程序的部署程序集中的Tomcat lib文件夹(对于Tomcat)中有derby jar(而不仅仅是在构建路径中)。所以Tomcat使用内置的libs,而我的应用程序使用的是嵌入式库,这导致了冲突。将libs作为Tomcat的一部分并从war文件中删除它们完全解决了这个问题。