问题
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