我使用Glassfish 4来部署应该创建持久EJB计时器的EJB bean(TimerConfig),只要服务器不间断地运行,一切都运行良好。当服务器关闭(故意我将其关闭以进行测试用例)然后重新启动时,就会出现问题。服务器重新启动后,仍在等待timeOut的计时器将被删除。这没有意义,因为定时器被创建为持久性但每次运行上述测试用例时仍然会被删除。 以下是重新启动服务器后出现的日志信息的一部分:
Info: Loading EJBTimerService. Please wait.
Info: visiting unvisited references
Info: visiting unvisited references
Info: visiting unvisited references
Info: visiting unvisited references
Info: visiting unvisited references
Info: EJB5181:Portable JNDI names for EJB TimerBean: [java:global/ejb-timer-service-app/TimerBean, java:global/ejb-timer-service-app/TimerBean!org.glassfish.ejb.persistent.timer.TimerLocal]
Info: Loading application [ejb-timer-service-app] at [/ejb-timer-service-app]
Info: ejb.timer_service_started
Info: ==> Restoring Timers ...
Info: EclipseLink, version: Eclipse Persistence Services - 2.5.0.v20130507-3faac2b
Info: JTS5014: Recoverable JTS instance, serverId = [100]
Info: file:/C:/Users/Josimar/AppData/Roaming/NetBeans/8.0/config/GF_4.0/domain1/applications/ejb-timer-service-app/WEB-INF/classes/___EJB__Timer__App login successful
Info: [1] EJB Timers owned by this server will be restored when timeout beans are loaded
Info: <== ... Timers Restored.
Info: EJB5181:Portable JNDI names for EJB SchedulerUtil: [java:global/ApplicationCIB/framework.egov.scheduler/SchedulerUtil, java:global/ApplicationCIB/framework.egov.scheduler/SchedulerUtil!mn.interactive.framework.egov.scheduler.utils.SchedulerUtil]
Warning: Container org.glassfish.webservices.JAXWSContainer@9730004 doesn't support class com.sun.xml.ws.api.server.Module
然后有关计时器被删除的信息:
Info: [1] timers deleted for id: 93015853473529856
Info: No timers to be deleted for id: 93015853473529856
Info: No timers to be deleted for id: 93015853473529856
Info: No timers to be deleted for id: 93015853473529856
Info: No timers to be deleted for id: 93015853473529856
Info: No timers to be deleted for id: 93015853473529856
Info: No timers to be deleted for id: 93015853473529856
Info: No timers to be deleted for id: 93015853473529856
因此,一旦相应的@TimeOut出现,就不会对该计时器执行任何操作。
如何在服务器关闭后让计时器生存?
答案 0 :(得分:0)
在相应的IDE中检查服务器的首选项或设置,并将计时器提升到更高的级别。请检查您的线程是否已同步,这通常会导致我的体验出现问题。 祝你好运(Y)。