我想将一些数据存储在静态变量中,并且希望部署在同一个 JBOSS7 上的所有 Web 服务都能访问这些数据。我认为独立的 JBOSS 在单个 JVM 中运行,所有服务都在同一个 JVM 中运行,因此它们可以访问静态变量。
但是我注意到当我的网络服务尝试获取数据时出现 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(...);
您能告诉我为什么我无法从我的网络服务访问值吗? 谢谢, 五、
最佳答案
如果您所说的部署是指单独的 war 文件,则静态变量对于其他 war 文件中的其他 Web 服务将不可见,因为它们是由不同的类加载器加载的。每场 war 都有它自己的类加载器,因此它有自己的类“类实例”。您也许可以通过将有问题的类移动到在部署之间共享的位置来解决这个问题,但我建议您无论如何都可以通过使用数据库或分布式缓存来解决它。
关于java - 独立JBOSS7使用更多JVMS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19888967/