如何更改Oracle Coherence支持映射

时间:2014-11-16 11:05:21

标签: java oracle-coherence

我是Oracle Coherence的新手,我已经尝试了hello-world示例并且工作正常,但我注意到了我不想要的行为,这是我将对象存储到缓存时,并尝试获取此对象并更新它,此更新没有传播到缓存,我不确定,但我认为这是由于使用了com.tangosol.util.SafeHashMap。

缓存配置: 我使用的是默认的coherence.jar配置文件。

我的代码:

    NamedCache cache = CacheFactory.getCache("test");

    HashMap<Integer, LinkedHashMap<Integer, String>> m = new HashMap<Integer,   LinkedHashMap<Integer, String>>();

    Map<Integer, String> l = new LinkedHashMap<Integer, String>();
    l.put(1, "val-1");
    l.put(2, "val-2");

    Map<Integer, String> l2 = new LinkedHashMap<Integer, String>();
    l2.put(3, "val-3");
    l2.put(4, "val-4");

    m.put(1, (LinkedHashMap<Integer, String>) l);
    m.put(2, (LinkedHashMap<Integer, String>) l2);


    cache.put(1, l);
    cache.put(2, l2);


    System.out.println(cache.get(1));
    System.out.println(cache.get(2));
    // output is:
    //{1=val-1, 2=val-2}
    //{3=val-3, 4=val-4} 

    ((LinkedHashMap<Integer, String>)cache.get(1)).remove(1);

    System.out.println("====== AFTER CHANGE ========");

    System.out.println(cache.get(1));
    System.out.println(cache.get(2));
    // output STILL :
    //{1=val-1, 2=val-2}
    //{3=val-3, 4=val-4} 

输出:

   {1=val-1, 2=val-2}
    2014-11-16 12:51:53.214/6.333 Oracle Coherence GE <D4> (thread=ShutdownHook,      member=1): ShutdownHook: stopping cluster node
   {3=val-3, 4=val-4}
   ====== AFTER CHANGE ========
   {1=val-1, 2=val-2}
   {3=val-3, 4=val-4}

上面的行为在我看来就像是HttpSession对象。

我的问题是,如何更改此行为,当我更改对象时,此更改会传播到缓存?

1 个答案:

答案 0 :(得分:0)

从缓存中获取对象时,您正在使用副本。如果您还想更改缓存,则需要将新的/更改的对象放回缓存中。