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 ответ
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()
, Создание анонимного класса необходимо только для определенных типов.