在EJB中使用@Timeout而不是Thread.sleep()

时间:2017-01-30 13:47:34

标签: java multithreading java-ee ejb

我两次从我的代码中点击一个web服务。第一个命中给我一个product_ID,使用它作为路径参数我进行第二次调用,它给出了响应。

问题是第二次(GET)调用应该在第一次(POST)调用后2秒钟内被调用。我在我的项目中使用EJB,最简单的解决方案是使用Thread.sleep(2000)。但EJB不建议程序员自己管理线程。

在我的研究中,我发现了一个可能的解决方案,但由于我缺乏EJB技能,我无法理解它。有人可以指导我解决这个问题。

可能的解决方案的URL是:Using the EJB3 timer service instead of Thread.sleep()

1 个答案:

答案 0 :(得分:3)

在第一次通话的方法中,您应该在第一次通话后创建一个程序化单动作计时器,延迟时间为2秒。

Timer timer = timerService.createSingleActionTimer(2000, new TimerConfig(product_ID, true));

当程序计时器到期(熄灭)时,容器调用bean实现类中带注释的@Timeout方法。 @Timeout方法包含处理定时事件的业务逻辑。

@Timeout
public void handleTimerEvent(Timer timer) {
   String productId = timer.getInfo();
   someMethodWithDoSecondCallLogic(productInfo)
}

参考: