Обновление хроники-карты сохранилось

Мне нужно обновить постоянное значение. Я имею в виду:

////// Класс InfoEquipoCache используется в качестве значения CM

class InfoEquipoCache implements BytesMarshallable {
    private EquipoCache equipoCache;
    public void actualiza() {
        .....
        equipoCache.actualiza()
        ......
    }
    .......

///// Основной класс имеет CM InfoEquipoCache

ChronicleMap<String, InfoEquipoCache> equipos;

..... //// В какой-то части основного класса:

equipos.get(idEquipo).actualiza() //InfoEquipoCache contains actualiza method

Но equipos.get(idEquipo) имеет ссылку на EquipoCache, а внутри InfoEquipoCache - другую ссылку на EquipoCache. По результатам актуализации метод бесполезен

Кто-то знает, как внести изменения в это значение?

2 ответа

Когда вы сохраняете значение в Chronicle Map, оно сериализуется в память вне кучи; поэтому, когда вы звоните get() вы будете получать другой (хотя и равный по значению) экземпляр.

Если вам нужно работать с одним и тем же экземпляром, вы должны рассмотреть решение в памяти (например, j.u.HashMap или же j.u.c.ConcurrentHashMap).

Вы можете хранить и обновлять значение EquipoCache вне кучи внутри карты хроник. Не забудьте записать значение обратно в CM в конце работы.

      try (ExternalMapQueryContext<String, InfoEquipoCache, ?> ctx = map.queryContext(idEquipo)) {
    ctx.updateLock().lock();
    try {
        MapEntry<String, InfoEquipoCache> entry = ctx.entry();
        if (entry != null) {
            InfoEquipoCache infoEquipoCache = entry.value().get();
            infoEquipoCache.actualiza();
            ctx.replaceValue(entry,ctx.wrapValueAsData(infoEquipoCache));
        }
    } finally {
        ctx.readLock().unlock();  //release all-type locks
    }
}

Также вы можете прочитать это в карте хроник.учебнике по

Другие вопросы по тегам