针对许多用户请求的悲观锁定
是否可以创建一个持续许多用户请求的悲观锁?
我很想知道在 Java EE 中是否可以使用 Hibernate 或 PHP 使用 Doctrine 或 Propel。我通过使用 Doctrine 2 尝试了这一点,但这是不可能的,只能在数据库级别(根据用户请求)。
Is it possible to create a pessimistic lock that last for many user requests?
I'm interested to see if is it possible in Java EE using Hibernate or PHP using Doctrine or Propel. I tried this by using Doctrine 2 but it is not possible, only at database level (per user request).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是可能的,但需要大量(手动)工作。 Hibernate 和 J2EE 的所有框架都使用过滤器在收到请求时开始会话,并在发送响应时提交会话。
因此,您需要做的是为您的 servlet 禁用此过滤器,使用工厂创建 Hibernate 会话,将其放入用户的 HTTP 会话中,然后使用该 H.session 进行工作。
请注意,没有安全的方法来结束此类会话,因为用户可以简单地停止使用浏览器几个小时。
可能更有用和更稳定的是“临时”对象:当用户进行更改时,将临时对象保存到数据库中,该数据库会隐藏“真实”对象。这使您可以立即保存任何更改。当用户对结果感到满意时,他可以单击一个按钮,然后您可以将数据从临时对象复制回真实对象(当然,使用乐观锁定)。
It's possible but a lot of (manual) work. All the frameworks for Hibernate and J2EE use filters to begin a sessions as a request is received and commit it when the response is sent.
So what you need to do is to disable this filter for your servlet, create the Hibernate session using the factory, put it into the user's HTTP session and then use that H. session for your work.
Note that there is no safe way to end such a session because the user can simply stop using the browser for a couple of hours.
Something that might be much more useful and stable is "temporary" objects: When the user makes changes, save temporary objects to the database which shadow the the "real" objects. This allows you to save any change immediately. When the user is happy with the result, he can click a button and you can copy the data from the temp objects back to the real ones (with optimistic locking, of course).