1

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に設定する方法がわかりません。「ドキュメントのこの部分を確認してください」のような答えではなく、いくつかのコードをいただければ幸いです。私はすでにどこを見てきました。

4

1 に答える 1

2

プールでサブスクリプションを有効にする必要があります。プール構成に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を使用して、ルート領域を作成できます。

于 2011-08-19T09:20:07.310 に答える