我們有一個基於多用戶令牌的JSP應用程序。 我們管理專用課程SessionManager
中的所有課程。 當新用戶打開任何應用程序頁面(通常是主頁)時,稍後初始化一個會話並將其緩存到映射中,並在相關令牌無效時銷燬該會話。所以,我們有SessionManager::init
和SessionManager::destroy
。在多用戶JSP中創建和放出ExecutorService實例J2EE應用
最近我在我們的應用程序中引入了ExecutorService
,用於從前端通過AJAX調用開始的一些異步任務以及一些耗時的方法。
我在SessionManager::init
中創建ExecutorService
實例並將其設置爲會話屬性,然後在SessionManager::destroy
中關閉此實例(由Oracle推薦)。通過這種方式,我們爲每個用戶分配ExecutorService
實例,該實例由其會話令牌標識,只要用戶使用該應用程序就會生效。
我很高興看到這樣的體系結構,但不是100%將ExecutorService
實例作爲屬性放在會話中有多好。
另一種方法是創建並公開ExecutorService
實例以供所有用戶的會話使用。可能實現爲一個線程安全的單例類。 但是如果我使用這種方法,我沒有線索在哪裏關閉ExecutorService
實例,我應該嗎?
這裏是主要問題;是否可以保留當前實現:ExecutorService
每個用戶存儲在當前會話中的實例作爲屬性?