我有一个无状态EJB,其方法应该延迟调用不同的方法。 例如:
EJB 1
public void start()
{
waitFor3Seconds();
doSomething1();
waitFor3Seconds();
doSomething2();
waitFor3Seconds();
doSomething3();
}
如何实现waitFor3Seconds()? 我不想使用Thread.sleep(),因为它会阻塞。
答案 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池。这就是其他人建议采用异步处理的原因。