Использование RemoteCache с DeltaAware и интерфейсом Delta Infinispan

Мне нужно некоторое руководство, связанное со следующим сценарием в infinispan. Вот мой сценарий:

1) Я создал два узла и успешно запустил infinispan в режиме клиент-сервер.

2) В клиенте хот-рода я создал remotechachemanager, а затем получил RemoteCache.

3) В удаленный кеш кладу вот так cache.put(key, new HashMap()); он успешно добавлен.

4) Теперь, когда я собираюсь очистить это значение с помощью cache.remove(key) , я вижу, что оно не удаляется, а хеш-карта все еще присутствует каждый раз, когда я иду, чтобы удалить ее.

Как очистить значение, чтобы оно очищалось со всех узлов кластера?

Как я могу также распространять изменения, такие как добавление или удаление значения HashMap выше?

Это как-то связано с внедрением DeltaAware и интерфейса Delta?

Пожалуйста, предложите мне эту концепцию или несколько указателей, где я могу узнать

Спасибо


person Jimmy USU    schedule 18.06.2015    source источник


Ответы (1)


Удаление HashMap должно работать до тех пор, пока вы используете тот же ключ и правильно реализовали equals() и hashCode() на ключе. Я предполагаю, что вы используете распределенный или реплицированный режим. EDIT: я понял, что equals() и hashCode() не так важны для RemoteCache, поскольку ключ в любом случае сериализуется, и все сравнения будут выполняться с базовым byte[].

Удаленный кэш напрямую не поддерживает DeltaAware. Как правило, использовать их довольно сложно даже в режиме библиотеки.

Если вы хотите использовать кеш с картами, я предлагаю использовать составной ключ, такой как cache-key#map-key, а не хранить сложный HashMap.

person Radim Vansa    schedule 18.06.2015
comment
Спасибо за ответ. Да, я использую только кеш распределения. Конечно, я реализую equals() и hashcode() и проверю. Кроме того, использование hashMap в качестве значения правильно организовало бы данные. но, учитывая ваш комментарий, я думаю, что буду следовать тому, что вы сказали, и посмотрим. Еще одно замечание: я также пытался использовать AtomicHashMap в качестве значения, но оно выдало SerializationException, когда я попытался поместить в кеш. - person Jimmy USU; 18.06.2015
comment
Еще одно наблюдение Флавий. На самом деле.. Я делал удаление после проверки, есть ли в кеше ключ или нет. Он всегда давал правду, а потом удалял. Таким образом, похоже, что удаление не распространяется на кластер. Я не использовал это внутри какой-либо области транзакции. Это нужно? - person Jimmy USU; 18.06.2015
comment
Нет, транзакции не поддерживаются на стороне клиента. А что касается использования AtomicHashMap — это класс из модуля infinispan-core. Модуль Infinispan-client-hotrod от этого не зависит и вообще его не использует - он использует только модуль infinispan-commons. Поэтому не пытайтесь использовать что-либо из infinispan-core в режиме клиент-сервер. Я думаю, это сложнее отличить, если вы используете какой-то uberjar, а не Maven с управлением зависимостями. - person Radim Vansa; 18.06.2015
comment
Ваше предложение хорошо принято, Флавий. Большое тебе спасибо. Затем я изменю свой подход к хранению ключа и значения только в RemoteCache вместо HashMap. - person Jimmy USU; 18.06.2015