微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自 IMap 值的 Hazelcast SqlPredicate 给出了 ClassNotFoundException

如何解决来自 IMap 值的 Hazelcast SqlPredicate 给出了 ClassNotFoundException

我在我的系统中设置了 3 个节点的 hazelcast 并且我已经连接到 spring boot 应用程序,在 spring boot 应用程序中我通过 hazelcast-client.yaml 进行连接

 hazelcast-client:
  user-code-deployment:
    enabled: true
    jarPaths:
      - build\libs\hazelcast-demo-0.0.1-SNAPSHOT.jar
    classNames:
      - org.learning.cache.hazelcast.entity.Location
  network:
    cluster-members:
      - 127.0.0.1:5701
    smart-routing: false

我能够成功连接,但是当我执行 sqlPredict 查询时,它没有给我数据,相同的示例代码片段

public List<Location> locations(Integer id,String accountId,String currency) {
        IMap<Integer,Location> locationIMap = hazelcastInstance.getMap("location");
        if (id != null && accountId != null && currency != null) {
            String query = "locationId = " + id + " AND accountId =" + accountId + " AND currency =" + currency;
            Collection<Location> result = locationIMap.values(new sqlPredicate(query));
            if (result != null) {
                return result.stream().collect(Collectors.toList());
            }
        }

调用此逻辑时出现的错误

2021-02-05 10:55:57,722 [ERROR] [hz.epic_sanderson.partition-operation.thread-1] [c.h.m.i.q.QueryPartitionoperation]: [10.1.0.9]:5701 [dev] [4.1.1] java.lang.classNotFoundException: org.learning.cache.hazelcast.entity.Location
com.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.classNotFoundException: org.learning.cache.hazelcast.entity.Location
        at com.hazelcast.internal.serialization.impl.defaultserializers.JavaDefaultSerializers$JavaSerializer.read(JavaDefaultSerializers.java:87) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.internal.serialization.impl.defaultserializers.JavaDefaultSerializers$JavaSerializer.read(JavaDefaultSerializers.java:76) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.read(StreamSerializerAdapter.java:44) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toObject(AbstractSerializationService.java:205) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.query.impl.CachedQueryEntry.getValue(CachedQueryEntry.java:78) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.query.impl.CachedQueryEntry.getTargetobject(CachedQueryEntry.java:123) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.query.impl.QueryableEntry.extractAttributeValue(QueryableEntry.java:124) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.query.impl.QueryableEntry.getAttributeValue(QueryableEntry.java:80) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.query.impl.predicates.AbstractPredicate.readAttributeValue(AbstractPredicate.java:145) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.query.impl.predicates.AbstractPredicate.apply(AbstractPredicate.java:62) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.map.impl.query.PartitionScanRunner$1.accept(PartitionScanRunner.java:110) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.map.impl.query.PartitionScanRunner$1.accept(PartitionScanRunner.java:94) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.map.impl.recordstore.DefaultRecordStore.forEach(DefaultRecordStore.java:234) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.map.impl.recordstore.DefaultRecordStore.forEach(DefaultRecordStore.java:218) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.map.impl.recordstore.DefaultRecordStore.forEachAfterLoad(DefaultRecordStore.java:247) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.map.impl.query.PartitionScanRunner.run(PartitionScanRunner.java:94) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.map.impl.query.CallerRunsPartitionScanExecutor.execute(CallerRunsPartitionScanExecutor.java:43) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.map.impl.query.QueryRunner.runPartitionIndexOrPartitionScanQueryOnGiveNownedPartition(QueryRunner.java:219) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.map.impl.query.QueryPartitionoperation.runInternal(QueryPartitionoperation.java:46) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.map.impl.operation.MapOperation.run(MapOperation.java:112) [hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.spi.impl.operationservice.Operation.call(Operation.java:184) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.call(OperationRunnerImpl.java:256) [hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:237) [hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:452) [hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:166) [hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:136) [hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.executeRun(OperationThread.java:123) [hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.internal.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:102) [hazelcast-all-4.1.1.jar:4.1.1]
Caused by: java.lang.classNotFoundException: org.learning.cache.hazelcast.entity.Location
        at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[?:?]
        at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[?:?]
        at java.lang.classLoader.loadClass(ClassLoader.java:522) ~[?:?]
        at com.hazelcast.internal.nio.ClassLoaderUtil.tryLoadClass(ClassLoaderUtil.java:289) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.internal.nio.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:249) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at com.hazelcast.internal.nio.IoUtil$ClassLoaderAwareObjectInputStream.resolveClass(IoUtil.java:783) ~[hazelcast-all-4.1.1.jar:4.1.1]
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1995) ~[?:?]
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1862) ~[?:?]
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2169) ~[?:?]
        at java.io.ObjectInputStream.readobject0(ObjectInputStream.java:1679) ~[?:?]
        at java.io.ObjectInputStream.readobject(ObjectInputStream.java:493) ~[?:?]
        at java.io.ObjectInputStream.readobject(ObjectInputStream.java:451) ~[?:?]
        at com.hazelcast.internal.serialization.impl.defaultserializers.JavaDefaultSerializers$JavaSerializer.read(JavaDefaultSerializers.java:83) ~[hazelcast-all-4.1.1.jar

hazelcast 版本“hazelcast-all-4.1.1” 春季启动版本:2.2.3.RELEASE

似乎 LocationEntity 类可能不存在于任何 Hazelcast 成员中,但无法找到如何解决此问题,感谢您的帮助谢谢!!

解决方法

您的 hazelcast-client.yaml 文件中存在错误。

第一行应该是:

hazelcast-client:

不是

hazelcast:

如果你添加这个,

    @Bean
    public ClientConfig clientConfig() throws Exception {
        ClientConfig clientConfig = new YamlClientConfigBuilder("hazelcast-client.yaml").build();
        return clientConfig;
    }

您可以打印加载的内容,以便更轻松地验证是否找到了您指定的配置。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。