Hazelcast可移植序列化 - 处理null属性

时间:2014-07-10 15:27:40

标签: java caching serialization hazelcast distributed-caching

我使用Hazelcast将一些数据存储在IMap中,但目前我正面临一个"问题"在POJO中使用null属性存储在缓存中。

想象一下,我有以下pojo:

public class TestPojo implements Portable {

    public static final int CLASS_ID = 1;

    private Long id;
    private String description;
    private Long value;

    @Override
    public int getFactoryId() {
        return 1;
    }

    @Override
    public int getClassId() {
        return CLASS_ID;
    }

    @Override
    public void writePortable(PortableWriter writer) throws IOException {
        writer.writeLong("id", id);
        writer.writeUTF("description", description);
        writer.writeLong("value", value);
    }

    @Override
    public void readPortable(PortableReader reader) throws IOException {
        id = reader.readLong("id");
        description = reader.readUTF("description");
        value = reader.readLong("value");
    }
}

问题在于序列化此类包含属性'值' = null它将抛出NullPointerException,因为writeLong方法使用原始long。

  

[3.3-EA2]加载所有任务时出现异常:com.hazelcast.nio.serialization.HazelcastSerializationException:java.lang.NullPointerException

我的问题是:应该以正确的方式处理这个空值?

我正在使用Hazelcast 3.3-EA2。

谢谢。

2 个答案:

答案 0 :(得分:1)

为什么要使用便携式设备? (已识别)DataSerializable不那么痛苦。 Portable不处理空值,因此它意味着您需要转换为字符串,然后例如插入'null'表示null或'1234'表示处理null的数字。通过阅读你读出字符串,如果它包含'null',那么你设置为null,否则你就是做Long.parseLong。

因此,除非你有充分的理由,否则我会远离它。

答案 1 :(得分:0)

只需检查if (value != null),然后再致电writer.writeLong(value)