Cache2k: java.lang.UnsupportedOperationException: загрузчик не установлен

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

Согласно документации, кеш должен создаваться так:

Cache<String,String> c =
CacheBuilder.newCache(String.class, String.class).build();
String val = c.peek("something");
assertNull(val);
c.put("something", "hello");
val = c.get("something");
assertNotNull(val);
c.destroy();

К сожалению, по крайней мере 2 из этих методов устарели, включая сам класс CacheBuilder. Поэтому я попытался создать кэш следующим образом:

        org.cache2k.Cache<String, Object> newCache = Cache2kBuilder.of(String.class, Object.class)
                .name(cacheKey.toString())
                .entryCapacity(100000)
                .eternal(true)
                .build();

Это, однако, вызывает исключение "java.lang.UnsupportedOperationException: загрузчик не установлен".

Поэтому возникает вопрос: как мне построить кеш, чтобы я не получил это исключение?

РЕДАКТИРОВАТЬ:

Это дает мне то же исключение:

            org.cache2k.Cache<Object, Object> newCache =
                CacheBuilder.newCache(Object.class, Object.class)
                        .eternal(true)
                        .build();

РЕДАКТИРОВАТЬ № 2:

Еще одно замечание: когда я копирую и вставляю код со страницы вики, я получаю сообщение об ошибке - как видно на рисунке ниже.

Это не похоже на работу с JDK 1.8.0_91

С какой версией jdk вы тестируете? Я постараюсь просто удалить <>, которые сейчас вызывают проблему.

Большое спасибо заранее!

Майкл

1 ответ

Решение

Cache2k выглядит как очень перспективная реализация кэширования.

Спасибо:)

Согласно документации, кеш должен создаваться так

Есть новые интерфейсы на месте. Устаревший по-прежнему существует для поддержки пользователей старых версий cache2k. Это прояснится в ближайшие недели. Извините за путаницу.

Пожалуйста, ознакомьтесь с последней информацией о начале работы: https://github.com/cache2k/cache2k/blob/master/doc/src/docs/asciidoc/user-guide/sections/_start.adoc

Это, однако, вызывает исключение "java.lang.UnsupportedOperationException: загрузчик не установлен". Поэтому возникает вопрос: как мне построить кеш, чтобы я не получил это исключение?

Краткий ответ: либо использовать cache.peek() или подождите 0,27, с тех пор он работает с cache.get() прозрачно.

Более длинный ответ: в наших собственных приложениях я использую cache.get() только когда определен загрузчик и cache.peek() когда загрузчик не определен или когда я хочу проверить только кеш. Бронируя cache.get() только для прочитанного использования, казалось хорошей идеей. Однако я решил, что это может быть предостережением для новых пользователей, поэтому я изменил это поведение и привел его в соответствие с другими решениями для кэширования.

Ответ для редактирования 2: для нетипизированного кэша используйте метод фабрики Cache2kBuilder.forUnkownTypes(), Создание анонимного класса необходимо только для определенных типов.

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