Как разрешить ignitecheckedexception: убедитесь, что все объекты в конфигурации кеша сериализуемы - PullRequest
0 голосов
/ 11 мая 2018

Я запускаю Ignite с Spring Boot. Моим намерением является выполнение SqlFieldQuery над BinaryObject в Ignite с упоминанием того, что у меня нет никакого класса сущностей, создающего сущность во время выполнения с помощью QueryEntity. Это мой код ниже:

 CacheConfiguration<Integer, BinaryObject> cachecfg = new CacheConfiguration<>();   
 cachecfg.setQueryEntities(new ArrayList<QueryEntity>() 
{
 {

            QueryEntity e = new QueryEntity();
            e.setKeyType("java.lang.Integer");
            e.setValueType("BinaryTest");
            e.setFields(new LinkedHashMap<String, String>() {
                {
                    put("name", "java.lang.String");
                }
            });
            add(e);
        }
    });
    cachecfg.setName("MY_CACHE");
    IgniteCache<Integer, BinaryObject> ignitecache = igniteInstance.createCache(cachecfg).withKeepBinary();
    BinaryObjectBuilder builder = igniteInstance.binary().builder("BinaryTest");
    builder.setField("name", "Test");
    ignitecache.put(1, builder.build());
    QueryCursor<List<?>> query = ignitecache.query(new SqlFieldsQuery("select name from BinaryTest"));
    System.out.println(query.getAll());

когда я запускаю этот код, он получает Ошибка :

class org.apache.ignite.IgniteCheckedException: Failed to validate cache 
configuration (make sure all objects in cache configuration are 
serializable): MY_CACHE

Возможно, мне не хватает какой-то конфигурации для сериализации. Что-то не так?

1 Ответ

0 голосов
/ 11 мая 2018

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

Иди с:

    CacheConfiguration<Integer, BinaryObject> cachecfg = new CacheConfiguration<>();

    QueryEntity e = new QueryEntity();
    e.setKeyType("java.lang.Integer");
    e.setValueType("BinaryTest");

    LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
    map.put("name", "java.lang.String");
    e.setFields(map);

    ArrayList<QueryEntity> list = new ArrayList<QueryEntity>();
    list.add(e);
    cachecfg.setQueryEntities(list);
    cachecfg.setName("MY_CACHE");
    IgniteCache<Integer, BinaryObject> ignitecache = igniteInstance.createCache(cachecfg).withKeepBinary();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...