Infinispan эквивалентно ehcache copyOnRead и copyOnWrite - PullRequest
4 голосов
/ 25 мая 2010

Я планирую внедрить решение для кэширования в существующее веб-приложение. Ничего сложного: в основном параллельная карта, которая поддерживает переполнение на диск и автоматическое удаление. Кластеризация кэша может потребоваться в будущем, но не сейчас.

Мне нравятся функции ehcache copyOnRead и copyOnWrite, потому что это означает, что мне не нужно вручную клонировать объекты перед тем, как что-то вынуть из кэша. Теперь я начал смотреть на Infinispan , но я не нашел там ничего подобного. Это существует?

Т.е. должны пройти следующие юнит-тесты:

@Test
public void testCopyOnWrite() {
    Date date = new Date(0);
    cache.put(0, date);
    date.setTime(1000);
    date = cache.get(0);
    assertEquals(0, date.getTime());
}

@Test
public void testCopyOnRead() {
    Date date = new Date(0);
    cache.put(0, date);
    assertNotSame(cache.get(0), cache.get(0));
}

Ответы [ 3 ]

7 голосов
/ 02 июня 2011

Infinispan поддерживает поддержку copyOnRead / copyOnWrite, хотя фактический формат не является подключаемым. Элемент конфигурации: lazyDeserialization в Infinispan 4.x и storeAsBinary в Infinispan 5.x. Объекты сериализуются с использованием подключаемой инфраструктуры Marshaller, которая используется для всех форм сортировки, включая вызовы RPC по сети и хранение на диск.

2 голосов
/ 25 мая 2010

По словам разработчика JBoss, Infinispan пока не поддерживает такую ​​функцию. Вы должны зарегистрировать запрос на улучшение в системе отслеживания проблем Infinispan , чтобы другие могли голосовать за него (я буду).

При этом, если вам нужна эта функция сейчас , обходным решением будет расширение AbstractDelegatingCache и переопределение методов get и put для добавления этой функции. Вы можете использовать свою собственную стратегию копирования или посмотреть, как EHCache сделал это для вдохновения.

Кроме того, вы можете рассмотреть вопрос о форуме Infinispan , если у вас возникнут дополнительные вопросы, поскольку у вас будет больше мнений от сообщества Infinispan.

0 голосов
/ 11 ноября 2013

Я считаю, что storeAsBinary вступает в силу только тогда, когда объекты должны быть сериализованы, что означает, что при вызове операции put владелец не является текущим узлом.

Это также означает, что тестовые случаи в вопросе могут пройти, если владелец ключа 0 не является текущим узлом, но он все равно не сможет работать, если это среда с одним узлом.

...