2011-12-07 238 views
1

本指南JCR Wiki建議爲每個請求使用新會話。我的任務是創建一個長耳兔文件樹。因此,通過本指南獲取每個項目的屬性/節點,我需要創建新的會話並稍後關閉它?這樣我每次都會創建很多會話,這看起來很奇怪。JCR 2.0如何正確使用會話

但是,如果我使用一個會話的所有時間JCR我有MemoryHeapException在JCR方面有問題,而不是正確的保存節點。

對於使用一個會話和每次創建會話之間的方法是否有任何規範?還是我誤讀了指南?

回答

4

我比Jackrabbit更熟悉ModeShape,但總的來說,我認爲最好的做法是爲每個請求創建一個新的會話,使用該會話來處理請求,然後關閉會話。

一般而言,會話非常輕便且創建成本低廉。但也有一些原因,建立單獨的會話是更好的(或者至少更容易):

  1. javax.jcr.Session不是線程安全的,所以如果你要使用一個會話來處理多個請求,您必須確保會話僅用於一次處理一個請求。換句話說,你需要某種Sessions對象池。
  2. 會話是有狀態的,因此一個會話加載的任何信息都可以保留,直到會話刷新或關閉。
  3. 會話是針對特定用戶的。如果每個傳入請求都可能與不同的用戶相關聯,則可能是泄露了特權和數據。

可能還有其他原因,我沒有想到,但不管我希望這有助於。

+1

作爲一個沉重的Jackrabbit用戶,我同意Randall爲每個HTTP請求創建一個JCR會話是要走的路。這些會話的設計便宜,不像一些數據庫會話。 –

相關問題