1

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

EJB 1

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

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

4

3 回答 3

4

EJB 不应该在处理过程中等待,这对我来说是一个糟糕的设计。也许您应该考虑异步处理?(也许使用 MDB)。请抵制 using 的诱惑Thread.sleep(),这是 EJB 开发的限制之一(强调我的):

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

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

于 2012-07-18T21:36:05.487 回答
2

使用 Java EE 提供的 Timer Service:

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

您需要查看标题为“创建程序计时器”的部分

于 2012-07-18T21:23:50.470 回答
0

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

无论您将实现何种等待方法,您的 EJB 都将被阻塞 — 按照设计,它会在您的方法返回后返回到空闲 EJB 池中。这就是其他人建议采用异步处理的原因。

于 2012-07-18T22:13:35.720 回答