我想将一些数据存储在静态变量中,并且我希望部署在同一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(...);
您能告诉我为什么我无法从我的网络服务中访问值吗? 谢谢, 诉
答案 0 :(得分:1)
jBoss绝对不允许您在不同的部署中共享静态变量。这将是一个巨大的安全问题,如果我在你旁边部署一场战争并开始改变你的静态变量......
您需要将此类值保存在其他内容中,例如数据库,内存缓存或共享文件。
答案 1 :(得分:1)
如果您通过部署表示单独的war文件,则静态变量将不会被其他war文件中的其他Web服务看到,因为它们由不同的类加载器加载。每个战争都有它自己的类加载器,因此它是类的自己的“类实例”。您也许可以通过将有问题的类移动到部署之间共享的地方来解决它,但无论如何,我建议您通过使用数据库或分布式缓存来解决它。