独立JBOSS7使用更多的JVMS?

时间:2013-11-10 11:06:06

标签: java multithreading web-services jvm jboss7.x

我想将一些数据存储在静态变量中,并且我希望部署在同一JBOSS7上的所有Web服务都能够访问这些数据。我认为独立的JBOSS在单个JVM中运行,所有服务都在同一个JVM中运行,因此可以访问静态变量。

但是当我的webservice试图获取数据时,我注意到我得到了NullPointerException。

这是我的存储类:

public enum OneJvmCacheImpl {

    INSTANCE;

    private ConcurrentHashMap<String, Object> values = new ConcurrentHashMap<String, Object>();

    public <T> T get(String key, Class<T> type) {
        return type.cast(values.get(key));
    }

    ...     

}


OneJvmCacheImpl.INSTANCE.get(...);

您能告诉我为什么我无法从我的网络服务中访问吗? 谢谢, 诉

2 个答案:

答案 0 :(得分:1)

jBoss绝对不允许您在不同的部署中共享静态变量。这将是一个巨大的安全问题,如果我在你旁边部署一场战争并开始改变你的静态变量......

您需要将此类值保存在其他内容中,例如数据库,内存缓存或共享文件。

答案 1 :(得分:1)

如果您通过部署表示单独的war文件,则静态变量将不会被其他war文件中的其他Web服务看到,因为它们由不同的类加载器加载。每个战争都有它自己的类加载器,因此它是类的自己的“类实例”。您也许可以通过将有问题的类移动到部署之间共享的地方来解决它,但无论如何,我建议您通过使用数据库或分布式缓存来解决它。