如何在EJB 3中创建同步计时器?

时间:2011-12-30 05:10:34

标签: java java-ee weblogic ejb-3.0

我在EJB 3中使用计时器。我有以下要求来完成。

例如:假设我创建了一个有效期为10分钟的计时器,初始计时器启动,并且正在执行一些需要更多时间的任务(比如15分钟)。同时,服务器将启动另一个具有相同名称的计时器,并且已达到到期时间。如果现有计时器仍在运行,我想限制服务器启动另一个计时器。

此外,我想停止所有计时器,但当我使用timer.getInfo()并获取计时器名称时,应用程序会挂起。

请帮助解决此问题。

1 个答案:

答案 0 :(得分:2)

您创建的内容看起来像是一个间隔定时器/调度程序,它会在一定时间间隔后继续执行,而不管以前的操作。

尝试手动创建计时器,在标记为@Startup的bean中使用应用程序启动进行初始化,可以进一步引用here

//---

     @Timeout
     public void execute(Timer timer){

       /*
          -- Time consuming computation
       */

        createTimer(sec, min, hour)
     }

//---

因此,一旦它在应用程序启动时创建,它将创建一个计时器链。因此,即使你的任务花费的时间比平时多,下一个只会在前一个计时器完成/到期后创建。