[英]What is the general practice for express and react based application. Keeping the server and client code in same or different projects/folders?
[英]Apache Geode - Creating region on DUnit Based Test Server/Remote Server with same code from client
我試圖在以下文檔中重用代碼: https://geode.apache.org/docs/guide/11/developing/region_options/dynamic_region_creation.ZFC35FDC70D5FC69D269883A8
我遇到的第一個問題是
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 上執行,所需的 class 實際上是 package 的一部分,在該部分下執行測試。 所以我想我應該以某種方式將這些類(或者可能是 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
我遇到的第一個問題是 Cache cache = CacheFactory.getAnyInstance(); 不應在構造函數中執行。 如果是這樣,代碼在客戶端實例中執行,它在非服務器錯誤上失敗。當這個修復我收到
在服務器端注冊Function
,您可以通過ID
執行它,而不是通過網絡發送 object(因此您不需要實例化Serialization filter
)錯誤。 例如, FunctionService.onServers(instance).execute(CreateRegionFunction.ID)
。
問題是代碼正在 dunit MemberVM 上執行,所需的 class 實際上是 package 的一部分,在該部分下執行測試。 所以我想我應該以某種方式將這些類(或者可能是 jar)分別注冊到 dunit MemberVM。 怎么做?
事實上,出於安全原因, Geode
不允許序列化/反序列化任意類。 內部Geode
分布式測試使用MemberVM
並設置一個特殊的屬性 ( serializable-object-filter
) 來規避這個問題。 這是一個示例,說明如何在自己的測試中實現這一目標。
另一個問題是:當前代碼正在檢查該區域是否存在,如果不存在則調用該方法。 在這兩種情況下,它還嘗試創建 clientRegion。 問題是這是否是正確的方法?
如果客戶端應用程序使用動態創建的區域,那么是的,您應該創建它,否則您將無法使用它。
作為旁注, Geode
在創建Region
時實現了很多內部邏輯,因此我不建議您自己動態創建區域。 相反,建議直接使用gfsh create region
命令,或者查看它的內部工作原理(參見此處)並嘗試重新使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.