【问题标题】:Unable to reconnect to Derby from Tomcat server started via Eclipse无法从通过 Eclipse 启动的 Tomcat 服务器重新连接到 Derby
【发布时间】:2014-04-20 22:01:26
【问题描述】:

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

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

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

我试过了:

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

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

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

任何见解将不胜感激。 谢谢!

【问题讨论】:

  • 您的问题令人困惑:有一次您谈论“Derby 端口(1527)”,而后来您谈论“嵌入式驱动程序”和“db.lck 文件”。看起来你正在尝试很多不同的事情,这使得你很难给你具体的建议。德比连接几乎从不“挂起”。相反,他们给出了例外。那么,您的程序到底遇到了什么异常?打印所有详细信息并将它们添加到您的问题中:wiki.apache.org/db-derby/UnwindExceptionChain
  • 这是我的问题的一部分——没有例外。是的,徘徊,尝试了很多事情来识别问题并让它发挥作用。我现在想知道问题是否可能不是数据库(尽管它在我尝试连接到数据库时表现出来)。我设置了一个单独的 MySQL 服务器,所以我可以连接到一个单独的数据库,我遇到了一些类似的问题。需要进行更多调查。
  • 即使使用单独的 MySQL 数据库,从 Tomcat 重新部署应用程序也会导致除简单页面请求之外的任何内容挂起。所以它与 Derby 无关(尽管当我使用数据库进行调用时确实会出现挂起;不使用数据库的 Web 请求工作)。任何建议将不胜感激。
  • 我让它返回错误而不是挂起。我是按照此处的说明进行操作的:stackoverflow.com/questions/11516747/….

标签: eclipse tomcat derby


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多