2012-06-06 119 views
1

我開發一個信息系統,有件事我不知道該如何處理。 假設我的網站允許管理員編輯用戶。當兩個管理員想要同時編輯同一用戶時,不應允許稍後點擊編輯的管理員,然後再點擊第一個管理員。與服務器和JPA交易客戶交談

所以我要當管理員點擊編輯按鈕時,就會把編輯的形式打開的事務,並承諾。我能想到的

一種解決方案是把EntityManager的一個名爲ConversationScoped CDI豆。但我認爲這不是一個好的解決方案,因爲表示層應該與業務層分開,並且數據庫訪問屬於業務層。

另一種解決辦法是從名爲ConversationScoped CDI豆會呼籲有狀態bean的方法把EntityManager的一個狀態bean和管理事務。但是,在Web層管理交易是一個好主意?如果我決定將我的業務層部署在另一個應用程序服務器上,會管理遠程EJB上的事務嗎?而且,如果EJB被鈍化,交易會丟失嗎?

這也與另一個問題有關,當您使用EntityManager從數據庫檢索對象時,一旦事務關閉,它就會被分離。如果對象有一些延遲的初始化字段,則Web層無法訪問它們,因爲當對象返回到Web層時,它將被分離。因此,您可以管理Web層中的事務或迭代業務層中的惰性初始化字段。前者的解決方案似乎不正確,後者可能會變得非常冗長和複雜。

我知道我問了太多的問題,但我真的想知道如何正確地做到這一點。

我有這些技術:CDI,Seam 3和EJB。

當然,如果你知道一個更好的解決方案,我很高興聽到這個消息。

提前致謝。

+2

有樂觀鎖定的Google。悲觀鎖定是你所描述的,但現在的樂觀是常態。 – davidfrancis

+0

@davidfrancis謝謝! – VaclavDedik

+0

Doh爲什麼我沒有給出答案並得到一些代表呢!別介意,很高興幫助;]。 – davidfrancis

回答

2

JPA樂觀鎖定機制解決了這個問題(請參閱@davidfrancis評論)。