我一直在按照Adam Bean 的例子做一个计时器,但它不能正常工作。我创建了一个@Singleton
EJB,其中的方法用@Schedule
. 应用程序部署到wildfly 11。我这里有两个问题。第一个是,我的计时器每秒记录一次,而不是每分钟记录一次。第二个问题是,每次触发时间时,我都会收到一条错误消息。
有人可以给我一个提示,我做错了什么?也许我只是瞎了眼,看不见。
我的课:
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import java.util.logging.Logger;
@Singleton
public class DeviceTrackerCronJob {
private static final Logger LOG = Logger.getLogger(DeviceTrackerCronJob.class.getName());
private long counter;
@Schedule(second = "*", minute = "*/1", hour = "*", info = "Every Minute!")
public void execute() {
LOG.info("### --- FAKING SOME CONTENT " + counter++);
}
}
我得到的信息是:
12:42:03,025 信息 [de.klemensmorbe.tracking.DeviceTrackerCronJob](EJB 默认 - 1)### --- 伪造某些内容 575 12:42:04,040 错误 [org.jboss.as.ejb3.timer](EJB默认值 - 1) WFLYEJB0020: 为计时器调用超时时出错:[id=a797d1ca-e550-41e4-bfe7-46066f7b24b3 timedObjectId=web.web.DeviceTrackerCronJob auto-timer?:false persistent?:true timerService=org.jboss.as.ejb3 .timerservice.TimerServiceImpl@c39b6bb initialExpiration=null intervalDuration(毫秒)=0 nextExpiration=2018 年 1 月 3 日星期三 12:42:05 UTC timerState=IN_TIMEOUT info=null]:java.lang.RuntimeException:WFLYEJB0343:无法调用超时方法,因为方法 null 不是 org.jboss.as.ejb3//org.jboss.as.ejb3.timerservice.TimedObjectInvokerImpl.callTimeout(TimedObjectInvokerImpl.java:83) 在 org.jboss.as.ejb3//org.jboss 的超时方法.as.ejb3.timerservice。TimedObjectInvokerImpl.callTimeout(TimedObjectInvokerImpl.java:109) at org.jboss.as.ejb3//org.jboss.as.ejb3.timerservice.CalendarTimerTask.invokeBeanMethod(CalendarTimerTask.java:66) at org.jboss.as.ejb3// org.jboss.as.ejb3//org.jboss.as.ejb3.timerservice.TimerTask.run(TimerTask.java:160) 的 org.jboss.as.ejb3.timerservice.CalendarTimerTask.callTimeout(CalendarTimerTask.java:53)在 org.jboss.as.ejb3//org.jboss.as.ejb3.timerservice.TimerServiceImpl$Task$1.run(TimerServiceImpl.java:1220) 在 org.wildfly.extension.request-controller//org.wildfly.extension .requestcontroller.RequestController$QueuedTask$1.run(RequestController.java:497) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.base/java.util.concurrent.ThreadPoolExecutor$工人。在 org.jboss.threads//org.jboss.threads.JBossThread.run(JBossThread.java:320) 的 java.base/java.lang.Thread.run(Thread.java:844) 运行(ThreadPoolExecutor.java:641) )
12:42:04,041 INFO [org.jboss.as.ejb3.timer](EJB 默认值 - 1)WFLYEJB0021:计时器:[id=a797d1ca-e550-41e4-bfe7-46066f7b24b3 timedObjectId=web.web.DeviceTrackerCronJob 自动计时器? :false persistent?:true timerService=org.jboss.as.ejb3.timerservice.TimerServiceImpl@c39b6bb initialExpiration=null intervalDuration(in milli sec)=0 nextExpiration=Wed Jan 03 12:42:05 UTC 2018 timerState=IN_TIMEOUT info=null ] 将重试 12:42:04,041 INFO [org.jboss.as.ejb3.timer](EJB 默认 - 1)WFLYEJB0023:重试计时器超时:[id=a797d1ca-e550-41e4-bfe7-46066f7b24b3 timedObjectId=web。 web.DeviceTrackerCronJob auto-timer?:false persistent?:true timerService=org.jboss.as.ejb3.timerservice.TimerServiceImpl@c39b6bb initialExpiration=null intervalDuration(in milli sec)=0 nextExpiration=Wed Jan 03 12:42:05 UTC 2018 timerState=IN_TIMEOUT info=null] 12:42:04,042 错误 [org.jboss.as.ejb3.timer](EJB 默认值 - 1)WFLYEJB0022:重试计时器超时期间出错:[id=a797d1ca-e550-41e4-bfe7-46066f7b24b3 timedObjectId=web.web.DeviceTrackerCronJob 自动计时器?:false persistent?:true timerService=org.jboss.as.ejb3.timerservice.TimerServiceImpl@c39b6bb initialExpiration=null intervalDuration(in milli sec)=0 nextExpiration=2018 年 1 月 3 日星期三 12:42:05 UTC timerState=RETRY_TIMEOUT info= null]:java.lang.RuntimeException:WFLYEJB0343:无法调用超时方法,因为方法 null 不是 org.jboss.as.ejb3//org.jboss.as.ejb3.timerservice.TimedObjectInvokerImpl.callTimeout 的超时方法(TimedObjectInvokerImpl.java :83) org.jboss.as.ejb3//org.jboss.as.ejb3.timerservice.TimedObjectInvokerImpl.callTimeout(TimedObjectInvokerImpl.java:109) org.jboss.as.ejb3//org.jboss.as.ejb3 .timerservice.CalendarTimerTask.invokeBeanMethod(CalendarTimerTask.java:66) at org.jboss.as.ejb3//org.jboss.as.ejb3.timerservice.CalendarTimerTask.callTimeout(CalendarTimerTask.java:53) at org.jboss.as.ejb3 //org.jboss.as.ejb3.timerservice.TimerTask.retryTimeout(TimerTask.java:234) at org.jboss.as.ejb3//org.jboss.as.ejb3.timerservice.TimerTask.run(TimerTask.java: 168) 在 org.wildfly.extension.request-controller//org.wildfly 的 org.jboss.as.ejb3//org.jboss.as.ejb3.timerservice.TimerServiceImpl$Task$1.run(TimerServiceImpl.java:1220) .extension.requestcontroller.RequestController$QueuedTask$1.run(RequestController.java:497) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 在 java.base/java.util.concurrent。线程池执行器$Worker。在 org.jboss.threads//org.jboss.threads.JBossThread.run(JBossThread.java:320) 的 java.base/java.lang.Thread.run(Thread.java:844) 运行(ThreadPoolExecutor.java:641) )