我寫了一個授權系統,它依賴於表示當前用戶的對象。爲了簡化編程並提高性能我想擁有這些對象在一個ThreadLocal的用戶登錄後EJB容器中的ThreadLocal(和Singleton)
它看起來是這樣的:
public class UserCache {
private static final ThreadLocal<User> cache = new ThreadLocal<User>();
public User getCurrentUser() {
return cache.get();
}
public void setCurrentUser(User user) {
cache.set(user);
}
}
我讀過的靜態元素使聚類問題。如果我在每個羣集節點上都有一個UserCache,它們都有自己的緩存對象,而不與其他節點上的緩存對象同步。對? UserCache
是單身人士的經典人選,因爲應用程序只需要它的一個實例。但據我所知,@Singleton EJB在集羣中具有相同的行爲。
那麼在EJB 3.1(Java EE 6)環境中如何使UserCache可集羣化?
解決方案從答案中提取:
- 從CDI使用SessionScope(JSR 299)或
- 使用JVM集羣與兵馬俑
你說得對,我在本地線程的方法在集羣中沒有多大意義。因此,我必須使用兵馬俑或CDI SessionScope,就像chris_l建議的一樣。 – deamon 2010-04-09 12:04:58