Oracle Coherence — изменение данных не отражается в кеше

Я использую кеш Oracle Coherence с Java и столкнулся с проблемой. Когда я помещаю что-то в кеш (например, карту) и получаю его обратно с помощью вызова get, а затем изменяю объект (скажем, добавляю значение к карте), измененное значение не отражается в кеше. т. е. если я снова вызову get, я получу тот же старый объект. Этого не происходит с ehcache или dynacache.

Я знаю, что мы можем записать измененную карту обратно в кеш, но я хотел знать, есть ли какая-то конфигурация, которую мы можем сделать в XML-файле конфигурации когерентности.

Образец кода:

ConcurrentHashMap<String, String> myMap = new ConcurrentHashMap<String, String>();
myMap.put("Hello", "World");
cache.put("myMap", myMap);
ConcurrentHashMap<String, String> myExMap = (ConcurrentHashMap<String, String>)cache.get("myMap");
myExMap.put("Once", "More");
ConcurrentHashMap<String, String> myFinMap = (ConcurrentHashMap<String, String>) cache.get("myMap");
System.out.println(myFinMap);

После выполнения myFinMap по-прежнему имеет только одну запись.


person sreenisatish    schedule 21.07.2010    source источник


Ответы (2)


Возможно, вам нужно помещать объект в кеш каждый раз, когда вы его изменяете (я думаю, потому что он сериализован?)

person onof    schedule 21.07.2010

Вы должны поместить объект обратно в кеш. Объект, полученный из кеша Coherence, не упаковывается в класс Coherence, который ищет модификации и синхронизируется с кешем.

person Jacob Tomaw    schedule 27.09.2010