Gemfire - IllegalStateException при создании кэша - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь запустить клиентское приложение 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 Ответ

1 голос
/ 19 августа 2011

Вы должны включить подписку в вашем пуле. Просто добавьте атрибут 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 и создавать корневые области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...