我正在尝试重用以下文档中的代码:https ://geode.apache.org/docs/guide/11/developing/region_options/dynamic_region_creation.html
我遇到的第一个问题是
Cache cache = CacheFactory.getAnyInstance();
Region<String,RegionAttributes<?,?>> regionAttributesMetadataRegion = createRegionAttributesMetadataRegion(cache);
不应在构造函数中执行。如果是这样,代码是在客户端实例中执行的,它会因非服务器错误而失败。当这个修复时我收到
[fatal 2021/02/15 16:38:24.915 EET <ServerConnection on port 40527 Thread 1> tid=81] Serialization filter is rejecting class org.restcomm.cache.geode.CreateRegionFunction
java.lang.Exception:
at org.apache.geode.internal.ObjectInputStreamFilterWrapper.lambda$createSerializationFilter$0(ObjectInputStreamFilterWrapper.java:233)
问题是代码正在 dunit MemberVM 上执行,而所需的类实际上是执行测试的包的一部分。所以我想我应该以某种方式将类(或者可能是 jar)分别注册到 dunit MemberVM。怎么做?
另一个问题是:当前代码正在检查该区域是否存在,如果不存在则调用该方法。在这两种情况下,它还尝试创建 clientRegion。问题是这是否是正确的方法?
Region<?,?> cache = instance.getRegion(name);
if(cache==null) {
Execution execution = FunctionService.onServers(instance);
ArrayList argList = new ArrayList();
argList.add(name);
Function function = new CreateRegionFunction();
execution.setArguments(argList).execute(function).getResult();
}
ClientRegionFactory<Object, Object> cf=this.instance.createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY).addCacheListener(new ExtendedCacheListener());
this.cache = cf.create(name);
BR Yulian Oifa