2010-04-19 23 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