2011-08-18 39 views
0

我試圖運行的GemFire客戶端應用程序,但運行下面的代碼時,我得到一個IllegalStateException:的GemFire - 高速緩存IllegalStateException異常創建

//clientPool is the name of the pool from the client 
DynamicRegionFactory.Config config = new DynamicRegionFactory.Config(null,(String)"clientPool",false,true); 
dynRegFact = DynamicRegionFactory.get(); 
dynRegFact.open(config);   
_cache = new ClientCacheFactory().set("locators", "") 
       .set("mcast-port", "0").set("log-level", "error") 
       .set("cache-xml-file", xmlFileName) 
       .create(); 

異常線程「main」 java.lang.IllegalStateException :必須將DynamicRegionFactory的客戶端池配置爲啓用隊列的設置爲true。

我不知道如何將啓用隊列的設置爲true。我將不勝感激一些代碼,而不是諸如「檢查這部分文檔」的答案。我已經到處尋找了。

回答

1

您應該在您的池中啓用訂閱。只需將 subscription-enabled =「true」屬性添加到您的池配置。

注意:您的客戶應支持交易。在緩存服務器上使用動態區域會更好。從客戶端調用遠程功能。

例子:

功能:

public class CreateRegionFunction extends FunctionAdapter { 

@Override 
public void execute(FunctionContext fc) { 
    String name = (String) fc.getArguments(); 
    Region reg = DynamicRegionFactory.get().createDynamicRegion("/parent", 
      name); 

    if (reg == null) { 
     fc.getResultSender().lastResult("ERROR"); 
    } else { 
     fc.getResultSender().lastResult("DONE"); 
    } 
} 

@Override 
public String getId() { 
    return "create-region-function"; 
} 

} 

服務器端:

CreateRegionFunction creatRegFun = new CreateRegionFunction(); 
FunctionService.registerFunction(creatRegFun); 

在你的服務器緩存添加動態區域工廠:

<dynamic-region-factory /> 

客戶端:

FunctionService.onServer(PoolManager.find("poolName")) 
    .withArgs("child") 
    .execute("create-region-function") 
    .getResult(); 

在這種情況下,使用DynamicRegionFactory並不是強制性的,您可以使用RegionFactory並創建根區域。

+0

沒有工作,我得到一個創建緩存的異常 - 線程「main」中的異常java.lang.UnsupportedOperationException:客戶端緩存不支持操作 - 它在其他異常之前被拋出。 –

+0

我如何支持來自客戶端的交易? –

+0

GemFire 6.6支持客戶端的交易。現在你應該創建函數,如果你想有事務。 –