我在我的应用程序中使用Hazelcast作为共享地图。我的地图是这样的:
Map<String, MyObject>
和MyObject
:
class MyObject implements Serializeble {
// Map FieldName -> FieldValue
Map<String, Object> myMap;
}
所以我想使用Hazelcast distributed query支持来查询我的对象。我已经检查过Hazelcast使用get方法来检索对象值,但在我的情况下,我没有得到,而不是我想实现自己的{{1喜欢:
getField
并强制Hazelcast调用此方法。作为一种解决方法,我已经破解了Hazelcast代码以在类中使用CustomGetter
Object getField(String fieldName) {
return myMap[fieldName];
}
第144行:
/hazelcast/src/main/java/com/hazelcast/query/impl/ReflectionHelper.java
这里是我的if (localGetter == null) {
localGetter = new CustomFieldGetter(name, obj);
}
课程:
CustomFieldGetter
好的很酷,在重新编译Hazelcast之后,使用这个新的jar,我可以使用普通的sql来查询。但是对于pagingQueries,我遇到了一些错误。
所以我最后的问题是: 我想避免破解Hazelcast代码(进一步更新)。 Hazelcast在这个问题上有一些支持吗?这个问题还有其他解决办法吗?
PS:我使用的是Hazelcast版本 - &gt;的 hazelcast-3.3-RC3
提前致谢。
答案 0 :(得分:3)
一个选项是实现Portable接口。然后,您可以将每个条目写为单独的字段。这假设条目值也实现了Portable接口。
查看sample code如何使用Portable。