繁体   English   中英

为什么这个简单的调度程序不起作用?

[英]Why this simple scheduler does not work?

我做错了吗?

import java.util.Date;
import java.util.Timer;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.Timeout;
import javax.ejb.TimerService;

@Singleton
@LocalBean
@Startup
public class CIScheduler {

    @Resource
    private TimerService timerService;

    @PostConstruct
    public void init() {
        timerService.createTimer(1000, 5000, "myTimerInterval");
    }

    @Timeout
    public void execute(Timer timer) {
        System.out.println("Current Time : " + new Date());
    }
}

Stack:JDK 8,Wildfly 10

错误日志:

09:31:31,781 WARN [org.jboss.as.ejb3](EJB默认值 - 9)WFLYEJB0161:无法恢复计时器'config-api.config-api.CIScheduler'(id = f571b03a-efa 9-467d-a9de- b17d88bf54c7)从其持久状态09:31:31,783 ERROR [org.jboss.as.ejb3](EJB默认值 - 9)WFLYEJB0022:计时器重试超时错误:[id = 35f55f82-a982-43d8-bece-42cfc89debe8 timedObj ectId = config-api.config-api.CIScheduler auto-timer?:false persistent?:true timerService =org.jboss.as.ejb3.timerservice.TimerServiceImpl@1eef0fd init ialExpiration = Wed Jun 15 09:20:46 BRT 2016 intervalDuration (以毫秒为单位)= 5000 n extExpiration = Wed Jun 15 09:31:36 BRT 2016 timerState = RETRY_TIMEOUT info = myTimer Interval]:javax.ejb.EJBException:java.lang.IllegalArgumentException:ja va.lang.ClassCastException@1da01b2

样本摘自: https//examples.javacodegeeks.com/enterprise-java/ejb3/timer/ejb-timer-service-example/

更新:我清理了数据和tmp文件夹,错误日志更改为:

09:49:42,178 INFO [org.jboss.as.ejb3](EJB默认值 - 2)WFLYEJB0021:计时器:[id = 26b74afb-625d-4007-a786-1c0caa92a70b timedObjectId = configuracao-api.config-api.CIScheduler auto- timer?:false persistent?:true timerService = org.jboss.as.e jb3.timerservice.TimerServiceImpl@1b701e2 initialExpiration = Wed Jun 15 09:49:37 BRT 2016 intervalDuration(以毫秒为单位)= 5000 nextExpiration = Wed Jun 15 09 :49:47 BRT 2016 timerState = IN_TIMEOUT info = myTimerInterval]将被重试09:49:42,179 INFO [org.jboss.as.ejb3](EJB默认值 - 2)WFLYEJB0023:重试计时器:[id = 26b74afb- 625d-4007-a786-1c0caa92a70b timedObjectId = config-api.config-api.CIScheduler auto-timer ?: false persistent?:true timerS ervice=org.jboss.as.ejb3.timerservice.TimerServiceImpl@1b701e2 initialExpiration = Wed Jun 15 09 :49:37 BRT 2016 intervalDuration(以毫秒为单位)= 5000 nextExpiration = Wed Jun 15 09:49:47 BRT 2016 timerState = IN_TIMEOUT info = myTimerInterval] 09:49:42,181 ERROR [org.jboss.as.ejb3](EJB默认 - 2)WFLYEJB0022:E rror duri ng计时器的重试超时:[id = 26b74afb-625d-4007-a786-1c0caa92a70b timedObj ectId = config-api.config-api.CIScheduler auto-timer ?: false persistent?:true timerService = org.jboss.as。 ejb3.timerservice.TimerServiceImpl@1b701e2 init ialExpiration = Wed Jun 15 09:49:37 BRT 2016 intervalDuration(以毫秒为单位)= 5000 n extExpiration = Wed Jun 15 09:49:47 BRT 2016 timerState = RETRY_TIMEOUT info = myTimer Interval]: javax.ejb.EJBException:java.lang.IllegalArgumentException:org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInt erceptor.java:187)中的参数类型不匹配.......

使用@Timeout注释的方法只允许使用类型为javax.ejb.Timer的参数。 您无意中从util包(java.util.Timer)导入了Timer。 如果您修复导入,计时器应该像魅力:)。

要解决该问题,您必须执行以下步骤:

  1. 使用@Schedule取消部署具有计时器服务的战争或罐子或耳朵
  2. 在wildfly服务器上转到此路径: wildfly-13.0.0.Final/standalone/data/timer-service-data/并删除您的内容,如下所示: eSocialWeb-1.0-SNAPSHOT.eSocialWeb-1.0-SNAPSHOT.ESocialTimer

  3. 再次部署你的战争或罐子或耳朵并微笑!

因此,除非您在计时器@Schedule更改了某些内容,否则您再也不会看到此消息:

[org.jboss.as.ejb3.timer] (ServerService Thread Pool -- 92) WFLYEJB0161: Failed to reinstate timer 'eSocialWeb-1.0-SNAPSHOT.eSocialWeb-1.0-SNAPSHOT.ESocialTimer'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM