【发布时间】:2013-04-23 20:01:33
【问题描述】:
对于需要“等待”数据的 ejb 来说,最好的解决方案是什么?我有一个 ejb 去检查数据库表中的一些数据,如果数据不存在,它需要等待 x 秒并再次检查。我知道在 Java EE 规范中不建议使用 Thread.sleep/Thread.wait 和此类操作。然而,这个问题必须有一个现实的解决方案。其他一些阅读建议您必须启动计时器或其他东西,但是我确实需要阻止请求调用,直到该数据可用,这消除了计划或计时器解决方案。还有其他想法吗?
【问题讨论】:
-
你能在规范中链接报价吗?如果您需要阻止,那么睡觉可能就是您想要做的事情。使用 servlet 3,您可以通过启动异步上下文
startAsync并在单独的线程中休眠来释放容器线程。 -
EJB容器的限制可以看这里。在这里它说你不应该管理 sleep() 和 wait() 正在做的“线程”。 oracle.com/technetwork/java/restrictions-142267.html
-
我想有几个人会争辩说 sleep() 和 wait() 算作管理它。查看其他问题和回复。 stackoverflow.com/questions/8202492/thread-sleep-in-an-ejb
-
sleep()和wait()不应在 JEE 中使用。这是一个重大的禁忌,会导致生产问题! -
我很好奇这样做会产生什么样的问题?我看到很多人说不要这样做,这是不可以的。但实际上我还没有听说过它会产生什么问题。
标签: java multithreading jakarta-ee glassfish