在两个war文件之间共享对象?

时间:2015-12-13 13:28:51

标签: java web-applications

我有两个war文件,它们都构建自己的缓存(通过singleton对象中的方法)。缓存操作完全相同且冗长 opeartion。我计划的是在一个war文件中有一个缓存,然后从另一个war文件中调用singleton对象。它可以实现吗? 可能是通过JNDI还是RMI?

我能做的另一种方法是单独使用war,然后通过servlet返回结果。现在两个战争都打电话给web请求(通过java代码而不是浏览器) 到这个servlet并获取缓存作为响应。但是,我需要做很多工作,还需要处理身份验证吗?

我通过网络的另一种方式是shared objects between webapps of the same tomcatCommunication between two web application in same server

有没有更好或更干净的方式

1 个答案:

答案 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类加载器加载,您将能够在所有战争中共享其状态。如果战争类加载器没有在父母中找到课程,请确保课程不包含在您的战争中。