【问题标题】:WFLYEJB0043:A previous execution of timer is still in progress,skipping this overlapping scheduled execution atWFLYEJB0043:定时器的先前执行仍在进行中,跳过此重叠的计划执行
【发布时间】:2021-04-08 10:03:06
【问题描述】:

我使用的是 jbpm 7.37 版本。我们使用的是 wildfly 14.0。服务器在部署war文件后异常给出以下错误:

WARN  [org.jboss.as.ejb3.timer] (EJB default - 2) WFLYEJB0043: A previous execution of timer [id=6
9baf0d9-60b4-4775-982b-bf525682df3d timedObjectId=business-central.business-central.FileSystemDeleteWorker auto-timer?:tru
e persistent?:false timerService=org.jboss.as.ejb3.timerservice.TimerServiceImpl@1ed2f93a initialExpiration=null intervalD
uration(in milli sec)=0 nextExpiration=Thu Apr 08 03:48:00 UTC 2021 timerState=IN_TIMEOUT info=null] is still in progress,
 skipping this overlapping scheduled execution at: Thu Apr 08 03:58:24 UTC 2021.

此问题的可能根本原因是什么? 如何解决这个问题? 此问题最常见于 TEST 环境。请帮助。

注意:我们已经制作了自定义 REST API 并部署在 kie-server.war 文件中。这个问题导致我的 kie-server.war 文件无法进一步使用,因此我们的自定义 API 不可用并且使应用程序下降。这是我们面临的严重问题。请帮助。

【问题讨论】:

  • @James R. Perkins 你能帮忙吗?
  • 该错误表明问题 - 计时器正在运行,然后它尝试再次运行。如果这没问题,那么您可以忽略该消息。否则你需要一些代码来防止这种情况发生。
  • 这个错误使我的war文件不可用,所以我所有的自定义api都没有找到。正在关闭应用程序。我应该做什么代码来防止这种情况?
  • 一般情况下,like this 是标准方式,但尚不清楚这是否适用于您的环境。
  • 我建议您分享您的代码和超时方法以及包含它的 bean。这是一个计时器重叠,您的服务器会警告您在当前执行停止之前它不会再次执行。您可能在一个团队中工作,每个人都根据自己的意愿进行部署,因此您最终会遇到有人注册了超时/预定方法但没有告诉其他人的情况。

标签: java jboss wildfly jbpm wildfly-14


【解决方案1】:

部署正在计划一个 EJB 计时器,该时间间隔在 JBoss 进入启动状态之前到期。由于 JBoss 在完成部署所有内容之前处于挂起状态,因此计时器可能会在允许之前触发,因此一旦 JBoss 进入启动状态,您将看到一些警告,表明计时器无法调用,因为 JBoss 没有完成所有部署。

所以这些警告可以忽略。

根本原因: EJB 3.2 规范部分 [13.4.3 Timer Expiration and Timeout Callback Method] 有一段与此主题有些相关:

在容器崩溃或容器关闭的情况下,任何在容器重启前的中间时间内过期的单事件持久计时器必须导致在重启时调用相应的超时回调方法。任何在中间时间过期的间隔持久定时器或基于调度的持久定时器必须在重启时至少调用一次相应的超时回调方法。

【讨论】:

  • 但这导致我的部署不可用并且服务已关闭,可能的解决方案是什么?
  • 这不应使您的服务不可用。这只是一个容器管理的锁,用于控制对单例方法的访问。在 Wildfly 中,它的实现方式是,如果最后一次执行尚未完成,它不会运行两次。
猜你喜欢
  • 2016-03-18
  • 2019-12-16
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
相关资源
最近更新 更多