我有两个war文件,它们都构建自己的缓存(通过singleton对象中的方法)。缓存操作完全相同且冗长 opeartion。我计划的是在一个war文件中有一个缓存,然后从另一个war文件中调用singleton对象。它可以实现吗? 可能是通过JNDI还是RMI?
我能做的另一种方法是单独使用war,然后通过servlet返回结果。现在两个战争都打电话给web请求(通过java代码而不是浏览器) 到这个servlet并获取缓存作为响应。但是,我需要做很多工作,还需要处理身份验证吗?
我通过网络的另一种方式是shared objects between webapps of the same tomcat或Communication between two web application in same server
有没有更好或更干净的方式
答案 0 :(得分:1)
我建议你使用父类ClassLoader和静态结构共享数据。例如,像这样编译类:
public class SharedMemory<K, V> {
private static final SharedMemory INSTANCE = new SharedMemory();
public static SharedMemory getInstance() {
return INSTANCE;
}
private final ConcurrentHashMap<K, V> map = new ConcurrentHashMap<>();
private SharedMemory() {
}
public V put(K key, V value) {
return map.put(key, value);
}
public V putIfAbsent(K key, V value) {
return map.putIfAbsent(key, value);
}
public V get(K key) {
return map.get(key);
}
}
到特定的jar并将该jar添加到您的web服务器的类路径中。因此,该类将由系统类加载器而不是webapp类加载器加载,您将能够在所有战争中共享其状态。如果战争类加载器没有在父母中找到课程,请确保课程不包含在您的战争中。