Как изменить карту поддержки 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.

Мой вопрос: как изменить это поведение, и когда я изменяю объект, это изменение распространяется на кеш?


person Karim Tawfik    schedule 16.11.2014    source источник


Ответы (1)


Когда вы получаете объект из кеша, вы работаете с копией. Если вы хотите также изменить кеш, вам нужно поместить новый/измененный объект обратно в кеш.

person Peter Lawrey    schedule 16.11.2014
comment
Спасибо, Питер, я понял это сегодня с помощью пробного теста. - person Karim Tawfik; 17.11.2014
comment
Мне это кажется другим, так как наша система использовала WhirlyCache, которые ведут себя по-разному. - person Karim Tawfik; 17.11.2014