尝试在事务外部执行读取查询时检测到通信故障.正在尝试重试查询



我正在运行一个带有 jetty 9.4.7.v20170914 的 Web 服务器,并使用 Apache Derby 10.14.1.0 连接到数据库。我的大多数事务都工作正常,但是当数据库处于繁重负载期间时,查询开始失败,挂起数据库直到成功完成。我正在运行一个脚本,该脚本可以抓取网站并在数据库中批量插入数千个对象,此问题导致它需要大量时间才能完成。

单元测试适用于每个数据库操作,我已经检查了我的 EntityManager 使用情况,以确保我正确打开、提交和关闭事务。我尝试过其他版本的Eclipselink,Jetty和Derby,但它没有解决问题。

问题发生在不同的查询中,但我相信它总是发生在 SELECT 语句中。请注意,我在创建对象之前检查对象是否存在,但它们是两个单独的事务。

[EL Info]: query: 2018-06-13 16:03:48.344--UnitOfWork(1800307564)--Communication failure detected when attempting to perform read query outside of a transaction. Attempting to retry query. Error was: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.5.v20170607-b3d05bd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLNonTransientConnectionException: java.net.BindException : Error connecting to server localhost on port 1,527 with message Address already in use: connect.
Error Code: 40000
Call: SELECT t1.ID, t1.PARENTADDITIVECLASSID FROM ADDITIVE t0, ADDITIVE_ADDITIVECLASS t2, ADDITIVECLASS t1 WHERE ((t0.ID = ?) AND ((t2.additiveClasses_ID = t1.ID) AND (t0.ID = t2.additives_ID)))
bind => [1 parameter bound]
Query: ReadAllQuery(name="entity.Additive.GET_ADDITIVECLASSES" referenceClass=AdditiveClass sql="SELECT t1.ID, t1.PARENTADDITIVECLASSID FROM ADDITIVE t0, ADDITIVE_ADDITIVECLASS t2, ADDITIVECLASS t1 WHERE ((t0.ID = ?) AND ((t2.additiveClasses_ID = t1.ID) AND (t0.ID = t2.additives_ID)))").

我也会遇到以下例外情况,尽管没有那么频繁。

https://pastebin.com/DWzdhejz

https://pastebin.com/0NZ8keF9

将数据库迁移到本机 Ubuntu 18.04 安装后,问题消失了(在 VMware Workstation 14 上运行相同的映像并不能解决问题(。正如@Chris在评论中指出的那样,这可能是Windows如何分配出站TCP端口的问题。我可以为此使用 Linux,但如果有人在 Windows 上遇到这些问题,请务必查看本指南。请注意,我自己还没有测试过这些步骤。

最新更新