0

I am using Kryo Serialization for Hazelcast (3.5.4). Now I have the following object. public class XData extends HashMap {...} public class X { ..} Now, the XData will contain key as Integer and value as X object. I tried to have a KryoSerializer for XData:

public class XDataKryoSerializer<K, V> implements StreamSerializer<XData<K, V>>
{

private static final ThreadLocal<Kryo> kryoThreadLocal = new ThreadLocal<Kryo>()
{

@Override
protected Kryo initialValue()
{
    Kryo kryo = new Kryo();
    kryo.register(XData.class);
    kryo.register(X.class);
    return kryo;
}
};

@Override
public int getTypeId()
{
return KryoSerializationConstant.XDATA_TYPE;
}

@Override
public XData<K, V> read(ObjectDataInput inp) throws IOException
{
InputStream in = (InputStream) inp;
Input input = new Input(in);
Kryo kryo = kryoThreadLocal.get();
return kryo.readObject(input, XData.class);
}

@Override
public void write(ObjectDataOutput out, XData<K, V> xData) throws IOException
{
Kryo kryo = kryoThreadLocal.get();
Output output = new Output((OutputStream) out);
kryo.writeObject(output, xData);
output.flush();
}

@Override
public void destroy()
{
// TODO Auto-generated method stub

}
}

Here is the hazelcast.xml file:

<serialization>
    <portable-version>0</portable-version>
    <serializers>
        <serializer type-class="com.abc.hazelcast.benchmarking.data.javaSer.X"
            class-name="com.abc.hazelcast.benchmarking.data.kryoSer.XKryoSerializer" />
        <serializer type-class="com.abc.hazelcast.benchmarking.data.javaSer.XData"
            class-name="com.abc.hazelcast.benchmarking.data.kryoSer.XDataKryoSerializer" />
    </serializers>
</serialization>

<services enable-defaults="true" />

I also have a XKryoSerializable class in the similar way. Things work fine with Hazelcast but the XKryoSerializer does not get called while a xdata object is put in hazelcast. Is this the expected behavior or am I missing something? Is there a way so that the kryo serializer for content object, X can also gets called while a xdata object's read/write method is called?

Avik Dutta
  • 143
  • 12

0 Answers0