2013-06-25 20 views
0

這是我的一位老年人問我的問題。休眠會話級別緩存:登錄問題

1)我們有一個J2EE應用服務器的兩個不同的節點:節點1和節點2(如圖像中的下圖所示)

2)亦冬眠被啓用第二級高速緩存。

3)問題如下:用戶點擊登錄頁面URL並假設該請求轉到節點1和用戶登錄,然後用戶註銷。

4)再次登錄頁面的用戶請求,此時請求轉到節點2.現在用戶登錄並更改其密碼並註銷。

現在,當用戶試圖與他的新密碼 和請求轉到節點1.將他可以登錄到系統登錄的問題是什麼?

如果他是不是能夠做到這一點,有什麼能在節點完成,使用戶登錄與 他的新密碼1.

Note: We have a LoginUser table where the Username and passwords are stored. 

enter image description here

我的回答:

根據我的意見,可能是這樣的情況,當用戶tr使用節點1登錄,然後註銷。

Hibernate的火災此查詢:

SELECT * FROM登錄其中username = 「約翰」;

而當他登錄到系統中使用節點2,改變他的密碼此條目節點的二級緩存緩存現在1.

。並且再次嘗試登錄到節點1時,他無法使用新密碼登錄,因爲此時節點1的二級緩存包含舊密碼,因此他可以使用舊密碼登錄。

這就是爲什麼他無法用新密碼登錄到節點1的原因。

現在這個問題的解決方案可能是二級緩存的複製。

請在同一問題上分享您的意見。

回答

3

問題的答案是分佈式二級緩存,如Hibernate文檔here中所述。 Infinispan是支持最好的平臺。你可以閱讀關於在Jboss wiki上設置它的信息。

當兩個節點上的緩存數據更改時,這將負責跨羣集使2LC無效。用戶請求命中的節點會知道緩存已過時,並將轉到數據庫以加載所需的新數據。

+0

那麼你的意思是說它是一個有效的問題? –

+0

這是一個非常有效的問題。緩存失效始終是一個棘手的問題。幸運的是,我們有像Infinispan和JGroups這樣的工具來抽象一些簡單配置背後的複雜性。 –

+0

據我所知,服務器中的每個節點都有自己的sessionfactory,因此兩個節點有兩個完全不同的二級緩存。不是這樣嗎? –