加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – EJB容器中的ThreadLocal(和Singleton)

发布时间:2020-12-15 08:33:11 所属栏目:Java 来源:网络整理
导读:我写了一个授权系统,它依赖于代表当前用户的对象.为了简化编程并提高性能,我希望在用户登录后将这些对象保存在ThreadLocal中. 它看起来像这样: public class UserCache { private static final ThreadLocalUser cache = new ThreadLocalUser(); public User
我写了一个授权系统,它依赖于代表当前用户的对象.为了简化编程并提高性能,我希望在用户登录后将这些对象保存在ThreadLocal中.

它看起来像这样:

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在集群中具有相同的行为.

那么如何使UserCache在EJB 3.1(Java EE 6)环境中可以集群?

从答案中提取的解决方案:

>使用CDI的SessionScope(JSR 299)或
>使用Terracotta进行JVM集群

解决方法

既然您已经使用Java EE 6,那么使用CDI(上下文和依赖注入)就不会那么容易了.这将允许将用户信息放在 session scope中,并在任何地方轻松注入. CDI为您管理其余部分.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读