我在EJB 3中使用计时器。我有以下要求来完成。
例如:假设我创建了一个有效期为10分钟的计时器,初始计时器启动,并且正在执行一些需要更多时间的任务(比如15分钟)。同时,服务器将启动另一个具有相同名称的计时器,并且已达到到期时间。如果现有计时器仍在运行,我想限制服务器启动另一个计时器。
此外,我想停止所有计时器,但当我使用timer.getInfo()
并获取计时器名称时,应用程序会挂起。
请帮助解决此问题。
答案 0 :(得分:2)
您创建的内容看起来像是一个间隔定时器/调度程序,它会在一定时间间隔后继续执行,而不管以前的操作。
尝试手动创建计时器,在标记为@Startup的bean中使用应用程序启动进行初始化,可以进一步引用here。
//---
@Timeout
public void execute(Timer timer){
/*
-- Time consuming computation
*/
createTimer(sec, min, hour)
}
//---
因此,一旦它在应用程序启动时创建,它将创建一个计时器链。因此,即使你的任务花费的时间比平时多,下一个只会在前一个计时器完成/到期后创建。