在 EJB 中使用 @Timeout 而不是 Thread.sleep()
Using @Timeout in EJB instead of Thread.sleep()
我从我的代码中访问了一个网络服务两次。第一次点击给了我一个 product_ID 使用它作为路径参数,我进行了第二次 get 调用,它给了我响应。
问题是第二次 (GET) 调用应该在第一次 (POST) 调用 2 秒后触发。我在我的项目中使用 EJB,最简单的解决方案是使用 Thread.sleep(2000)。但是EJB不建议程序员自己管理线程。
在我的研究中,我找到了一个可能的解决方案,但由于我缺乏 EJB 技能,我不太能理解它。有人可以指导我解决这个问题吗?
可能的解决方案URL是:Using the EJB3 timer service instead of Thread.sleep()
在第一次调用的方法中,您应该创建一个程序化的单动作计时器,在第一次调用后延迟 2 秒。
Timer timer = timerService.createSingleActionTimer(2000, new TimerConfig(product_ID, true));
当编程计时器到期(关闭)时,容器会调用 bean 实现中带有 @Timeout 注释的方法 class。 @Timeout 方法包含处理定时事件的业务逻辑。
@Timeout
public void handleTimerEvent(Timer timer) {
String productId = timer.getInfo();
someMethodWithDoSecondCallLogic(productInfo)
}
参考文献:
我从我的代码中访问了一个网络服务两次。第一次点击给了我一个 product_ID 使用它作为路径参数,我进行了第二次 get 调用,它给了我响应。
问题是第二次 (GET) 调用应该在第一次 (POST) 调用 2 秒后触发。我在我的项目中使用 EJB,最简单的解决方案是使用 Thread.sleep(2000)。但是EJB不建议程序员自己管理线程。
在我的研究中,我找到了一个可能的解决方案,但由于我缺乏 EJB 技能,我不太能理解它。有人可以指导我解决这个问题吗?
可能的解决方案URL是:Using the EJB3 timer service instead of Thread.sleep()
在第一次调用的方法中,您应该创建一个程序化的单动作计时器,在第一次调用后延迟 2 秒。
Timer timer = timerService.createSingleActionTimer(2000, new TimerConfig(product_ID, true));
当编程计时器到期(关闭)时,容器会调用 bean 实现中带有 @Timeout 注释的方法 class。 @Timeout 方法包含处理定时事件的业务逻辑。
@Timeout
public void handleTimerEvent(Timer timer) {
String productId = timer.getInfo();
someMethodWithDoSecondCallLogic(productInfo)
}
参考文献: