1

我正在使用 Spring Webflow、Freemarker、Hibernate (JPA) 和 Oracle 开发应用程序。

在应用程序中,我有一个管理页面,该页面应该只能对一个用户进行编辑。一旦用户正在编辑该页面,其他访问该页面的用户应将该页面显示为仅查看页面,并且当他们打开该页面时应收到警告“ X 正在编辑此页面,因此您的访问权限为只读”。

这可以在 Webflow 或 Freemarker 中轻松完成吗?

欢迎任何建议。

谢谢

更新 1

我也在使用 JPA(休眠)。

更新 2

并且应用程序将部署在集群的 JBoss 中。

4

1 回答 1

4

我会改用乐观锁定。以下策略是 JPA 使用的策略。

您将一个version字段添加到包含要编辑的数据的表中。每次加载要编辑的数据时,也会加载该version字段。每次修改数据时,您都会将此版本字段增加 1。但是为了能够保存数据,您必须有一个与存储在数据库中的版本相同的内存版本:

update data set ..., version = version + 1 where ... and version = :inMemoryVersion

如果上述查询没有更新任何内容,则表示数据已被其他人更新。在这种情况下,您抛出异常并告诉管理员刷新页面并重做他的编辑。

如果你真的想要悲观锁定,那么你需要维护一些内存中(在应用程序中未集群)或数据库中的锁,尝试锁定锁,如果页面已经锁定,则以只读方式显示页面。更新完成后,您必须释放锁定。问题是如果更新从未完成。在这种情况下,您需要使用HttpSessionListener,并在调用时释放锁sessionDestroyed(),如果锁被正在销毁的会话持有。

于 2012-07-15T10:11:17.107 回答