2017-04-19 7 views
1

Hazelcastクラスターでマップを作成しました。私は自分のマップのHazelcast管理センターのUI上のエントリ数の増加を見ることができます。コンソールでは、m.sizeコマンドを使用してサイズを取得することもできます。ヘイルキャスト管理センターでSerializationExceptionを取得するカスタムオブジェクトをキーとして使用したコンソール、マップ内の値

私はIntegerとStringのようなプリミティブなラッパークラスを知っています。m.getコマンドを使って任意のキーの値を見ることができます。私はマップのキーと値としてカスタムオブジェクトを使用しているので、コンソール上でm.keysまたはm.valuesコマンドを使用することはできません。

HazelcastSerializationExceptionでエラーが発生します。コンソール上でデシリアライズされたデータを取得するには、Hazelcast Managementのセンター側で何を変更する必要がありますか?

ハローキャストバージョン3.8.1を使用し、startManCenter.batスクリプトを使用してmancenterディレクトリにHazelcast Managementセンターを実行します。

ヘーゼルキャスト管理センターがどのようにカスタムクラスを取得するのだろうか。クラスファイルやコンパイル済みのjarファイルをHazelcast Managementセンターのどこかにコピーして、必要なクラスを取得できるようにする必要がありますか?ここで

は、管理センターコンソールからのログです:

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); – hsingh

+0

in IMap > RuleCacheKeyとCachedRuleはどちらもSerializableを実装しており、プリミティブメンバーのみを含んでいます。 m.keysの実行中にエラーが発生しました: エラー:HazelcastSerializationException [java.lang.ClassNotFoundException:RuleCacheKey] – hsingh

答えて

1

私はhazelcast-3.8.1 zipパッケージで提供さclientConsole.batを使用しています。 デモフォルダの下にあります。そのデモフォルダにhazelcast-client.xmlファイルを追加して、リモートハゼルキャストノードに接続しました。これは、私がヘーゼルキャスト管理センターのコンソールタブに表示されているのと同様のコンソールを私に提供します。

clientConsole.batを使用するメリットは、管理センターが設定されていなくても、ヘーゼルキャストクラスタで作成したマップを照会できることです。

マップが新しいエントリを取得しているかどうかを確認するためにm.sizeコマンドしか使用できませんでした。キー/値ペアにカスタムクラスを使用していたので、m.keysやm.valuesなどの他のコマンドはSerializationExceptionのために失敗していました。

解決方法:これらのクラスを含むjarファイルをhazelcast-3.8.1 \ libディレクトリに追加し、clientConsole.batスクリプトを修正して、libディレクトリから追加のjarファイルを読み込みました。 m.keysとm.valuesコマンドを実行できるようになりました。

関連する問題