我正在尝试在Glassfish (v2)服务器上的应用程序之间共享并发hashmap。
第一个问题,这有可能吗?第二,如果是,有什么建议吗?
我想要实现的是一个内存存储(缓存?),可以在同一实例上的不同组件快速引用和更新。实现是一个标准的键/值集。
提前感谢!
听起来你想要一个分布式缓存。我建议你看看Ehcache和这个关于缓存拓扑的文档。
我想你可以看看Hazelcast项目
我也推荐Hazelcast。使用起来非常简单,这里有一些比较
很久以前对我有效的方法是将集合作为单例放在库中,并在所有应用程序之间共享。这样,库只加载一次,所有应用程序都使用该副本(及其集合)
如果您谈论的是同一个JVM中的2个"应用程序",那么这当然是可能的。如果它们在同一个ClassLoader中,那么你应该可以这样做:
public class MapHolder {
private static final ConcurrentHashMap<String, String> cache =
new ConcurrentHashMap<String, String>();
public static ConcurrentHashMap<String, String> getCacheSingleTon() {
return cache;
}
}
然后你的每个模块都可以这样说:
public class Foo {
private ConcurrentHashMap<String, String> cache =
MapHolder.getCacheSingleTon();
}
这就是说,我对Glassfish没有经验。它们可能已经有可用的缓存模块。