0

次のドキュメントでコードを再利用しようとしています: 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で実行され、必要なクラスが実際にはテストが実行されるパッケージの一部であることです。したがって、MemberVMをdunitするために、クラス(またはjarの場合もある)を個別に登録する必要があると思います。それはどのように行うことができますか?

別の質問: 現在、コードは領域が存在するかどうかをチェックしており、存在しない場合はメソッドを呼び出しています。どちらの場合も、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 ユリアン・オイファ

4

1 に答える 1