在EJB 3.0中等待一小段时间

Vik*_*tor 1 java ejb-3.0

我应该在webservice(EJB 3.0)中等待一段时间(一两秒钟).

我发现这个关于我的问题的问题似乎是EJB世界中唯一合法的解决方案,但我仍然找不到如何等待的解决方案.我经常搜索,但似乎用meg 3.0的工具无法实现.

真的吗?或者有解决方案吗?

Dav*_*ins 6

在线程中等待1或2秒Thread.sleep就可以了,并且不会伤害应用服务器.这与实际工作1或2秒之间没有什么区别.如果我们谈论1或2分钟,那将更加令人担忧,并且值得研究更好的协调通信选项,仅仅因为有更好的事情与CPU相比而不是等待.

周边线程在EJB规范的规定的主要动机是真的要阻止人们开始线程或销毁线程(start(),join(),stop(),suspend(),等),或更改线程的状态(setName(String),setContextClassLoader(ClassLoader),setDaemon(boolean),setPriority(int),等).要理解的关键是线程被容器合并并重新使用以提高效率.因此,任何会影响池状态的东西(通过更改线程对象本身弄脏线程)或与该池竞争(启动/停止线程)都是一个非常大的禁忌.容器还将使用ThreadLocal对象来间接设置线程中的状态,例如提供JNDI,事务,安全性和连接管理.这使得开始/停止你自己的线程成为一个双重大禁忌.

睡在线程中只是浪费你自己的服务器时间和资源.非常小的数量并不可怕 - 浪费时间.更长的时间会引起关注.

但是,我会说从不打电话Thread.sleep()交易.拿着锁和打电话sleep是一个很大的禁忌.因此,请确保将此方法标记为@TransactionAttribute(NOT_SUPPORTED)或类似.