Web アプリケーションがデータを取得するために Hazelcast キャッシュにクエリを実行しているときに、HazelcastSerializationException がスローされるという問題に直面しています。hazelcast-all-3.6.6.jar を使用しています。
以下は、サーバー ログから収集された同じスタック トレースです。
java.util.concurrent.ExecutionException: com.hazelcast.nio.serialization.HazelcastSerializationException: com.hazelcast.internal.serialization.impl.ArrayDataSerializableFactory@5e5caba is not be able to create an instance for id: 100 on
factoryId: -32
at com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolveApplicationResponseOrThrowException(InvocationFuture.java:360) ~[hazelcast-all-3.6.6.jar!/:3.6.6]
at com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.get(InvocationFuture.java:225) ~[hazelcast-all-3.6.6.jar!/:3.6.6]
at com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.get(InvocationFuture.java:204) ~[hazelcast-all-3.6.6.jar!/:3.6.6]
at com.hazelcast.map.impl.query.MapQueryEngineImpl.addResultsOfPagingPredicate(MapQueryEngineImpl.java:503) ~[hazelcast-all-3.6.6.jar!/:3.6.6]
at com.hazelcast.map.impl.query.MapQueryEngineImpl.queryAllPartitionsWithPagingPredicate(MapQueryEngineImpl.java:388) ~[hazelcast-all-3.6.6.jar!/:3.6.6]
at com.hazelcast.map.impl.proxy.MapProxyImpl.values(MapProxyImpl.java:635) [hazelcast-all-3.6.6.jar!/:3.6.6]
この例外は、QueryResultRow を取得した後、シリアル化に失敗する Hazelcast クラスにあります。以下は、正確に失敗した場合のコード スニペットです。
QueryResultRow row = (QueryResultRow)i$1.next();
Object key = this.toObject(row.getKey());
Object value = this.toObject(row.getValue());
以下は toObject() メソッドの実装です。
protected Object toObject(Object obj) {
return this.serializationService.toObject(obj);
}