为什么这个简单的调度程序不起作用?
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());
}
}
堆栈:JDK 8,Wildfly 10
错误日志:
09:31:31,781 WARN [org.jboss.as.ejb3] (EJB default - 9) WFLYEJB0161:
Failed to reinstate timer 'config-api.config-api.CIScheduler'
(id=f571b03a-efa 9-467d-a9de-b17d88bf54c7) from its persistent state
09:31:31,783 ERROR [org.jboss.as.ejb3] (EJB default - 9) WFLYEJB0022:
Error duri ng retrying timeout for timer:
[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(in
milli sec)=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 default - 2) WFLYEJB0021:
Timer: [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(in milli sec)=5000
nextExpiration=Wed Jun 15 09:49:47 BRT 2016 timerState=IN_TIMEOUT
info=myTimerInterval] will be retried 09:49:42,179 INFO
[org.jboss.as.ejb3] (EJB default - 2) WFLYEJB0023: Retrying t imeout
for timer: [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(in milli sec)=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
default - 2) WFLYEJB0022: Error duri ng retrying timeout for timer:
[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(in
milli sec)=5000 n extExpiration=Wed Jun 15 09:49:47 BRT 2016
timerState=RETRY_TIMEOUT info=myTimer Interval]:
javax.ejb.EJBException: java.lang.IllegalArgumentException: argument
type mismatch
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInt
erceptor.java:187)
.......
@Timeout注解的方法只允许有javax.ejb.Timer类型的参数。您无意中从 util 包 (java.util.Timer) 中导入了 Timer。如果您修复了导入,计时器应该会像一个魅力:)。
要解决该问题,您必须执行以下步骤:
- 使用
@Schedule
取消部署具有定时器服务的 war 或 jar 或 ear
在您的 Wildfly 服务器上转到此路径:wildfly-13.0.0.Final/standalone/data/timer-service-data/
并删除您的内容,如下所示:eSocialWeb-1.0-SNAPSHOT.eSocialWeb-1.0-SNAPSHOT.ESocialTimer
.
再次部署您的 war 或罐子或耳朵并微笑!
因此,您再也不会看到此消息,除非您更改计时器中的内容 @Schedule
:
[org.jboss.as.ejb3.timer] (ServerService Thread Pool -- 92) WFLYEJB0161: Failed to reinstate timer 'eSocialWeb-1.0-SNAPSHOT.eSocialWeb-1.0-SNAPSHOT.ESocialTimer'
我做错了什么吗?
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());
}
}
堆栈:JDK 8,Wildfly 10
错误日志:
09:31:31,781 WARN [org.jboss.as.ejb3] (EJB default - 9) WFLYEJB0161: Failed to reinstate timer 'config-api.config-api.CIScheduler' (id=f571b03a-efa 9-467d-a9de-b17d88bf54c7) from its persistent state 09:31:31,783 ERROR [org.jboss.as.ejb3] (EJB default - 9) WFLYEJB0022: Error duri ng retrying timeout for timer: [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(in milli sec)=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 default - 2) WFLYEJB0021: Timer: [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(in milli sec)=5000 nextExpiration=Wed Jun 15 09:49:47 BRT 2016 timerState=IN_TIMEOUT info=myTimerInterval] will be retried 09:49:42,179 INFO [org.jboss.as.ejb3] (EJB default - 2) WFLYEJB0023: Retrying t imeout for timer: [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(in milli sec)=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 default - 2) WFLYEJB0022: Error duri ng retrying timeout for timer: [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(in milli sec)=5000 n extExpiration=Wed Jun 15 09:49:47 BRT 2016 timerState=RETRY_TIMEOUT info=myTimer Interval]: javax.ejb.EJBException: java.lang.IllegalArgumentException: argument type mismatch at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInt erceptor.java:187) .......
@Timeout注解的方法只允许有javax.ejb.Timer类型的参数。您无意中从 util 包 (java.util.Timer) 中导入了 Timer。如果您修复了导入,计时器应该会像一个魅力:)。
要解决该问题,您必须执行以下步骤:
- 使用
@Schedule
取消部署具有定时器服务的 war 或 jar 或 ear
在您的 Wildfly 服务器上转到此路径:
wildfly-13.0.0.Final/standalone/data/timer-service-data/
并删除您的内容,如下所示:eSocialWeb-1.0-SNAPSHOT.eSocialWeb-1.0-SNAPSHOT.ESocialTimer
.再次部署您的 war 或罐子或耳朵并微笑!
因此,您再也不会看到此消息,除非您更改计时器中的内容 @Schedule
:
[org.jboss.as.ejb3.timer] (ServerService Thread Pool -- 92) WFLYEJB0161: Failed to reinstate timer 'eSocialWeb-1.0-SNAPSHOT.eSocialWeb-1.0-SNAPSHOT.ESocialTimer'