2017-04-19 16 views
1

我在Hazelcast集羣中創建了一個映射。我可以在我的地圖上看到Hazelcast管理中心用戶界面上的條目數量增加。在控制檯上,我還可以使用m.size命令獲取大小。在hazelcast管理中心控制檯上獲取序列化異常,並將自定義對象用作關鍵字,地圖中的值

我知道像Integer和String這樣的基本包裝類,我可以使用m.get命令來查看任何鍵的值。我使用自定義對象作爲map的鍵和值,所以我無法在控制檯上使用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] > 
+0

你可以分享你的自定義對象實現代碼以及'HazelcastSerializationException'的堆棧跟蹤嗎? – emre

+0

我正在使用如下圖: IMap >> map = hz.getMap(mapKey); IMap中的 – hsingh

+0

> RuleCacheKey和CachedRule都實現了Serializable,它們只包含基本成員。在運行m.keys時出現錯誤: 錯誤:HazelcastSerializationException [java.lang.ClassNotFoundException:RuleCacheKey] – hsingh

回答

1

我使用提供hazelcast-3.8.1 zip包的clientConsole.bat。 它在演示文件夾下。我在該演示文件夾中添加了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命令。

相關問題