Архитектура клиент / сервер Gemfire и блокировка региона

Я использую клиент-серверную архитектуру Gemfire, несколько серверов совместно используют реплицируемый регион с "глобальной" областью действия.

У меня есть клиент, где клиентский регион определяется следующим образом:

<gfe:client-region id="regionId" name="regionName" shortcut="CACHING_PROXY" />

Этот клиентский регион служит прокси для глобального региона на серверах.

Теперь я хотел бы заблокировать регион от моего клиента при выполнении некоторых операций, чтобы ни один другой клиент не мог изменить его, пока первый клиент выполняет какое-то критическое задание.

Lock regionLock = clientRegion.getRegionDistributedLock();

К сожалению, я получаю исключение:

java.lang.IllegalStateException: Only supported for GLOBAL scope, not LOCAL

Итак, есть ли способ заблокировать регион со стороны клиента?

1 ответ

Блокировка региона на стороне клиента не поддерживается.

Если вы хотите выполнить несколько операций под блокировкой, лучше всего использовать функцию gemfire и выполнять эти операции на стороне сервера. Вы можете написать функцию gemfire, которая получает блокировку, выполняет вашу логику и снимает блокировку перед возвратом.

Вы также можете рассмотреть возможность использования транзакций вместо глобальной блокировки. Вы можете инициировать транзакцию на стороне клиента.

Другие вопросы по тегам