我使用的是客户端 - 服务器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
那么,有没有办法从客户端锁定一个区域?
答案 0 :(得分:2)
不支持从客户端锁定区域。
如果您想在锁定下执行多项操作,最好的办法是使用gemfire功能并在服务器端执行这些操作。您可以编写一个gemfire函数来获取锁定,执行逻辑并在返回之前释放锁定。
您也可以考虑使用事务而不是全局锁。您可以在客户端发起交易。