Getting SerializationException on hazelcast management center Console with custom objects used as key, value in map

不羁岁月 提交于 2019-12-24 09:27:03

问题


I have created a map in Hazelcast cluster. I can see the increased count of Entries on Hazelcast management center UI for my map. On console I can also get the size using m.size command.

I know for primitive wrapper classes like Integer and String I can use m.get command to see the values for any key. I am using custom objects as key and value for map, so I am not able to use m.keys or m.values command on console.

It gives Error with HazelcastSerializationException. What should I change on Hazelcast Management center side to get data deserialized on console?

I use hazelcast version 3.8.1 and run Hazelcast Management center in mancenter directory using startManCenter.bat script.

I wonder how Hazelcast Management center will get the custom classes. Should I copy my class files or compiled jar to somewhere on Hazelcast Management center, so that it can get required classes?

Here is the log from management center console:

    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:


I am using the clientConsole.bat provided with hazelcast-3.8.1 zip package. It is under demo folder. I have added hazelcast-client.xml file in that demo folder to connect to remote hazelcast node. This provides me the console similar to what we see on hazelcast management center console tab.

Benefit to use clientConsole.bat is that even if management center is not configured, I can query my map created over hazelcast cluster.

I was able to use only m.size command to see if map is getting new entries. Since I was using custom class for key/value pair so other commands like m.keys and m.values were failing due to SerializationException.

Solution: I added the jars containing those classes in hazelcast-3.8.1\lib directory and modified clientConsole.bat script to load additional jars from lib directory. Now I am able to run m.keys and m.values command.



来源:https://stackoverflow.com/questions/43487914/getting-serializationexception-on-hazelcast-management-center-console-with-custo

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!