2012-07-15 32 views
1

我與春天的Webflow,的Freemarker,休眠(JPA)和Oracle應用程序的工作。春季Webflow的(和Freemarker的) - 限制頁給一個用戶

在應用程序中,我有一個管理頁面,它應該是可編輯只有一個用戶。 一旦用戶正在編輯頁面,其他用戶訪問應提交該頁面爲觀點僅頁面,當他們打開「X正在編輯此頁面的網頁,他們應該得到一個警告,因此您的訪問是隻讀'。

這可能在一個Webflow或Freemarker的容易嗎?

歡迎任何建議。

感謝

更新1

我使用JPA(休眠)爲好。

更新2

,應用程序將在羣集的JBoss部署。

+0

如果管理員編輯此頁面沒有提交編輯會怎麼樣?所有其他人等到有一天他的會議時間結束?你爲什麼不使用樂觀鎖定呢? – 2012-07-15 09:53:43

+0

實際上就是這個計劃。你能解釋一下如何做樂觀鎖定嗎? – adi 2012-07-15 10:00:00

回答

4

我會用樂觀鎖來代替。以下策略是JPA使用的策略。

您添加version農田到餐桌保存數據進行編輯。每次加載要編輯的數據時,也會加載version字段。每個數據被修改時,您可以通過1遞增版本字段,但要能保存數據,你必須有一個內存版本,等於一個存儲在數據庫中:

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

如果上述查詢不會更新任何內容,這意味着數據已被其他人更新。在這種情況下,您會拋出異常並告訴管理員刷新頁面並重新編輯它。

如果您確實需要悲觀鎖定,那麼您需要維護一些內存中(在應用程序中未集羣)或數據庫內鎖定,嘗試鎖定鎖定並以只讀方式顯示頁面已經鎖定。更新完成後,您必須釋放鎖定。問題是如果更新從未完成。在這種情況下,您需要使用HttpSessionListener,並且在調用sessionDestroyed()時釋放鎖,如果鎖被會話銷燬持有。

+0

謝謝,樂觀鎖定看起來不錯。在我的原始文章中,我忘了提及我也在使用Hibernate(現在已更新)。 hibernate是否提供了開箱即用的「樂觀鎖定」? – adi 2012-07-15 10:17:52

+0

我讀過幾個關於'樂觀鎖定'的網站,它應該可以工作。但是,我將如何顯示消息'X正在編輯此頁面,因此您的訪問只能在其他用戶的彈出窗口中讀取。我需要知道鎖定功能的人員的姓名。我的要求不是關於鎖定行,而是關於鎖定功能。 – adi 2012-07-15 15:16:02

+0

如果您使用樂觀鎖定,這樣做沒有意義。樂觀鎖定的關鍵是讓每個人都像沒有其他人一樣工作,並樂觀地認爲不會有任何衝突。如果有的話,你會發現它。是的,Hibernate支持開箱即用。如果您需要將頁面設置爲只讀,請按照我的解釋使用悲觀,並將鎖櫃的名稱與鎖相關聯。 – 2012-07-15 16:27:42