2010-04-19 31 views

回答

2

这个问题没有什么特别与groovy/grails,但只是一个并发文件修改的根本问题。您应该像处理SVN或CVS这样的源代码控制系统(SCCS)来处理这个问题。

具体而言,存储文件上次修改的时间。这可以存储在文件本身,文件的元数据中或每次上传XML文件时提供的另一个文件中。当用户上传文件时,请检查自从他获得副本后是否修改了该文件(由其他用户修改)。如果有,你有多种选择:

  • 给他的最新副本,并告诉他,以合并更改自己(这是一个蹩脚的SCCS会做)
  • 尝试,并自动合并更改如果他们不冲突(这是一个更好的SCCS会做什么)。如果存在冲突,则需要由用户手动解决。

一种方法(可能是矫枉过正)将实际使用SCCS来处理此版本问题。有一个Java API for CVS(也可能用于其他SCCS),它使您能够以编程方式签入,签出并合并文件。

此建议假定您需要允许同时修改文件。如果不这样做,那么使用禁止同时修改的方法来解决问题会更简单。

更新: 有关version财产所提到的评论者之一,是在部分5.3.5和Grails reference manual

+1

如果他们通过网页进行编辑,并且xml文件具有域对象,则可以使用选项1的版本属性;) – 2010-04-19 07:50:59

+0

您好,您是否有任何有关版本属性的良好链接?快速浏览谷歌和Grails书的权威指南,它绝对是一种识别并发修改实例的好方法,但维基百科说(http://en.wikipedia。org/wiki/Optimistic_concurrency_control),它可能不是最有效的方式来处理它。另外一个工作的例子将是方便的:-) – Armand 2010-04-19 11:13:33

0

另一种方法的5.5.2.7提供一些信息:保持一个全球范围的HashMap中包含的文件 - >用户映射(或仅当文件列表与用户锁定文件无关时)。如果用户试图打开一个文件:

  1. 检查,如果该文件已经包含在地图上
  2. 如果是这样,拒绝尝试,并做一些错误处理
  3. 如果没有,添加到一个条目地图
  4. 打开该文件,并将文件保存后做的工作
  5. ,相应的条目,必须从地图

这种全球范围的HashMap的MIG被删除将其作为属性存储在ServletContext中。另见this

+0

感谢输入的家伙!对此,我真的非常感激。 – 2010-04-19 08:20:35