Java EJB2.1计时器服务-不遵守已通过的持续时间-为7.0

Java EJB2.1计时器服务-不遵守已通过的持续时间-为7.0,java,jakarta-ee,timer,websphere,ejb-2.x,Java,Jakarta Ee,Timer,Websphere,Ejb 2.x,我有一个奇怪的问题,我正在使用EJB2.1计时器对象(无状态会话bean)在servlet的init()处触发计时器 我在EJB的timeout()方法中调用了一个方法来执行一些内务管理工作。我不希望计时器被取消。但我想让它运行 Timer myTimer=timerService.createTimer(timeOfDay、myInterval、timername) 一切正常-计时器在指定的时间启动,即现在()。它也做家务。我设定的间隔是5分钟或30万毫秒。这就是问题所在——它没有遵守我在这里

我有一个奇怪的问题,我正在使用EJB2.1计时器对象(无状态会话bean)在servlet的init()处触发计时器

我在EJB的timeout()方法中调用了一个方法来执行一些内务管理工作。我不希望计时器被取消。但我想让它运行

Timer myTimer=timerService.createTimer(timeOfDay、myInterval、timername)

一切正常-计时器在指定的时间启动,即现在()。它也做家务。我设定的间隔是5分钟或30万毫秒。这就是问题所在——它没有遵守我在这里设定的时间间隔,它每分钟超时一次,或者在1分钟内随机超时一次

容器中可能缺少的设置是什么?有人遇到过这个问题吗?如有任何建议,我们将不胜感激

服务器:WAS 7.0(商业测试服务器) Java:1.5 EJB版本:2.1

以下是日志中的堆栈跟踪:

0000001d LocalExceptio E   CNTR0020E: EJB threw an unexpected (non-declared) exception during invocation of method "ejbTimeout" on bean "BeanId(WC#WebSphereCommerceServerExtensionsData.jar#****GlobalTimers, null)". Exception data: java.lang.NullPointerException
    at com.sessionbean.globaltimer.****GlobalTimersBean.ejbTimeout(****GlobalTimersBean.java:117)
    at com.ibm.ejs.container.TimedObjectWrapper.ejbTimeout(TimedObjectWrapper.java:103)
    at com.ibm.ejs.container.TimerTaskHandler.doWork(TimerTaskHandler.java:271)
    at com.ibm.ws.scheduler.AlarmListener.executeTaskWithNotification(AlarmListener.java:796)
    at com.ibm.ws.scheduler.AlarmListener.access$700(AlarmListener.java:121)
    at com.ibm.ws.scheduler.AlarmListener$TaskWork.doWork(AlarmListener.java:427)
    at com.ibm.ws.scheduler.AlarmListener$TaskWork.run(AlarmListener.java:213)
    at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:782)
    at com.ibm.ws.asynchbeans.ExecutionContextImpl.go(ExecutionContextImpl.java:86)
    at com.ibm.ws.scheduler.AlarmListener.fireTask(AlarmListener.java:1401)
    at com.ibm.ws.scheduler.AlarmListener.fired(AlarmListener.java:1319)
    at com.ibm.ws.asynchbeans.AlarmImpl.callListenerMethod(AlarmImpl.java:340)
    at com.ibm.ws.asynchbeans.timer.GenericTimer.run(GenericTimer.java:216)
    at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:1150)
    at com.ibm.ws.asynchbeans.AlarmImpl.runListenerAsCJWork(AlarmImpl.java:175)
    at com.ibm.ws.asynchbeans.am._Alarm.fireAlarm(_Alarm.java:333)
    at com.ibm.ws.asynchbeans.am._Alarm.run(_Alarm.java:230)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1646)

[4/7/15 23:20:52:344 MDT] 0000001d AlarmListener E   SCHD0063E: A task with ID 352 failed to run on Scheduler WebSphere_EJB_Timer_Service (WebSphere_EJB_Timer_Service) because of an exception: com.ibm.ejs.container.UnknownLocalException: nested exception is: java.lang.NullPointerException.
[4/7/15 23:20:52:328 MDT] 0000001d FfdcProvider  W com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on J:\WCDE_E~1\wasprofile\logs\ffdc\server1_640a640a_15.04.07_23.20.52.0476810994631708349156.txt com.ibm.ejs.container.LocalExceptionMappingStrategy.setUncheckedException 178
[4/7/15 23:20:52:344 MDT] 0000001d FfdcProvider  W com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on J:\WCDE_E~1\wasprofile\logs\ffdc\server1_640a640a_15.04.07_23.20.52.328399068925450035540.txt com.ibm.ws.scheduler.AlarmListener.TaskWork.fireTask 390

谢谢

在某个地方的日志文件中将有一个堆栈跟踪。将其添加到您的问题中使用堆栈跟踪程序更新它,如果失败次数太多,跟踪程序将自动取消。您的超时方法似乎因NullPointerException而失败。为什么会这样?如果修复NPE会发生什么?使用was服务器的/bin目录中的命令
findejbtimers
验证服务器控制台。感谢另一个帖子的@bMail。已实现的EJB2.1规范仅支持持久计时器,并且在服务器关闭时不会取消计时器。有一些现有的计时器任务需要在服务器重新启动时取消,这是我通过编程完成的,问题得到了解决。基本上,除了启动时创建的守护进程线程外,不应该有其他守护进程线程。注意到当我在
ejbtimeout()
方法中打印出
Timer
对象时,有一个空引用。@Jauyzed您应该写最后一条注释作为您自己问题的答案(并接受它)。