延迟后的Java EJB调用方法

时间:2012-07-18 21:19:02

标签: java timer ejb delay

我有一个无状态EJB,其方法应该延迟调用不同的方法。 例如:

EJB 1

public void start()
{
   waitFor3Seconds();
   doSomething1();
   waitFor3Seconds();
   doSomething2();
   waitFor3Seconds();
   doSomething3();
}

如何实现waitFor3Seconds()? 我不想使用Thread.sleep(),因为它会阻塞。

3 个答案:

答案 0 :(得分:3)

EJB不应该在处理期间等待,它对我来说闻起来像一个糟糕的设计。也许你应该考虑异步处理? (也许使用MDB)。并且,请抵制使用Thread.sleep()的诱惑,这是EJB开发的restrictions之一(强调我的):

  

具体而言,企业bean不应该(......)创建或管理线程

另一种可能性是使用作业调度框架(例如,Quartz)来根据需要调度任意数量的任务,将作业设置为在您的流程所需的时间一个接一个地启动。在您的示例中,需要三个作业:doSomething1()doSomething2()doSomething3(),配置为以所需的延迟开始。

答案 1 :(得分:2)

使用Java EE提供的定时服务:

http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html#bnbpa

您需要看到标题为“创建编程定时器”的部分

答案 2 :(得分:0)

  

如何实现waitFor3Seconds()?我不想使用Thread.sleep(),因为它会阻塞。

无论你实现什么样的等待方法,你的EJB都会被阻塞 - 按照设计,它会在你的方法返回后返回到免费的EJB池。这就是其他人建议采用异步处理的原因。