2011-08-18 49 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支持客户端的交易。现在你应该创建函数,如果你想有事务。 –