2012-11-12 71 views
0

有沒有一種方法可以創建一個在整個應用程序生命週期中保持活動狀態的持久jcr會話?背景是,我想使用此會話的JCR EventListener更新我的觀看任何傳入的事件。因此,這個聽衆必須始終與我認爲的一個會話連接。創建持久的jcr會話

回答

1

是的,您確實可以創建一個常規會話,使用它來註冊您的事件偵聽器,並根據需要保持活動狀態。

實際上,事件監聽器只會在用於註冊監聽器的會話仍然存在的情況下被通知事件。當然,這個長時間的會話可能會阻止存儲庫關閉,所以當您的應用程序或服務關閉時,請務必註銷會話。

一個常見的最佳實踐是讓聽衆儘可能少地完成工作。監聽器是異步調用的(意味着存儲庫不會等到完成監聽器才完成更改),這意味着這可能是在單獨的線程上完成的,如果完成需要很長時間,監聽器可能會導致資源問題。因此,如果工作不是微不足道的,可以通過(例如)將工作提交到隊列並單獨處理隊列來儘快離線。

另一個最佳做法是讓聽衆而不是使用與用於註冊它們的會話相同的內容來讀取或寫入內容。 JCR會話不需要是線程安全的,大多數實現do not implement concurrency。這意味着它們不能被多個線程安全地使用,即使這隻需要閱讀內容。 (有些實現可以保證Sessions are thread safe,但是最好避免依賴這個特性,除非你想或者需要鎖定那個實現。)

總之,如果一個監聽器需要做任何工作,下車調用線程並使用單獨的會話來讀取或更新內容。