我有一个无状态 EJB,其方法应延迟调用不同的方法。 例如:
EJB 1
public void start()
{
waitFor3Seconds();
doSomething1();
waitFor3Seconds();
doSomething2();
waitFor3Seconds();
doSomething3();
}
如何实现 waitFor3Seconds() ? 我不想使用 Thread.sleep(),因为它会阻塞。
最佳答案
EJB 不应该在处理过程中等待,这对我来说是一个糟糕的设计。也许你应该考虑异步处理? (可能使用 MDB)。请抵制使用 Thread.sleep()
的诱惑,这是 restrictions 之一EJB 开发(强调我的):
Specifically, enterprise beans should not (...) create or manage threads.
另一种可能性是使用作业调度框架(例如 Quartz )来根据需要调度尽可能多的任务,将作业设置为在流程所需的时间一个接一个地开始。在您的示例中,需要三个作业:doSomething1()
、doSomething2()
、doSomething3()
,配置为以所需的延迟开始.
关于延迟后的 Java EJB 调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11550516/