在ejb中暂停执行一段时间的进程

时间:2011-11-24 02:53:04

标签: thread-safety ejb

我想我可能不是第一个遇到这个问题的人。 有时,用户会向服务器提交一堆数据,以及这些数据 将在响应页面中显示。为了给用户一种错觉 数据提交和流程很快。我们通常以异步方式执行此操作。 现在的问题是,出于某种原因,这些数据需要首先进入数据库, 并被提取出现在响应页面中。如果显示响应页面 对用户来说太快,异步提交可能无法完成;现在我打电话给

Thread.sleep()方法;

在我调用setResponsePage()之前。

但不建议在EJB中使用本机线程。谁知道替代品?感谢

1 个答案:

答案 0 :(得分:0)

这个问题刚刚讨论过:Thread.sleep() in an EJB

我将逻辑分成两个EJB:一个用于将用户数据插入DB,另一个用于获取它。您的Web层将一个接一个地调用,导致两个单独的事务,应由数据库正确排序(仍然可能取决于其他因素,如事务隔离)。

修改

sleep()的问题在于你永远不知道要等多久,所以这几乎总是一个坏主意。我在这里看到了Ajax推送的一个案例 - 你的EJB应该立即返回一个页面,在处理完成时将推送数据。我不会就这个主题提供进一步的建议,因为我远非这个领域的专业知识。

仍然不完美,但优于sleep(),可以同步数据库锁:第一个EJB将插入数据并锁定其事务中的某些记录,第二个EJB将尝试锁定同一记录并读取数据。这样第二个EJB就会等待所需的最短时间。