Я использую Apache Ignite в качестве кеша, поддерживаемого базой данных postgres, слишком большой, чтобы инициализировать все сразу. Вместо этого я хочу загружать отдельные части в свой кэш по мере необходимости. Я хотел сделать это с помощью loadCache (поскольку режим readThroughEnabled работает только для простых операций с кешем, которые я не могу гарантировать, что мы будем использовать), который принимает IgniteBiPredicate в качестве аргумента. Однако всякий раз, когда я пытаюсь использовать IgniteBiPredicate в качестве фильтра, я получаю ClassCastExceptions, которые мешают мне загружать кэш.
Это для одного узла Ignite, локального для моего сервера. Я попытался взять кэш и вызвать «loadCache (biPredicate, null)», чтобы попытаться загрузить конкретные данные, которые я хочу. Это пример моего кода с удаленной спецификой домена:
public void initFoo(int key){
IgniteCache<Integer, Foo> myCache = getCache(Foo.class);
if (myCache != null){
myCache.loadCache(new IgniteBiPredicate<Integer, Foo>() {
@Override
public boolean apply(Integer integer, Foo foo){
return integer == key;
}
}, null);
}
}
Я ожидаю, что это приведет к загрузке моего кэша, по крайней мере, той части, которая мне нужна для этой конкретной записи. Вместо этого я вижу
"Failed to load cache: Foo"
...(lots of nested exceptions eventually leading to)
...
"Caused by: jvaa.lang.ClassCastException:
org.apache.ignite.internal.binary.BinaryObjectImpl cannot be cast to
com.sms.Foo"
Я уверен, что это не проблема в моей конфигурации кэша (по крайней мере, на уровне Java-объекта), поскольку, когда я выполнял простой loadCache без аргументов, весь кэш загрузился нормально и был пригоден для использования. Я что-то не так делаю?