Gemfire - 缓存创建时出现 IllegalStateException

Gemfire - IllegalStateException on cache create

提问人:Luchian Grigore 提问时间:8/18/2011 最后编辑:Dot NETLuchian Grigore 更新时间:9/2/2011 访问量:1780

问:

我正在尝试运行 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 的客户端池配置为 queue-enabled 设置为 true。

我不知道如何将queue-enabled设置为true。我将欣赏一些代码,而不是像“检查文档的这一部分”这样的答案。我已经到处找了。

java 分布式缓存 distributed-cache

评论


答:

2赞 Kirils Mensikovs 8/19/2011 #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:

<dynamic-region-factory />

客户端:

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

在这种情况下,不必使用 DynamicRegionFactory,可以使用 RegionFactory 并创建根区域。

评论

0赞 Luchian Grigore 8/29/2011
不起作用,我在创建缓存时出现异常 - 线程“main”中的异常 java.lang.UnsupportedOperationException:客户端缓存不支持操作 - 它在另一个异常之前抛出。
0赞 Luchian Grigore 8/29/2011
如何支持来自客户端的交易?
0赞 Kirils Mensikovs 8/31/2011
GemFire 6.6 将支持客户端上的事务。现在,如果你想拥有交易,你应该创建函数。