gpt4 book ai didi

java - 自定义对象中的 Hazelcast 查询

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:22 25 4
gpt4 key购买 nike

我在我的应用程序中使用 Hazelcast 作为共享 map 。我的 map 是这样的:

Map<String, MyObject>

MyObject:

class MyObject implements Serializeble {
// Map FieldName -> FieldValue
Map<String, Object> myMap;
}

所以我想使用 Hazelcast distributed query支持在我的对象中查询。我已经检查过 Hazelcast 使用 get 的方法来检索对象值,但在我的例子中我没有 get,而不是我想实现我自己的 getField 像:

Object getField(String fieldName) {
return myMap[fieldName];
}

并强制 Hazelcast 调用此方法。作为解决方法,我破解了 Hazelcast 代码以在类里面使用 CustomGetter

/hazelcast/src/main/java/com/hazelcast/query/impl/ReflectionHelper.java

第 144 行:

if (localGetter == null) {
localGetter = new CustomFieldGetter(name, obj);
}

这里是我的 CustomFieldGetter 类:

static class CustomFieldGetter extends Getter {
final Object value;
final Class type;
final String fieldName;

CustomFieldGetter(String fieldName, Object obj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
super(null);
this.fieldName = fieldName;
this.value = obj.getClass().getMethod("getField", String.class).invoke(obj, fieldName);
this.type = value.getClass();
}

@Override
Object getValue(Object obj) throws Exception {
return value;
}

@Override
Class getReturnType() {
return type;
}

@Override
boolean isCacheable() {
return false;
}

@Override
public String toString() {
return "FieldGetter [parent=" + parent + ", field=" + fieldName + "]";
}
}

好吧,在重新编译 Hazelcast 并使用这个新 jar 之后,我可以使用纯 sql 进行查询。但是对于 pagingQueries 我有一些错误。

所以我最后的问题是:我想避免破解 Hazelcast 代码(用于进一步更新)。 Hazelcast 在这个问题上有一些支持吗?这个问题还有其他解决方案吗?

PS:我使用的是 Hazelcast 版本 -> hazelcast-3.3-RC3

提前致谢。

最佳答案

一个选择是实现Portable界面。然后你可以将每个条目写成一个单独的字段。这假定条目值也实现了 Portable 接口(interface)。

查看sample code如何使用可移植。

关于java - 自定义对象中的 Hazelcast 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25570850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com