我想我可能不是第一个遇到这个问题的人。 有时,用户会向服务器提交一堆数据,以及这些数据 将在响应页面中显示。为了给用户一种错觉 数据提交和流程很快。我们通常以异步方式执行此操作。 现在的问题是,出于某种原因,这些数据需要首先进入数据库, 并被提取出现在响应页面中。如果显示响应页面 对用户来说太快,异步提交可能无法完成;现在我打电话给
Thread.sleep()方法;
在我调用setResponsePage()之前。
但不建议在EJB中使用本机线程。谁知道替代品?感谢
答案 0 :(得分:0)
这个问题刚刚讨论过:Thread.sleep() in an EJB。
我将逻辑分成两个EJB:一个用于将用户数据插入DB,另一个用于获取它。您的Web层将一个接一个地调用,导致两个单独的事务,应由数据库正确排序(仍然可能取决于其他因素,如事务隔离)。
修改
sleep()
的问题在于你永远不知道要等多久,所以这几乎总是一个坏主意。我在这里看到了Ajax推送的一个案例 - 你的EJB应该立即返回一个页面,在处理完成时将推送数据。我不会就这个主题提供进一步的建议,因为我远非这个领域的专业知识。
仍然不完美,但优于sleep()
,可以同步数据库锁:第一个EJB将插入数据并锁定其事务中的某些记录,第二个EJB将尝试锁定同一记录并读取数据。这样第二个EJB就会等待所需的最短时间。