当前位置: 首页 > 知识库问答 >
问题:

在hazelcast management center Console上获取SerializationException,其中自定义对象用作映射中的键、值

仲孙经赋
2023-03-14

我已经在Hazelcast集群中创建了一个地图。我可以在Hazelcast管理中心UI上看到我的地图的条目数增加了。在控制台,我也可以使用m.size命令获取大小。

我知道对于像Integer和String这样的原始包装类,我可以使用m.get命令查看任何键的值。我正在使用自定义对象作为映射的键和值,因此无法在控制台上使用m.keys或m.values命令。

它给出HazelCastSerializationException错误。我应该在Hazelcast管理中心端更改什么以在控制台上反序列化数据?

我使用hazelcast版本3.8.1,并使用startManCenter.bat脚本在mancenter目录中运行hazelcast管理中心。

我想知道Hazelcast管理中心将如何获得自定义类。我是否应该将我的类文件或编译好的jar复制到Hazelcast管理中心上的某个地方,以便它获得所需的类?

以下是管理中心控制台的日志:

    hazelcast[rules_cache] > m.size
Size = 7
hazelcast[rules_cache] > m.keys
com.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.ClassNotFoundException: com.rulemanagement.model.RuleCacheKey
    at com.hazelcast.internal.serialization.impl.JavaDefaultSerializers$JavaSerializer.read(JavaDefaultSerializers.java:224)
    at com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.read(StreamSerializerAdapter.java:48)
    at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toObject(AbstractSerializationService.java:184)
    at com.hazelcast.client.spi.ClientProxy.toObject(ClientProxy.java:187)
    at com.hazelcast.client.proxy.ClientMapProxy.keySet(ClientMapProxy.java:1047)
    at com.hazelcast.client.console.ClientConsoleApp.handleMapKeys(ClientConsoleApp.java:835)
    at com.hazelcast.client.console.ClientConsoleApp.handleCommand(ClientConsoleApp.java:369)
    at com.hazelcast.client.console.ClientConsoleApp.start(ClientConsoleApp.java:184)
    at com.hazelcast.client.console.ClientConsoleApp.main(ClientConsoleApp.java:1564)
Caused by: java.lang.ClassNotFoundException: com.rulemanagement.model.RuleCacheKey
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at com.hazelcast.nio.ClassLoaderUtil.tryLoadClass(ClassLoaderUtil.java:149)
    at com.hazelcast.nio.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:123)
    at com.hazelcast.nio.IOUtil$ClassLoaderAwareObjectInputStream.resolveClass(IOUtil.java:522)
    at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
    at java.io.ObjectInputStream.readClassDesc(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at com.hazelcast.internal.serialization.impl.JavaDefaultSerializers$JavaSerializer.read(JavaDefaultSerializers.java:219)
    ... 8 more
hazelcast[rules_cache] >

共有1个答案

娄飞鸾
2023-03-14

我使用的是HazelCast-3.8.1 zip包附带的ClientConsole.bat。它在demo文件夹下。我已经在demo文件夹中添加了hazelcast-client.xml文件,以连接到远程hazelcast节点。这为我提供了类似于我们在hazelcast管理中心控制台选项卡上看到的控制台。

使用ClientConsole.bat的好处是,即使没有配置管理中心,我也可以查询在hazelcast集群上创建的映射。

我只能使用m.size命令查看map是否获得新条目。由于我对键/值对使用了自定义类,所以其他命令(如m.keys和m.values)由于SerializationException而失败。

解决方案:我在HazelCast-3.8.1\lib目录中添加了包含那些类的JAR,并修改了ClientConsole.bat脚本以从lib目录加载额外的JAR。现在我可以运行m.keys和m.values命令。

 类似资料:
  • 我有一个用例,其中我需要维护两组JSON输出,一组具有JSON属性的漂亮名称,另一组没有。所以我决定自定义ObjectMapper,以便它忽略字段上的@JSONProperty(“pretty name”)注释,而使用字段属性名。在本例中,希望得到以下JSON输出 具有漂亮名称的JSON输出如下所示 我的ObjectMapper配置代码如下所示 我看了一些其他的答案,但对我不起作用。我得到了一个N

  • 我一直在研究GraphQL作为我的一些RESTAPI的替代品,虽然我认为我已经对基本知识了如指掌,就像我目前看到的大多数内容一样,但似乎缺少了一个重要的功能。 比如说,我有一系列这样的物品: 应用程序需要所有这些对象的映射,按ID索引: 我写过的每个API都能够以这样的格式返回结果,但我正在努力寻找一种用GraphQL来做到这一点的方法。我一直在运行第101个问题,但这更多地涉及未知模式。就我而言

  • 我想使用结构作为关键unordered_map我实现了散列和相等操作的结构。但是我有一个错误 hashtable_策略。h:1384:16:错误:对“(const ItemHash)(const Item)的调用不匹配 我怎样才能纠正错误? 我的密码

  • 初始化服务器时,出现以下错误: java.lang.IllegalStateException:无法将[java.lang.String]类型的值转换为属性“Object Mapper”所需的类型[org.codehaus.jackson.map.objectMapper]:在org.springframework.beans.typeConverterDelegate.ConvertifEmen

  • 模型类1 型号2类 Rest控制器 为什么我的对象映射器bean(具有唯一的bean名称)影响了现有默认spring boot对象映射器的功能 在这种情况下,如果我无法使用默认对象映射器控制遗留代码,那么在不破坏遗留代码的情况下定义自定义对象映射器的选项是什么。注意:我不能以任何方式更改遗留代码。 如有任何帮助,不胜感激。

  • 使用代替和代替 然后在请求属性中添加 但是当我在javascript中检索它时,我得到了jsonObject的值 我在我的项目中已经使用了下面的库,如果需要,可以使用任何新的库