【发布时间】:2015-09-23 05:07:33
【问题描述】:
在我们的应用程序中,我们使用 Hibernate for ORM 并收到以下警告消息
警告:后台线程调用完成后的事务!延迟操作,直到原始线程可以处理它。 [状态=4]
这个警告信息是我们可以忽略它还是我们需要调查它?
问候, 萨库玛
【问题讨论】:
标签: java hibernate orm concurrency transactions
在我们的应用程序中,我们使用 Hibernate for ORM 并收到以下警告消息
警告:后台线程调用完成后的事务!延迟操作,直到原始线程可以处理它。 [状态=4]
这个警告信息是我们可以忽略它还是我们需要调查它?
问候, 萨库玛
【问题讨论】:
标签: java hibernate orm concurrency transactions
你需要调查一下。只有当事务由一个线程启动,然后由其他一些“清理”线程回滚时,才会发生这种情况。它可能表明您启动了一个事务但从未正确关闭它,或者某些后台清理已决定回滚一个长时间运行的事务。无论哪种方式,您都应该深入研究它。
【讨论】:
我有相同的 WARN 消息和导致事务超时的问题(因为处理需要一些时间...... 10+ 分钟)。
问题是我有一个实际上是 TimerService 的调度程序。当 TimerService 在预定的时间段用完时,它会调用 @Timeout 实现的方法,该方法将使用我的业务逻辑运行服务。这里的问题是 @Timeout 注释方法会自行启动事务,这意味着要处理大约 1000 多条记录,只有一个事务会处于活动状态,并且会在一段时间后超时。即使我为每条记录启动了新事务,第一个事务也会简单地等待那些完成并再次超时。
我通过调整 @Timeout 方法中的逻辑来修复它,只处理更小批量但更频繁的数据。
【讨论】: