Архитектура клиент / сервер 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, которая получает блокировку, выполняет вашу логику и снимает блокировку перед возвратом.
Вы также можете рассмотреть возможность использования транзакций вместо глобальной блокировки. Вы можете инициировать транзакцию на стороне клиента.